我为我的两个项目安装了相同的软件包。该包(不链接,它是私有的)有一个依赖项-popper(按顺序是创建-反应上下文作为依赖项),所以,当我运行项目1号时,一切正常,但是项目2出现了错误:
找不到./node_modules/react-popper/lib/esm/Manager.js模块中的错误:错误:无法解决‘/./node_node/lib popper/lib/esm’中的“创建-反应-上下文”
经过一番调查,我发现node_modules的结构是不同的:


我尝试过一些常见的方法,比如重新安装节点模块、清除缓存等等,但是结构是相同的。实际上,我曾想过webpack和babel版本,但我认为它不会影响node_modules结构本身。
那么问题是,哪些因素可以影响它呢?我该查些什么?
注意到:如果我手动向项目2添加创建反应上下文,它可以正常工作,但这不是一个解决方案。
注意到:我发现了类似的问题,但是没有任何建议-- 为什么npm要在不同的目录中安装软件包?,我的案例--重新创建yarn.lock也有帮助,但它看起来也不是解决这个问题的正确方法。希望我的描述是更完整的,并将有助于解决它。
发布于 2019-06-04 06:54:09
这很可能是因为纱线(以及npm)试图依赖去重复的方式。假设有两个版本(1.0.0和2.0.0)中存在的模块A和B。B取决于模块A的1.0.0版本。
如果只安装模块B,您将得到如下所示的node_modules文件夹:
node_modules
- A@1.0.0
- B@2.0.0但是,如果您在其最新版本(2.0.0)中安装了模块A呢?如果npm刚刚更新了模块A的版本,您现有的模块B将(可能)不再工作,因为它依赖于模块A,因此您的node_modules文件夹将变成这样(A@1.0.0被移动到B的node_modules文件夹中)。
node_modules
- A@2.0.0
- B@2.0.0
-- A@1.0.0您的2个项目可能有更多的依赖项,这在某种程度上与react popper或其依赖项重叠。由于nodeJs模块解析机制,这通常不会是一个问题。
TLDR: node_modules文件夹的确切结构取决于所有依赖项(和devDependencies)。纱线/npm将查看项目依赖项(及其依赖项)的每个Package.json/Pack-lock.json文件,并使用这些信息计算一个重复最少的依赖树。
https://stackoverflow.com/questions/56390989
复制相似问题