1

我尝试使用节点模块依赖项列表来维护 package.json。当我调用 npm install 时,它会安装节点模块。并在我的应用程序中为其生成一个文件夹。我称之为 npm 收缩包装。但这会产生对本地节点模块的依赖

  "dependencies": {
"async": {
  "version": "0.2.5",
  "from": "async@0.2.5",
  "resolved": "https://registry.npmjs.org/async/-/async-0.2.5.tgz"
},

当我将应用程序上传到 appfog 服务器时,它可以从 npm-shrinkwrap.json 安装。所以理想情况下,我想删除节点模块文件夹并传递 shrinkwrap.json 文件。但它有这个“来自”。我过去曾生成收缩包装,但其中没有“来自”字段。如何在没有“from”的情况下生成/我可以从 package.json 中获取一个收缩包装文件吗?所以我的应用程序会更精简。我可以全局维护所有节点模块。

谢谢

4

2 回答 2

1

我对你的问题有点困惑。

Shrinkwrap 不会安装、打包、上传或对您的依赖项做任何事情。

它所做的只是扫描您安装的 node_modules 并将版本(递归)记录到一个文件中。在定义该文件后调用npm install变得可重复,这是软件工程的原则

“从”是几个月前引入的。该npm shrinkwrap命令似乎将其设置为安装模块的 URL。这可能是为了便携性。 npm install获取模块名称,查阅注册表(其 URL 可作为npm config设置进行配置)并安装它。我可以采取同样的package.json方法npm-shrinkwrap.json,将它们放在另一台机器上,如果那台机器的npm config设置指向不同的注册表,理论上会得到不同的结果。因此,将解析后的 URL 嵌入到收缩包装文件中增加了额外的可重复性级别npm install

有关设置注册表参数的详细信息,请参阅npm config 手册页

根据 github 上的 npm issue 3145,已知“from”设置会导致 1.2.x 之前的 npm 系统出现向后兼容性问题。升级是唯一的解决方案。

https://github.com/isaacs/npm/issues/3145

于 2013-05-06T20:14:59.253 回答
1

我认为您正在寻找收缩包:https ://www.npmjs.com/package/shrinkpack

来自文档:

Shrinkpack 通过在项目中维护 node_shrinkwrap 目录来补充 npm shrinkwrap 命令,其中包含与 npm install 从https://registry.npmjs.org下载的完全相同的 tarball 。

npm install 过程的其余部分完全相同。唯一的区别是在安装和构建项目时不需要网络活动。node_shrinkwrap 目录可以在你的编辑器中被忽略(很像 node_modules 目录),而是检查到源代码控制中。

于 2017-03-28T18:19:41.960 回答