NPM 工作区 - 一些模块安装到本地 node_modules 目录

Sta*_*yan 11 npm npm-workspaces

我使用 npm 工作区。当我为工作区安装软件包时,nmp i somepackage -w workspace-a如果安装的版本与根版本不同,则它会被放置在与工作区相同的目录中。

我想将其移动到根 node_modules 目录的子目录。是否可以?

当前行为:

root
|--node_modules
|  |--somepackage
|--workspace-a
|  |--node_modules
|  |  |--somepackage
|  |--package.json
|--package.json
Run Code Online (Sandbox Code Playgroud)

我想要的是这样的:

root
|--node_modules
|  |--somepackage
|  |--workspace-a
|  |  |--node_modules
|  |  |  |--somepackage
|--workspace-a
|  |--package.json
|--package.json
Run Code Online (Sandbox Code Playgroud)

dmu*_*dro 11

如果安装的版本与 root 版本不同

是这里的关键,这可能是不可能的,因为我可以看到为什么 npm 行为正确并在root/node_modules.

就我而言,我在workspace-a/package.json(通过安装npm install react -w worskspace-a)中正确定义了 React 18 以及其他 deps。然而 React 18 安装在本地,worspace-a/node_modules而 React 17root/node_modules导致应用程序运行时出现问题。应该只有一个实例:React 18 in root/node_modules.

workspace-a这是由依赖于 React <=17 的另一个子子依赖项引起的,因此npm install将在. 因此我之前的正确行为记录。root/node_modules

我能够通过在根级别定义对等依赖 React 18 来解决这个问题,但这一切都面临着使用对等依赖冲突和覆盖的风险(正如 npm 会警告你的那样)。就我而言,最终的解决方案是重新定义我在工作区 a 中使用的其他库(及其 package.json)中的 deps。