我已经创建了自己的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_modules的A\node_modules
发布于 2018-08-10 13:02:40
嵌套文件夹越少,node_modules文件夹中的文件夹越多,版本控制问题就越多。
使用正确的npm版本
正确的yarn和npm (即: npm v3)不应该有这样的结构问题。在可能的情况下,它应该总是将整个结构扁平化,如果版本与顶部的版本不兼容,只有嵌套node_modules。。
检查版本
因此,如果您让它在一个项目上正常工作,而不是在另一个项目上工作,这可能是由于版本。检查@material-ui是否在两个版本上都是相同的版本。也许两个不同的包在某个时候是相互冲突的。
检查您是如何安装它们的。
从你的问题上看,这是同一个版本。但是,您没有提到如何在两个项目上安装包。如果使用yarn link或npm link进行安装,则应该按照预期正确安装依赖项。
检查是否使用不同的包。
如果您检查包,最近material-ui已被取消,通知中说要升级到@material-ui/core。可能是文件夹中的一些包不一样。不管是哪种情况,每当出现依赖冲突时,都会出现这种情况。检查@material-ui文件夹内。
手动压平(危险)
有几个方案可以有力地解决这个问题。它们将遍历嵌套的node_modules文件夹,并将它们压平到单个文件夹中。
flatten-packages
npm install -g flatten-packages。flatten-packages以重新排列项目目录中node_modules文件夹中的所有包。发布于 2019-04-29 04:07:47
您可以使用npm dedupe命令来完成这一任务。
您可以将命令放在postinstall脚本中的package.json中,而且每次NPM安装包时,npm dedupe命令都会为您将所有复制的包都压平。
有关更多信息,请参阅https://docs.npmjs.com/cli/dedupe
发布于 2019-06-04 13:24:20
我有同样的问题,在一个反应本地应用程序与我的NPM包。问题是,在项目A中,的版本比我的包中使用的版本(0.59.8)低(0.59.5)。在一个全新的项目(B)中安装软件包,当然是在使用最新版本的React,这和我的软件包(0.59.8)是一样的。
https://stackoverflow.com/questions/51786739
复制相似问题