首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止在node_modules中嵌套node_modules

如何防止在node_modules中嵌套node_modules
EN

Stack Overflow用户
提问于 2018-08-10 12:38:13
回答 4查看 17.7K关注 0票数 31

我已经创建了自己的npm包,让我们称之为XYZ,它在package.json文件中有package.json依赖项。

当我在项目A中安装它时,我在XYZ文件夹中有嵌套的node_modules (所以它是A\node_modules\XYZ\node_modules\@material-ui),但是当我在项目B中安装它时,我没有嵌套的node_modules文件夹。项目A和B的package.json文件中都有相同版本的package.json

如何强制我的XYZ包使用来自A\node_modulesA\node_modules

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-08-10 13:02:40

嵌套文件夹越少,node_modules文件夹中的文件夹越多,版本控制问题就越多。

使用正确的npm版本

正确的yarnnpm (即: npm v3)不应该有这样的结构问题。在可能的情况下,它应该总是将整个结构扁平化,如果版本与顶部的版本不兼容,只有嵌套node_modules。

检查版本

因此,如果您让它在一个项目上正常工作,而不是在另一个项目上工作,这可能是由于版本。检查@material-ui是否在两个版本上都是相同的版本。也许两个不同的包在某个时候是相互冲突的。

检查您是如何安装它们的。

从你的问题上看,这是同一个版本。但是,您没有提到如何在两个项目上安装包。如果使用yarn linknpm link进行安装,则应该按照预期正确安装依赖项。

检查是否使用不同的包。

如果您检查包,最近material-ui已被取消,通知中说要升级到@material-ui/core。可能是文件夹中的一些包不一样。不管是哪种情况,每当出现依赖冲突时,都会出现这种情况。检查@material-ui文件夹内。

手动压平(危险)

有几个方案可以有力地解决这个问题。它们将遍历嵌套的node_modules文件夹,并将它们压平到单个文件夹中。

flatten-packages

  • 安装,npm install -g flatten-packages
  • 运行可执行flatten-packages以重新排列项目目录中node_modules文件夹中的所有包。
  • Flatten将删除包的旧版本。您应该处理与版本破坏相关的错误。
票数 26
EN

Stack Overflow用户

发布于 2019-04-29 04:07:47

您可以使用npm dedupe命令来完成这一任务。

您可以将命令放在postinstall脚本中的package.json中,而且每次NPM安装包时,npm dedupe命令都会为您将所有复制的包都压平。

有关更多信息,请参阅https://docs.npmjs.com/cli/dedupe

npm后置脚本

票数 10
EN

Stack Overflow用户

发布于 2019-06-04 13:24:20

我有同样的问题,在一个反应本地应用程序与我的NPM包。问题是,在项目A中,的版本比我的包中使用的版本(0.59.8)低(0.59.5)。在一个全新的项目(B)中安装软件包,当然是在使用最新版本的React,这和我的软件包(0.59.8)是一样的。

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

https://stackoverflow.com/questions/51786739

复制
相关文章

相似问题

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