You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用npm workspaces时,如何强制包安装到相对路径node_modules?

解决npm Workspaces下Webpack找不到本地依赖路径的问题

方案1:直接修改Webpack路径,指向工作区本地包

dependency-A和dependency-B本来就是工作区内的本地包,没必要通过node_modules绕路访问。直接在Webpack配置里用相对路径指向它们的实际目录即可:

修改packages/main-package/webpack.config.js:

plugins: [
    new CopyWebpackPlugin({
      patterns: [
        {
          from: "../dependency-A/media",
          to: "static/dependency-A-media",
        },
      ],
    }),
    new CopyWebpackPlugin({
      patterns: [
         {
           context: "../dependency-B/dist",
           from: "research-data.json",
         },
       ],
    }),
]

这个方案最简单直接,不用修改npm配置,能彻底避免依赖hoist带来的路径问题。

方案2:用npm的nohoist配置保留子包本地依赖

npm 8及以上版本支持类似Yarn的nohoist配置,可以指定某些包不被提升到根目录的node_modules,而是以符号链接形式留在子包的本地node_modules里,和Lerna的链接逻辑一致。

在根目录package.json里更新配置:

{
  "workspaces": {
    "packages": ["packages/main-package", "packages/dependency-A", "packages/dependency-B"],
    "nohoist": ["**/dependency-A", "**/dependency-B"]
  }
}

配置完成后执行以下步骤:

  1. 删除根目录和所有子包的node_modules、package-lock.json
  2. 回到根目录重新执行npm install

此时packages/main-package/node_modules中会出现dependency-A和dependency-B的符号链接,指向工作区内的对应包,Webpack原有路径配置即可正常生效。

注意事项:不要在子包单独执行npm install

禁止直接在packages/main-package目录下运行npm install,这会破坏npm workspaces维护的符号链接关系。所有依赖安装操作必须在根目录执行,npm会自动处理工作区包之间的链接和依赖提升逻辑。


内容的提问来源于stack exchange,提问作者TrumanGao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 17:35:14