【问题标题】:Can you skip some dependencies when installing an npm package from a git repository?从 git 存储库安装 npm 包时可以跳过一些依赖项吗?
【发布时间】:2022-04-05 18:31:17
【问题描述】:

我目前正在处理 2 个私有 React 项目,它们都使用从 git 安装的单个私有组件库(“库”:“git+ssh://git...#commitref”)。

组件库有很多额外的devDependencies,其中大部分与构建库完全无关。 package.json 中组件库的 devDependencies 包括诸如 typescript、jest、testing-library 和 storybook 之类的东西,但是要成功构建这个包,只需要 typescript 和类型声明。 (它是通过运行 tsc -d 简单地构建的。)不管这个事实,devDependencies 中包含的所有其他内容都会被安装,这会大大减慢速度。

在从 git 存储库安装 npm 包时,是否有某种方法可以跳过安装其中的一些依赖项?比如能够让 npm 识别构建时需求和其他 devDependencies 之间的区别?我已经尝试将更重的东西——比如故事书——移动到 optionalDependencies 中,但无论如何都安装了。

编辑:我正在考虑将非构建时 devDependencies 移动到 peerDependencies 中,将它们标记为可选并在组件库上开发时运行“npx npm-install-peers”,我希望有更好的方法来解决这个问题。

【问题讨论】:

  • npm install 不安装依赖项'devDependencies;相反,它只安装依赖项的dependencies 例如,在一个干净的目录中:npm init 然后npm install bootstrap。查看node_modules 并注意没有安装引导程序的devDependencies
  • @benbotto 它确实会安装 devDependencies,只要 package.json 中有一个“准备”脚本(在这种情况下,它只是运行 tsc)。请参阅docs.npmjs.com/cli/v7/commands/npm-install 从 git 远程 url 安装。
  • 明白了。问题中没有提到prepare 脚本。 prepare 脚本是否必要?也就是说,是否可以构建组件库并发布构建,例如在 GitHub 存储库中的发布中,或者更好的是在私有 npm 包中?一般是先构建 TS 库,然后再发布 dist。
  • @benbotto 显然,私有 npm 包将是最好和最简单的选择,但我也在研究其他选项,因为该库将是托管在私有注册表中的唯一包。一个解决方案我正在考虑用 postinstall 命令替换 prepare 命令 - 并将 typescript 从 devDependencies 移动到依赖项中。从理论上讲,这应该会阻止安装其他 devDependencies,但我将不得不尝试一下。我留下的另一个选择是将库打包到 CI 中的 tarball 中并将其作为工件下载 - 但我宁愿不走这条路

标签: node.js git npm npm-install package.json


【解决方案1】:

你可以使用npm install --production,但它会忽略所有devDependencies

【讨论】:

  • 这不是我的意思,我想跳过安装我的依赖项的 devDepencencies。
  • 知道了。我只有一个想法,就是使用postinstall 脚本。但这不会很明显
【解决方案2】:

这对我有用 npm install --force

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2015-05-03
  • 2019-06-15
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 2019-06-21
  • 1970-01-01
  • 2014-06-28
  • 2014-06-06
相关资源
最近更新 更多