在嵌套子文件夹中安装npm包的最正确方法是什么?

my-app
  /my-sub-module
  package.json
package.json

当npm install在my-app中运行时,在/my-sub-module中自动安装包的最佳方法是什么?


当前回答

只是作为参考,以防人们遇到这个问题。你现在可以:

添加包。Json到子文件夹中 在main package.json中安装这个子文件夹作为reference-link:

NPM安装——保存路径/到/my/子文件夹

其他回答

任何可以获取目录列表并运行shell命令的语言都可以为您完成此任务。

我知道这不是OP想要的答案,但这是一个永远有效的答案。你需要创建一个子目录名数组,然后循环遍历它们并运行npm i,或者任何你需要运行的命令。

作为参考,我尝试了npm I **/,它只是安装了父目录中所有子目录中的模块。这很不直观,但不用说,这不是你需要的解决方案。

[macOS、Linux用户]:

我创建了一个bash文件来安装项目和嵌套文件夹中的所有依赖项。

find . -name node_modules -prune -o -name package.json -execdir npm install \;

解释:在根目录中,排除node_modules文件夹(即使在嵌套文件夹中),找到包含包的目录。Json文件,然后运行NPM install命令。

如果你只是想找到指定的文件夹(例如:abc123, def456文件夹),运行如下:

find ./abc123/* ./def456/* -name node_modules -prune -o -name package.json -execdir npm install \;

根据@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)"
  },
}

要在每个子目录上运行npm install,你可以这样做:

"scripts": {
  ...
  "install:all": "for D in */; do npm install --cwd \"${D}\"; done"
}

在哪里

安装:所有只是脚本的名称,你可以随意命名

当前迭代的目录名

*/指定要查找子目录的位置。目录/*/将列出目录/内的所有目录,目录/*/*/将列出两层中的所有目录。

在指定文件夹中安装所有依赖项

你也可以运行一些命令,例如:

D在*/;&& npm install——cwd \"${D}\";完成

每次迭代都会打印“Installing stuff on your_subfolder/”。

这也适用于纱线

如果您知道嵌套子目录的名称,我更喜欢使用post-install。在package.json:

"scripts": {
  "postinstall": "cd nested_dir && npm install",
  ...
}