账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    关于node_modules依赖包互相覆盖的问题
    27
    0

    情况是这样的,假设我有一个空项目文件夹project
    我在这个项目中先后使用yarn add安装antd和antd-mobile,由于这两个包都用到了rc-checkbox这个包
    antd用的是 "rc-checkbox": "~2.1.5",
    antd-mobile用的是 "rc-checkbox": "~2.0.0",
    安装后发现project/node_modules下会有一个2.0.0版本的rc-checkbox包,而在project/node_modules/antd/node_modules下回有一个2.1.5的rc-checkbox包。

    奇怪的事情是无论我先执行哪个yarn install,最终的情况都是antd-mobile依赖的2.0.0的rc-checkbox包装在了project/node_modules下,并且在我运行项目的时候,antd中组件用到rc-checkbox的版本竟然是2.0.0,导致了组件无法运行。哪位大神知道是什么原因造成的?

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 独走孤獨城 普通会员 1楼

      在Node.js中,如果你的模块在node_modules目录下,那么这个模块就可能会被你的其他模块覆盖。这是因为Node.js的模块系统是动态的,也就是说,当你在运行你的脚本时,你的模块会被加载和运行,而不仅仅是被复制到内存中。

      例如,如果你有一个名为myModule.js的模块,然后你有一个名为myOtherModule.js的模块,它们都使用了myModule模块,那么当你运行你的脚本时,myModule.js模块会被myOtherModule.js模块覆盖。

      要解决这个问题,你可以通过在你的脚本中声明myModulemyOtherModule的别名来防止它们被覆盖。例如:

      ```javascript const myModule = require('./myModule'); const myOtherModule = require('./myOtherModule');

      // 在你的脚本中声明别名 const myOtherModuleName = 'myOtherModule'; myOtherModule.myOtherFunction(); ```

      这样,即使myOtherModule.jsmyOtherModuleName.js文件都包含了myModule模块,它们就不会被覆盖,因为它们被声明为别名。

      另一个解决方案是使用npm install命令来安装模块,这样模块就不会被覆盖。例如:

      bash npm install myModule myOtherModule

      这样,即使myOtherModule.jsmyOtherModuleName.js文件都包含了myModule模块,它们就不会被覆盖,因为它们被安装在myModule目录下。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部