Npm 如何防止在节点\u模块中嵌套节点\u模块
我已经创建了自己的npm包,我们称之为XYZ,它在Npm 如何防止在节点\u模块中嵌套节点\u模块,npm,npm-install,node-modules,Npm,Npm Install,Node Modules,我已经创建了自己的npm包,我们称之为XYZ,它在package.json文件中具有@material ui依赖关系 当我在项目A中安装它时,我在XYZ文件夹中有嵌套的节点模块(因此它是A\node\u modules\XYZ\node\u modules\@material ui),但当我在项目B中安装它时,我没有嵌套的节点模块文件夹。项目A和B在其包.json文件中都有相同版本的@material ui 如何强制我的XYZ软件包从A\node\u modules使用@material ui?
package.json
文件中具有@material ui
依赖关系
当我在项目A中安装它时,我在XYZ文件夹中有嵌套的节点模块(因此它是A\node\u modules\XYZ\node\u modules\@material ui
),但当我在项目B中安装它时,我没有嵌套的节点模块文件夹。项目A和B在其包.json
文件中都有相同版本的@material ui
如何强制我的XYZ软件包从
A\node\u modules
使用@material ui
?在node\u modules文件夹中嵌套的文件夹较少,而在node\u modules文件夹中直接包含的文件夹较多,这有其好处,也有版本控制问题
使用正确的npm版本
正确的纱线
和npm
(即:npm v3)不应存在此类结构问题。在可能的情况下,它应该始终扁平化整个结构,如果版本与顶部的版本不兼容,则只有嵌套的节点模块。
检查版本
所以,如果你让它在一个项目上正常工作,而不是在另一个项目上正常工作,这可能是由于版本的原因。检查@material ui
在这两个界面上的版本是否相同。也许两个不同的包在某一点上相互冲突
检查如何安装它们
从你的问题来看,它说的是同一个版本。但是,您没有提到如何在这两个项目上安装软件包。如果使用warn-link
或npm-link
安装,则应按预期正确安装依赖项
检查您是否使用不同的软件包
如果您查看该软件包,则最近的材质ui
已被弃用,通知中说要升级到@material ui/core
。可能是该文件夹中的某些包不相同。无论哪种方式,只要存在依赖冲突,都是这样。检查@material ui
文件夹内部
手动展平(危险)
有几个方案可以有力地解决这个问题。它们将遍历嵌套的node_模块文件夹,并将其展平到单个文件夹中
展平包裹
- 使用,
npm安装-g扁平化软件包安装
- 运行可执行文件
,重新排列项目目录中node_modules文件夹中的所有包李>plant packages
- 展平将删除包的旧版本。您应该注意与版本中断更改相关的错误
npm duplicate
命令来完成此操作
您可以将该命令放入postinstall
脚本中的package.json
,每次NPM安装包时,NPM duplicate
命令将为您展平同一版本中的所有重复包
有关详细信息,请参阅
我的NPM软件包中的React本机应用程序也有同样的问题。 问题是在项目A中使用的React Native版本(0.59.5)低于我的包中使用的版本(0.59.8)。
在一个全新的项目(B)中安装软件包,当然当时使用的是React Native的最新版本,这与我的软件包(0.59.8)相同。我对公认的答案还有一个补充: 清除本地节点\u模块文件夹缓存
rm-rf节点模块
小心处理:有时,将项目迁移到新的npm模块可能会在节点\u模块
文件夹中导致奇怪的缓存问题,尤其是那些已经存在一段时间的问题,或者碰巧在子依赖项中安装了与root中安装的版本不同的较新版本的包
一旦通过package.json dependencies删除了直接依赖项,这些包将从/node_modules
中删除。这可能会导致一个错误,新模块仍然嵌套在依赖项下,而不是像预期的那样移动到根目录下
因此,通过清除本地节点模块,您可以重新安装一个干净的节点,并让展平开始工作。感谢您的解释。我将在周一再次检查,并接受是否解决了我的问题。请说明哪些有效,哪些无效,以便我们能够找出发生了什么。:)看起来我有相同版本的@material ui/core,但是@material ui/icons不同,这就是为什么我有嵌套的node_模块。非常感谢。为什么不使用
npm dedupe
(不危险)来展平依赖关系树?这对于一级嵌套依赖关系很有效。对于以下场景,其不起作用--node_modules/dependency1/node_modules/dependency2/node_modules/dependency_not_被删除
关于如何在此级别删除的任何建议