NPM 7 工作区 - 如何在工作区中安装新包?

Dav*_*ing 24 node.js npm npm-install

如果我有这样的NPM 7 工作区

root
   - submodule0
   - submodule1
   - submodule2
Run Code Online (Sandbox Code Playgroud)

我导航到 submodule0 目录并运行npm i somepackage它似乎通过在 submodule0 目录中创建一个新的 package-lock.json 并在那里安装所有依赖项来“破坏”工作区。换句话说,它只是执行我创建工作区之前存在的旧行为。我希望有一个类似于lerna的命令,我可以在那里从root中的 submodule0 中安装一个新包。就像是:

npm i somepackage --scope submodule0
Run Code Online (Sandbox Code Playgroud)

到目前为止,我能找到的唯一解决方法是编辑 submodule0 package.json 并somepackage手动添加。然后npm i从根运行。显然这并不理想,因为我需要查找@latest 版本,导航到子目录,打开 package.json 等,而不是仅在根目录中键入一行。

mat*_*wad 19

对工作区的支持npm install,并npm uninstall在NPM v7.14.0加入。你现在可以这样做:

npm i somepackage --workspace=submodule0
Run Code Online (Sandbox Code Playgroud)

卸载模块一直是最大的痛苦,所以这真的很令人兴奋。npm 团队似乎在慢慢地对命令一一添加支持。在此处关注更新:https : //github.com/npm/cli/blob/latest/CHANGELOG.md


Wil*_*les 11

我也很困惑为什么 npm 工作区在没有这个功能的情况下发布。

我当前的解决方法使用add-dependencies包,它将依赖项添加到声明的 package.json 文件,同时跳过安装过程。

npm i add-dependencies -g
Run Code Online (Sandbox Code Playgroud)

然后,从 monorepo 的顶层,您可以运行:

npx add-dependencies ./submodule0/package.json somepackage && npm i
Run Code Online (Sandbox Code Playgroud)

希望很快--workspace就会添加一个论点npm i来避免这个问题。


Jan*_*eer 8

我对这些建议不太满意,但将所有建议组合在一起,在没有任何依赖项的 npm 脚本中使用它:

{
   "add": "npm install --package-lock-only --no-package-lock --prefix",
   "postadd": "npm install"
}
Run Code Online (Sandbox Code Playgroud)

这可以像下面这样使用: npm run add -- submodule0 somepackage