我已经创建了自己的npm包,我们将其称为XYZ,它在IdPartenaire
文件中具有Extent2
依赖性。
当我将其安装在项目A中时,我在XYZ文件夹中嵌套了node_modules(因此为IdPartenaire
),但是当我将其安装在项目B中时,则没有嵌套的node_modules文件夹。项目A和项目B的Extent3
文件中的NomPrestation
具有相同的版本。
如何强制我的XYZ软件包使用Extent3
中的NomPrestation
?
答案 0 :(得分:7)
直接在node_modules文件夹中存在较少嵌套文件夹的弊端和不利之处在于版本控制问题。
正确的yarn
和npm
(即npm v3)不应具有这种结构问题。
因此,如果您让它在一个项目上正常运行而在另一个项目上不正常,则可能是由于版本所致。检查@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文件夹中的所有软件包。 答案 1 :(得分:0)
您可以使用npm dedupe
命令来完成此操作。
您可以将命令放在postinstall
的{{1}}脚本中,每次NPM安装软件包时,package.json
命令都会为您拼合相同版本的所有重复软件包。
有关更多信息,请参见https://docs.npmjs.com/cli/dedupe
答案 2 :(得分:0)
我的NPM包在React Native应用中遇到了同样的问题。 问题在于,在项目A中,所使用的React Native的版本(0.59.5)低于我的包(0.59.8)中使用的版本。 当然,在那个时候将软件包安装在一个全新的项目(B)中,当时使用的是最新版本的React Native,与我的软件包(0.59.8)相同。
答案 3 :(得分:0)
除了已接受的答案外,我还有另一个补充:
rm -rf node_modules
小心处理:有时,将项目迁移到新的npm模块可能会在node_modules
文件夹内引起奇怪的缓存问题,尤其是已经存在一段时间或碰巧发生了<子依赖性中安装的strong>较新版本的软件包,与根目录中的已安装版本不同。
一旦您通过package.json依赖关系删除了直接依赖关系,则这些包将从<root>/node_modules
中删除。这可能会导致一个错误,即新模块仍嵌套在您的依赖项下,而不是按预期移至根目录。
因此,通过清除本地的node_modules ,您可以进行全新安装,并使其扁平化。