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

标签 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

我想要的是这样的:

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/

相关文章:

node.js - 使用 npm 安装 Angular CLI 时出现错误

ios - React Native - 无法构建 DependencyGraph :Cannot read property 'root' of null

angular - 安装angular2时服务器有时会返回500

node.js - Windows 7 上的 npm install "Adding a cache directory"错误

javascript - lessc 使用 Ruby 而不是 Javascript

node.js - 在 NextJS monorepo 中构建失败 — HookWebpackError : processor is not a function

NPM 7 工作区 - 多个节点模块?