【问题标题】:How to shrinkwrap devDependencies, but not install them unless necessary?如何收缩包装 devDependencies,但除非必要,否则不要安装它们?
【发布时间】:2017-12-10 23:13:00
【问题描述】:

我需要一堆devDependencies 才能运行测试套件并使用npm shrinkwrap 锁定生产依赖项。问题是当我运行npm install 时,只安装了生产依赖项,为了安装devDependencies,我必须删除 npm-shrinkwrap.json 并再次运行它。

现在,如果 shrinkwrap 也包含 devDependencies,它们会安装在生产环境中,而不需要它们。当然应该有一些命令行参数来强制只安装正常的依赖项?

【问题讨论】:

    标签: node.js npm


    【解决方案1】:

    2016 年 9 月:

    正如其他人也提到的那样,从npm v3.10.8 开始,我们为增强收缩包装功能付出了巨大的努力。

    感谢this,您可以在仅安装生产依赖项时保持devDependencies 锁定:

    npm shrinkwrap --dev
    npm install --only=prod
    

    2013 年回答:

    NPM docs中所述:

    由于npm shrinkwrap 旨在锁定您的依赖项 生产使用,devDependencies 将不包括在内,除非您 运行 npm shrinkwrap 时显式设置 --dev 标志。如果 已安装的devDependencies 被排除在外,然后 npm 将打印警告。 如果您希望它们默认与您的模块一起安装,请 考虑将它们添加到依赖项中。

    基本上,或者你锁定所有部门,或者只锁定生产部门。

    即使运行 npm install --devnpm install --force 也无法超越收缩包装功能。

    【讨论】:

    • 所以基本上没有办法做我所追求的?
    • 通过 CLI,看起来就是这样。你可以编写一些代码,也许是一个安装后 NPM 脚本,如果传递了一个 argv --dev,它会安装你的开发依赖项。
    • 这可能即将推出,请参阅此拉取请求:github.com/npm/npm/pull/10073
    • 问题是我不只是为我的生产应用程序使用收缩包装;我还用来锁定我的开发依赖项,这样我的 CI 测试就不会出错。
    • @mikestaub 它已在 3.10.8 中修补:github.com/npm/npm/releases/tag/v3.10.8
    【解决方案2】:

    根据changelog,这个功能最近被添加到 npm 客户端的 v3.3 中

    您现在可以运行npm install --only=prod 来实现您想要的效果。

    【讨论】:

    • 不正确。这与npm install --production 相同,同样存在被npm-shrinkwrap.json 覆盖的问题。
    • npm shrinkwrap --also=dev 适合懒人。谢谢
    【解决方案3】:

    编辑 2016/09/13

    我已经测试了 npm v3.10.8,这个功能现在可以正常工作了。我们已经压缩了我们的 devDependencies,并且在部署时只能安装 prod 依赖项。


    我认为值得一提的是,此功能应该很快就会按预期开始工作。根据这个githubissue,很多人都遇到了同样的问题,根据这个pull request,它将在下一个版本中(计划于2016-09-08)。

    合并拉取请求后,您所要做的就是:

    npm i --only=prod
    

    【讨论】:

      【解决方案4】:

      至于 npm 5(我在 5.5.1 和 5.6.0 上试过),--production (--only=prod) 标志是有问题的。

      当文件夹中存在package-lock.json时,

      npm shrinkwrap --production
      

      只需将文件名更改为 npm-shrinkwrap.json

      我设法解决这个问题的方法是运行:

      npm prune --production
      

      然后运行:

      npm shrinkwrap --production
      

      【讨论】:

      • 这是一个很好的解决方法,但它似乎在 npm 的 5.x.x 专业中的某个地方停止了工作。有关更改的详细信息,请参阅github.com/npm/cli/pull/166。如果通常不为 -g 安装安装 devDeps,那么也不应该仅仅因为存在锁定文件而安装它们。这闻起来是不正确的行为。
      【解决方案5】:

      这是在npm 3.10.8 中修复的; npm install --production 不应在 npm shrinkwrap --dev 创建的收缩包装中安装开发部门:https://github.com/npm/npm/releases/tag/v3.10.8

      【讨论】:

        猜你喜欢
        • 2020-10-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-21
        • 2021-04-05
        • 2022-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多