【问题标题】:How to shrinkwrap npm modules without local dependencies如何在没有本地依赖项的情况下收缩包装 npm 模块
【发布时间】:2013-05-06 20:01:58
【问题描述】:

我尝试使用节点模块依赖项列表来维护 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 中获取一个收缩包装文件吗?所以我的应用程序会更精简。我可以全局维护所有节点模块。

谢谢

【问题讨论】:

    标签: npm shrinkwrap


    【解决方案1】:

    我对你的问题有点困惑。

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

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

    “from”是几个月前引入的。 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

    【讨论】:

    • 我猜问题出在 appfog 无法识别“来自”字段。如果我从 npm-shrinkwarp.json 中删除“来自”字段,它会将其安装在服务器中。有没有办法在没有“From”字段的情况下生成 shrinkwrap.json。
    • 啊,我明白了。这是一个 github 问题,isaacs 基本上说唯一的选择是在您安装软件包的盒子上升级 npm。 github.com/isaacs/npm/issues/3145
    • shrinkwrap 可以让您走得更远,但仅靠自己并不一定足够,可以取消发布包,可以关闭注册表进行维护,或者您可以离线。有关更多信息,请参阅收缩包装的理由:github.com/JamieMason/shrinkpack/#justification
    【解决方案2】:

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

    来自文档:

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

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

    【讨论】:

      猜你喜欢
      • 2013-11-29
      • 2017-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-03
      • 2017-04-08
      • 2018-05-30
      相关资源
      最近更新 更多