首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么相同的软件包以不同的方式安装?

为什么相同的软件包以不同的方式安装?
EN

Stack Overflow用户
提问于 2019-05-31 07:56:48
回答 1查看 240关注 0票数 1

我为我的两个项目安装了相同的软件包。该包(不链接,它是私有的)有一个依赖项-popper(按顺序是创建-反应上下文作为依赖项),所以,当我运行项目1号时,一切正常,但是项目2出现了错误:

找不到./node_modules/react-popper/lib/esm/Manager.js模块中的错误:错误:无法解决‘/./node_node/lib popper/lib/esm’中的“创建-反应-上下文”

经过一番调查,我发现node_modules的结构是不同的:

  • 对于项目一,所有react popper依赖项都保存在project节点模块中,并且本地文件夹只包含警告包:

  • 对于项目2,保存在./react/node_node本地文件夹中的所有react-popper依赖项:

我尝试过一些常见的方法,比如重新安装节点模块、清除缓存等等,但是结构是相同的。实际上,我曾想过webpack和babel版本,但我认为它不会影响node_modules结构本身。

那么问题是,哪些因素可以影响它呢?我该查些什么?

注意到:如果我手动向项目2添加创建反应上下文,它可以正常工作,但这不是一个解决方案。

注意到:我发现了类似的问题,但是没有任何建议-- 为什么npm要在不同的目录中安装软件包?,我的案例--重新创建yarn.lock也有帮助,但它看起来也不是解决这个问题的正确方法。希望我的描述是更完整的,并将有助于解决它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-04 06:54:09

这很可能是因为纱线(以及npm)试图依赖去重复的方式。假设有两个版本(1.0.0和2.0.0)中存在的模块A和B。B取决于模块A的1.0.0版本。

如果只安装模块B,您将得到如下所示的node_modules文件夹:

代码语言:javascript
复制
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文件夹中)。

代码语言:javascript
复制
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文件,并使用这些信息计算一个重复最少的依赖树。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56390989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档