【问题标题】:React-Native Packager Failure: Duplicate module nameReact-Native Packager 失败:重复的模块名称
【发布时间】:2016-12-17 13:36:24
【问题描述】:

这在开发过程中似乎是随机发生的。尝试运行npm startreact-native run-ios 时,出现以下错误:

Failed to build DependencyGraph: @providesModule naming collision:
  Duplicate module name: react-native-vector-icons
  Paths: /Users/chandlervdw/Repos/Relay/mobile/node_modules/react-native/local-cli/rnpm/core/test/fixtures/files/package.json collides with /Users/chandlervdw/Repos/Relay/mobile/node_modules/react-native/Libraries/Animated/release/package.json

This error is caused by a @providesModule declaration with the same name accross two different files.
Error: @providesModule naming collision:
  Duplicate module name: react-native-vector-icons
  Paths: /Users/chandlervdw/Repos/Relay/mobile/node_modules/react-native/local-cli/rnpm/core/test/fixtures/files/package.json collides with /Users/chandlervdw/Repos/Relay/mobile/node_modules/react-native/Libraries/Animated/release/package.json

This error is caused by a @providesModule declaration with the same name accross two different files.
    at HasteMap._updateHasteMap (/Users/chandlervdw/Repos/Relay/mobile/node_modules/node-haste/lib/DependencyGraph/HasteMap.js:162:15)
    at /Users/chandlervdw/Repos/Relay/mobile/node_modules/node-haste/lib/DependencyGraph/HasteMap.js:140:25

奇怪的是,/Users/chandlervdw/Repos/Relay/mobile/node_modules/react-native/local-cli/rnpm/core/test/fixtures/files/package.json 实际上确实将react-native-vector-icons 列为模块的名称???

如果我删除该文件,错误将不再发生,但打包程序卡在 93% 并抱怨找不到完全不相关的库。

我吹走了我的 repo,甚至重新安装了所有东西,包括npmrnpm,甚至升级了node。我正在运行与我的队友相同的版本,他们能够毫无问题地运行打包程序。

【问题讨论】:

  • 我知道这听起来很傻,但是您是否尝试过使用 sudo 权限运行,我在尝试为 Android 构建 react-native 并使用 sudo 运行时遇到了类似的错误解决了冲突。
  • @Alex 你开个玩笑。那行得通!但是为什么?!?!因为这个,我失去了一整天的工作......
  • @chandlervdw 相信我,伙计,这周我确实发生了同样的事情,很抱歉你不得不在这个错误上浪费这么多时间......我也把头撞在墙上了像你一样用尽所有其他途径!难道你不只是喜欢 npm 包管理器,有时哈哈!很高兴它为你排序:)
  • 我的猜测是,在构建该软件包时,它需要访问一些受限资源,这些资源需要 sudo 授予的提升权限...我只是希望错误代码不要那么模糊!
  • 谢谢 - 周末花了几个小时得到随机的红屏,难以置信!很棒的提示,已添加书签!

标签: node.js npm react-native packager


【解决方案1】:

将此作为答案发布,以防其他人将来遇到此问题。

当节点包管理器运行初始构建阶段时,以sudo 权限运行npm start 会授予正确的权限。这似乎只有在您运行的 shell/用户具有受限权限时才会发生。强制将权限升级到 sudo 可以让包管理器完全控制以完成构建。

【讨论】:

    【解决方案2】:

    我遇到了类似

    的错误
    Failed to build DependencyGraph: @providesModule naming collision:
    Failed to build DependencyGraph: @providesModule naming collision:
    Duplicate module name: accepts
    Duplicate module name: accepts
    

    我通过删除 npm 的缓存 .npm 并用 --reset-cache 重新运行 packager 解决了这个问题

    rm -rf ~/.npm
    

    【讨论】:

    • 这应该是公认的答案,因为我发现另一种答案是“作弊”,因为我通常从未使用过sudo
    • @Greg 我们不要忘记“Sudo”在 Windows 上不存在,不应该用于绕过权限错误。
    【解决方案3】:

    sudochown 没有为我修复它。我从同一个库得到了同样的错误,很奇怪:

    Failed to build DependencyGraph: @providesModule naming collision:
     Duplicate module name: react-native-vector-icons
      Paths: /Users/collumj/research/k9fresh/ios/build/Build/Products/Debug-iphonesimulator/kisharNine.app/package.json collides with /Users/collumj/research/k9fresh/node_modules/react-native/local-cli/core/__fixtures__/files/package.json
    

    遇到这种情况时不需要sudo

    警告:破坏性,请先签入。

    rm -rf android ios
    git reset --hard
    npm start
    

    这每次都会修复它。注册护士 0.39.2

    编辑:稍后,我想我通过取消链接react-native-vector-icons lib 解决了这个问题;我认为我得到的说明让我在链接上加倍努力,或者不知何故已经过时了。

    【讨论】:

      【解决方案4】:

      在清理 nvm 缓存并重新安装所有 node_modules 后,我意识到我遇到了这个问题,因为 react-native-router-flux。

      我已将其从react-native-router-flux@3.38.1 降级修复为react-native-router-flux@3.38.0

      更多细节在这里: https://github.com/aksonov/react-native-router-flux/issues/1816

      【讨论】: