我有两个npm项目,project-a
和project-b
。他们既可以发布也可以直接依赖我公司的任何npm项目。 project-a
取决于project-b
。他们都是同一个Git回购中的兄弟姐妹。
我想直接将project-b
中的某些组件导入project-a
。我非常接近 - 通过在resolve.alias
中指定project-a
看起来像project-b: path.resolve(__dirname, '../project-b/entrypoint.js')
,我可以提供entrypoint.js
提供的内容。但是,当Webpack尝试解析entrypoint
导入的内容时,它首先在project-b/node_modules
中查找。这是一个问题有两个原因:我们使用React,因此这会引入React(project-a/node_modules/react
和project-b/node_modules/react
)的多个副本,React用户知道这些副本会破坏用户界面,同样也会提取多个副本任何共享依赖关系,其中有很多,导致project-a
的Webpack工件中存在大量其他良性膨胀。
我的预感是必须有一种方法可以告诉webpack,在解决project-b
中的导入时,首先查看project-a
,然后再继续查看project-b
。通过这种方式,它首先会在project-a/node_modules
中查找react
导入语句是在project-a
还是project-b
,导致只有project-a/node_modules
个共享副本project-a
工件中的依赖项,同时成功地允许解析唯一的project-b
依赖项/组件。我已经和resolve.root
,resolve.modulesDirectories
和resolve.fallback
一起玩了很多,但是我们无法实现我想要的目标。
有什么想法吗?
答案 0 :(得分:0)
我在我的项目中遇到了类似的问题,同时包含了多个React副本。
解决方案非常简单 - 将其添加到resolve
密钥下的webpack(版本2)配置中:
modules: [path.resolve(__dirname, "node_modules"), "node_modules"]
这指示webpack在构建目录中的node_modules
中解析,然后在其他目录中解析node_modules
。在您的情况下,这应该意味着从project-a/node_modules
而不是project-b/node_modules
抓取模块。
您可以找到更多文档here。