构建DependencyGraph时出错:错误:检测到命名冲突

时间:2016-01-13 17:59:11

标签: reactjs react-native

我使用react-native-tableview

运行非常简单的代码
'use strict';

var React = require('react-native');
var { AppRegistry } = React;
var TableView = require('react-native-tableview');
var Section = TableView.Section;
var Item = TableView.Item;

class AwesomeProject extends React.Component {
    render(){
        return (
            <TableView style={{flex:1}}
                       allowsToggle={true}
                       allowsMultipleSelection={true}
                       tableViewStyle={TableView.Consts.Style.Grouped}
                       tableViewCellStyle={TableView.Consts.CellStyle.Subtitle}
                       onPress={(event) => console.log(event)}>
                <Section label="Section 1" arrow={true}>
                    <Item value="1" detail="Detail1" >Item 1</Item>
                    <Item value="2">Item 2</Item>
                </Section>
                <Section label="Section 2" arrow={false}>
                    <Item selected={true}>Item 1</Item>
                    <Item>Item 2</Item>
                    <Item>Item 3</Item>
                </Section>
            </TableView>
        );
    }
}

AppRegistry.registerComponent('AwesomeProject', () => AwesomeProject);

依赖关系:

"dependencies": {
  "react-native": "^0.17.0",
  "react-native-navbar": "^1.1.6",
  "react-native-router": "^0.2.1",
  "react-native-tableview": "^1.4.6"
}

我收到错误:

Error building DependencyGraph:
 Error: Naming collision detected: /Users/sandbox/native/test/AwesomeProject/node_modules/react-native-router/node_modules/react-native/packager/react-packager/src/DependencyResolver/haste/polyfills/String.prototype.es6.js collides with /Users/sandbox/native/test/AwesomeProject/node_modules/react-native/packager/react-packager/src/Resolver/polyfills/String.prototype.es6.js
    at HasteMap._updateHasteMap (HasteMap.js:123:13)
    at HasteMap.js:94:28
    at tryCallOne (/Users/sandbox/native/test/AwesomeProject/node_modules/promise/lib/core.js:37:12)
    at /Users/sandbox/native/test/AwesomeProject/node_modules/promise/lib/core.js:123:15
    at flush (/Users/sandbox/native/test/AwesomeProject/node_modules/asap/raw.js:50:29)
    at doNTCallback0 (node.js:417:9)
    at process._tickCallback (node.js:346:13)

我注意到很多人遇到了这个问题,但仍然没有明确的解决方案,哪个库有罪以及如何避免它。

1 个答案:

答案 0 :(得分:2)

错误表明有String.prototype.es6.js的两个副本,并且打包程序无法忽略其中一个,因此您收到错误。

您使用的是npm2还是npm3?作为一种解决方法,npm3将平衡依赖关系,这将允许您通过重复数据删除反应向前推进(假设您确保它们都指向同一版本)。

您可以install npm3作为单独的全局程序包,然后运行npm3 install,也可以通过npm install -g npm@3.0-latest升级整个npm程序包。此外,如果您选择升级,请确保在重新安装npm软件包之前删除node_modules目录的内容。

这种方法有利有弊,反应本机可能包括React作为同行的依赖关系,这可能会缓解这个问题。似乎react-native-router不一定需要常规React,因为正在使用的组件依赖于react-native所以如果你'可能值得这个repo并删除对React的直接依赖关系。仍然遇到npm3或者不想使用它的问题。