我使用 npm 工作区。当我使用 nmp i somepackage -w workspace-a
为工作空间安装包时,如果安装的版本与根版本不同,它会被放置在与工作空间相同的目录中。
我想将它移动到根 node_modules 目录的子目录。可能吗?
当前行为:
root
|--node_modules
| |--somepackage
|--workspace-a
| |--node_modules
| | |--somepackage
| |--package.json
|--package.json
我想要的是这样的:
root
|--node_modules
| |--somepackage
| |--workspace-a
| | |--node_modules
| | | |--somepackage
|--workspace-a
| |--package.json
|--package.json
最佳答案
if the installed version is different from root version
是这里的关键,它可能是不可能的,因为我可以看到为什么 npm 行为正确并在 root/node_modules
中安装“重复”版本。
在我的例子中,我在 workspace-a/package.json
中正确定义了 React 18 和其他 dep(通过 npm install react -w worskspace-a
安装) .然而,React 18 安装在本地 worspace-a/node_modules
中,而 React 17 安装在 root/node_modules
中,这导致应用程序运行时出现问题。应该只有一个实例:root/node_modules
中的 React 18。
这是由 workspace-a
中的另一个子子依赖项引起的,该依赖项依赖于 react <=17 所以 npm install
将安装 v17 另外 在 root/node_modules
中。因此我之前的正确行为记录。
我能够通过在根级别定义对等依赖 React 18 来解决这个问题,但它都存在使用对等 deps 冲突和覆盖的风险(正如 npm 会警告你的那样)。在我的例子中,最终的解决方法是在我在工作区 a 中使用的另一个库(及其 package.json)中重新定义 deps。
关于NPM 工作区 - 一些模块安装到本地 node_modules 目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71048697/