在嵌套子文件夹中安装npm包的最正确方法是什么?
my-app
/my-sub-module
package.json
package.json
当npm install在my-app中运行时,在/my-sub-module中自动安装包的最佳方法是什么?
在嵌套子文件夹中安装npm包的最正确方法是什么?
my-app
/my-sub-module
package.json
package.json
当npm install在my-app中运行时,在/my-sub-module中自动安装包的最佳方法是什么?
当前回答
接受的答案是有效的,但是你可以使用——prefix在选定的位置运行npm命令。
"postinstall": "npm --prefix ./nested_dir install"
——prefix适用于任何npm命令,而不仅仅是install。
还可以查看当前前缀with
npm prefix
并将全局安装(-g)文件夹设置为
npm config set prefix "folder_path"
也许是TMI,但你懂的…
其他回答
只是作为参考,以防人们遇到这个问题。你现在可以:
添加包。Json到子文件夹中 在main package.json中安装这个子文件夹作为reference-link:
NPM安装——保存路径/到/my/子文件夹
正如fgblomqvist在评论中提到的,npm现在也支持工作区了。
有些答案相当古老。我认为现在我们有一些新的选择来建立单回购。
我建议使用纱线工作区:
工作区是一种设置包架构的新方法,从Yarn 1.0开始默认提供。它允许你设置多个包,这样你只需要运行一次yarn install就可以一次安装所有的包。
如果你更喜欢或不得不使用npm,我建议你看看lerna:
Lerna是一个工具,它优化了使用git和npm管理多包存储库的工作流。
Lerna也可以完美地使用纱线工作区。我刚刚完成了一个monorepo项目的设置-示例。
下面是一个配置为使用npm + lerna - MDC Web的多包项目的示例:他们使用package运行lerna引导。json是postinstall。
任何可以获取目录列表并运行shell命令的语言都可以为您完成此任务。
我知道这不是OP想要的答案,但这是一个永远有效的答案。你需要创建一个子目录名数组,然后循环遍历它们并运行npm i,或者任何你需要运行的命令。
作为参考,我尝试了npm I **/,它只是安装了父目录中所有子目录中的模块。这很不直观,但不用说,这不是你需要的解决方案。
根据@Scott的回答,只要知道子目录名,安装|postinstall脚本是最简单的方法。这就是我如何对多个子dirs运行它。例如,假设我们在monorepo根目录下有api/、web/和shared/子项目:
// In monorepo root package.json
{
...
"scripts": {
"postinstall": "(cd api && npm install); (cd web && npm install); (cd shared && npm install)"
},
}
在Windows上,替换;在圆括号&&之间。
// In monorepo root package.json
{
...
"scripts": {
"postinstall": "(cd api && npm install) && (cd web && npm install) && (cd shared && npm install)"
},
}
如果您知道嵌套子目录的名称,我更喜欢使用post-install。在package.json:
"scripts": {
"postinstall": "cd nested_dir && npm install",
...
}