使用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"] } }
配置完成后执行以下步骤:
- 删除根目录和所有子包的
node_modules、package-lock.json - 回到根目录重新执行
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
相关产品推荐
相关产品推荐

