【问题标题】:Exclude dev dependencies when publishing npm package发布 npm 包时排除 dev 依赖项
【发布时间】:2018-06-02 05:25:32
【问题描述】:

所以我正在将一个包发布到 npm。它基本上只是一个简单的模块,可以让用户进行 Ajax 调用,并且可以通过多种方式进行配置。

我已阅读到在本地测试安装并尝试过是个好主意。我已经通过“npm pack”命令打包了包,切换到另一个目录,然后尝试通过“npm install path-to-file-that-was-just-created.tgz”安装包。 到目前为止一切正常,我有一个 node_modules 文件夹,其中包含我的捆绑代码。

然而,它也安装了我在实际模块的 package.json 中列为 devDependencies 的所有依赖项,即使只需要捆绑的文件并且没有定义其他依赖项。 我尝试更新 npm-shrinkwrap.json,并检查每个依赖项的 dev 属性是否标记为 true。

目标实际上是让用户安装这个模块,然后没有安装依赖项,因为他们不需要 babel 或 mocha 来运行模块。 如何从包装中排除这些? 谢谢!

【问题讨论】:

  • 我不熟悉npm pack,但是如果你正常发布你的模块,当他们npm install your-module-name时,devDependencies默认不会安装,除非他们在@987654324中明确导航到你的模块@ 并运行 npm install
  • 所以当我按照我测试它的方式在本地安装它时可能会发生这种情况。我得检查一下,谢谢!

标签: node.js npm webpack


【解决方案1】:

https://docs.npmjs.com/cli/install

使用 --production 标志来避免安装开发依赖项

对于已发布的模块,你不需要做任何事情,当用户安装你的库时,只会安装非开发依赖项

【讨论】:

  • 我刚刚尝试过,但它似乎并不奇怪。它仍然安装我所有的开发依赖项。我检查了 package.json、npm-shrinkwrap.json,所有依赖项都标记为 dev : true 或列在 devDependencies 下,但它们仍然被安装。我确实设法通过将收缩包装文件添加到我的 npmignore 来排除它们,但我仍然认为它应该可以工作
  • @marcus_deh “开发包”也可能是您需要的不同包的依赖项
  • 但是当我只是分发一个捆绑的 js 文件时,实际上不应该没有额外的依赖关系吗?因为这就是我想要做的。否则,我确定我设置惩罚的方式一定有问题。
  • 在 node.js 6 中工作
【解决方案2】:

如果你希望你发布的模块没有依赖,但你仍然需要一些来构建它,你也可以在发布之前尝试使用这个命令:

npx json -f package.json -I -e "delete this.devDependencies"

这种方式只适用于 CI/CD。

【讨论】:

    【解决方案3】:

    运行安装后,您可以通过运行以下命令来修剪开发依赖项: npm prune --production

    这将只保留生产依赖项。来自npm here的文档:

    如果指定了 --production 标志或 NODE_ENV 环境 变量设置为生产,此命令将删除包 在你的 devDependencies 中指定

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-31
      • 2015-09-21
      • 1970-01-01
      • 1970-01-01
      • 2016-08-18
      • 1970-01-01
      • 2019-10-28
      • 2022-11-25
      相关资源
      最近更新 更多