【发布时间】: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