如何在没有本地依赖性的情况下收缩包装npm模块

时间:2013-05-06 20:01:58

标签: npm shrinkwrap

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

  "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安装。所以理想情况下我想删除node modules文件夹并只传递shrinkwrap.json文件。但它有这个“来自”。我过去曾生产过收缩膜包装机那里没有“起源”字段。 如何生成没有“from”/我可以从package.json获取一个shrinkwrap文件。所以我的应用程序将更精简。我可以全局维护所有节点模块。

由于

2 个答案:

答案 0 :(得分:1)

我对你的问题感到有点困惑。

Shrinkwrap不会安装,打包,上传或对依赖项执行任何操作。

它只是扫描已安装的 node_modules并将版本(递归地)记录到文件中。在定义该文件之后调用npm install变得可重复,这是principle of software engineering

几个月前推出了“来自”。 npm shrinkwrap命令似乎将其设置为安装模块的URL。这可能是为了便携性。 npm install获取模块名称,查询注册表(其URL可配置为npm config设置)并安装它。我可以使用相同的package.jsonnpm-shrinkwrap.json,将它们放在另一台计算机上,如果该计算机的npm config设置指向不同的注册表,理论上会得到不同的结果。因此,将已解析的URL嵌入到shrinkwrap文件中会为npm install

添加额外的可重复性级别

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

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

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

答案 1 :(得分:1)

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

来自doc:

  

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

     

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