您可以使用 lerna 这是一个单一存储库 CLI 工具。
首先,您必须在同一个存储库中定义多个项目。 Lerna 将这些项目称为“包”,并将它们全部存储在 /packages 文件夹中。
package.json
/packages
/my1stPackage
package.json
/my2ndPackage
package.json
Lerna 有各种优化,我不会在这里深入探讨。但是有一些基础知识:
- 要初始安装所有 repos 的所有依赖项,请运行
lerna bootstrap --hoist。
- 您仍然可以像以前一样运行
npm run ...,但这些引用您的根package.json 文件。要为特定的子包运行 npm 脚本,您应该运行 lerna run <args> -scope=<packageName>。 (例如lerna run build --scope=my1stPackage)
您可以在根 /package.json 脚本部分为此添加快捷方式。
"scripts": {
"setup": "lerna bootstrap --hoist",
"build:my1stPackage": "lerna run build --scope=my1stPackage"
}
您最感兴趣的是,兄弟包可以从它们特定的package.json相互引用,以将彼此包含为依赖关系。
所以,让我们假设my1stPackage 使用my2ndPackage。在my1stPackage 的package.json 文件中会有类似
"dependencies": {
...
"my2ndPackage": "^0.0.1"
}
my2ndPackage 实际上可以是一个在 npm 中发布的包。但是(!)在本地开发时,lerna 会在/packages/my1stPackage/node_modules/my2ndPackage 内添加一个符号链接,它指向/packages/my2ndPackage 的文件夹。 (这确实适用于所有相关的操作系统。)
package.json 对于本地开发和通过 npm 下载你的包的人看起来是一样的。但是,使用此符号链接解决此问题的是您的 lerna 设置。