我尝试使用节点模块依赖项列表维护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文件。所以我的应用程序将更精简。我可以全局维护所有节点模块。
由于
答案 0 :(得分:1)
我对你的问题感到有点困惑。
Shrinkwrap不会安装,打包,上传或对依赖项执行任何操作。
它只是扫描已安装的 node_modules并将版本(递归地)记录到文件中。在定义该文件之后调用npm install
变得可重复,这是principle of software engineering。
npm shrinkwrap
命令似乎将其设置为安装模块的URL。这可能是为了便携性。 npm install
获取模块名称,查询注册表(其URL可配置为npm config
设置)并安装它。我可以使用相同的package.json
和npm-shrinkwrap.json
,将它们放在另一台计算机上,如果该计算机的npm config
设置指向不同的注册表,理论上会得到不同的结果。因此,将已解析的URL嵌入到shrinkwrap文件中会为npm install
添加额外的可重复性级别
有关设置注册表参数的详细信息,请参阅npm config man page。
根据github上的npm issue 3145,已知“from”设置会导致1.2.x之前的npm系统出现向后兼容性问题。升级是唯一的解决方案。
答案 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目录一样),而是检查到源代码控制。