问题标签 [npm-shrinkwrap]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
npm - JS 包应该有收缩包装吗?
我知道使用npm shrinkwrap
有助于锁定依赖关系,以帮助保证应用程序的可复制构建。
我的问题是,如果您构建的是模块而不是应用程序怎么办?模块的每个版本都应该包含一个npm-shrinkwrap.json
? 我查看了一些开源模块,但没有在它们的存储库中看到它们(例如:express、react、chai、async)。
我的理解是 npm (>=3) 通过整合兼容版本提供的好处。例如,如果 pkg-a 依赖于 lodash^4.0.0
并且 pkg-b 依赖于 lodash ^4.3.5
,它只会安装最新的 lodash 4 版本的一个副本。但是如果 pkg-a 和 pkg-b 都创建了 shrinkwraps,那么它们很可能不会对应于完全相同的 lodash 版本,并且需要安装该库的两个副本,即使它们是完全兼容的版本。
不包括收缩包装的缺点是库作者正在构建一个包,该包将被其他应用程序依赖,并且当它的任何依赖项(或依赖项的依赖项,递归地)发布破坏性更改时,该包可能随时损坏次要版本或补丁版本。并且在依赖项的依赖项中断的情况下,库作者除了发布收缩包装外,无能为力。
例如,如果我的库依赖于request,它依赖于hawk,并且 hawk 在补丁版本中发布了一个重大更改,那么即使锁定到 request 的确切版本也不会修复我的库——唯一的方法(到目前为止正如我所看到的)修复我的库是发布一个缩小鹰的确切版本的收缩包装。
这变得冗长,但我试图了解是否有更好的论据在 Node 模块中使用收缩包装而不是通过不使用它们来利用 npm 提供的好处。
npm-shrinkwrap - 可以在项目已经启动时安装 npm-shrinkwrap
我目前正在完成我的 node.js 项目的一半,现在,我想安装 npm-shrinkwrap 进行依赖管理。所以可以吗,如果我现在这样做,或者我现在不应该这样做。
node.js - Foreach 未定义来自查询的数据
如果我不在我的 aws ubuntu 14.04 机器上使用收缩包装或纱线,我的查询工作正常。
但是,相同的查询可以在本地机器上使用 shrinkwrap/yarn,但不知何故,它们在 aws 机器上不起作用。
查询如下图:
我得到的错误是:
npm - npm shrinkwrap 抱怨缺少依赖项
我一直在我的 CI 环境中构建版本,方法是从源代码管理中签出,在干净的目录上运行 npm install,然后运行npm dedupe && npm shrinkwrap
. 这一直运作良好。
现在 shrinkwrap 抛出一个错误:
这不是我的依赖项之一,因此必须是子依赖项。我已经尝试将此依赖项检查到源代码管理中,但它仍然会引发相同的错误。
有解决方法吗?在必须将所有内容迁移到纱线之前,我至少想尝试一些东西......
npm - 为什么 npm shrinkwrap 用 from 字段的 url 替换版本名称?
我更改了正在处理的包的名称,因此我重新运行了 npm shrinkwrap。我没有更改其他依赖项的任何字段。
我注意到 npm shrinkwrap 改变了 pg 包的“from”属性的地方有些奇怪:
"来自": "pg@>=4.0.0 <5.0.0",
到
并且很好奇为什么会这样。
node.js - 为生产减少 node_modules 的大小
我创建了 node_modules,用于在 ngrok 的帮助下将插件从本地主机上传到在线站点,并在 CommandPrompt 中使用npm install 。但创建的 node_modules 文件夹大小为 78mb。在这种情况下,我必须通过删除不需要的文件夹来减小大小,所以我上网并得到了两个建议,因为减小大小可能很有效,它们是:使用--production 模式,另一个是使用shrinkwrap。
作为第一步,我使用了这里指定的命令 npm install --production和npm install --only=production:How do you prevent install of "devDependencies" NPM modules for Node.js (package.json)? ,但我没有看到文件夹大小有任何变化。
然后参考如何使用该站点中给出的收缩包装来减小尺寸并进行了尝试:https ://docs.npmjs.com/cli/shrinkwrap ,但没有成功。
另外我在这里提到:https ://www.npmjs.com/package/modclean ,使用命令modclean -n default:safe我减少了 10-11mb。
但是,我仍然在 node_modules 中有大量不需要的文件夹。我在 package.json 中指定了几个需要的依赖项,如下所示,
我在 package.json 中给出的依赖项很少,但我看到在 node_modules 中创建了大量文件夹。如何减小 node_modules 的大小,还有其他过程吗?
npm - 如何在我的 yarn.lock 文件中省略一个包?
因此,在我的 package.json 中,我有一堆 npm 库,以及一个从 git ssh url 中提取的私有 repo,它需要始终是最新版本。yarn.lock 添加了 git sha 和 yarn upgrade 等不会抢到最新的。
基本上,鉴于此:
我希望 yarn.lock 或 npm shrinkwrap 忽略my-private-git-repo
这可能吗?
npm - npm-shrinkwrap.json 和 package-lock.json 有什么区别?
随着npm@5 的发布,它现在将写入 a package-lock.json
,除非 anpm-shrinkwrap.json
已经存在。
我通过以下方式全局安装了 npm@5:
现在,如果npm-shrinkwrap.json
在以下期间找到 a:
将打印警告:
所以我的结论是我应该用package-lock.json
.
然而,为什么它有一种新的格式呢?能做什么不能package-lock.json
做什么npm-shrinkwrap.json
?
npm - 收缩包装文件是如何生成的?
使用 shrinkwrap 锁定节点模块时,如何生成 npm-shrinkwrap.json 文件?它是否递归地检查 node_modules 文件夹并在那里获取它的信息?
我之所以问,是因为我在代理后面成功安装了 npm,该代理将 github 存储库转换为内部工件存储库,但是生成的 shrinkwrap 包含直接到 github 的 url(我不想要的)
npm - 如何解决 js-data-angular 和 js-data-http 之间的依赖冲突
我目前正在做一个项目,该项目安装了 2 个 npm 包:
js-data-http
和js-data-angular
.
问题是 js-data-http requiresjs-data@>=3.0.0
和 js-data-angular requires js-data@>=2.0.0 <3
。我查看了这两个包的所有版本,找不到任何与 js-data 的依赖项匹配的版本。
由于依赖冲突,我无法生成 npm-shrinkwrap,还有其他人经历过这个吗?