2016-10-20 136 views
1

node_modules中的我的本地自定義模塊無權訪問它父級擁有的react包。添加本地npm依賴關係時找不到React模塊

我有以下代碼:

// SomeComponent.js 
import React, { Component } from 'react' 
import { 
    View 
} from 'react-native' 
import CustomComponent from 'react-native-my-super-components' 

export default SomeComponent extends Component { 
    render() { 
    return (
     <View> 
     <CustomComponent /> 
     </View> 
    ) 
    } 
} 

我有一個一直npm link版,被稱爲react-native-my-super-components目錄。

// index.js of 'react-native-my-super-components' 
import React, { Component } from 'react' 
import { 
    Text, 
    View, 
} from 'react-native' 

export default SomeComponent extends Component { 
    render() { 
    return (
     <View> 
     <Text>SomeComponent</Text> 
     </View> 
    ) 
    } 
} 

我在含SomeComponent.js我的項目叫npm link react-native-my-super-component

package.json看起來是這樣的:

{ 
    "name": "react-native-my-super-component", 
    "version": "0.0.1", 
    "description": "My Super Component", 
    "main": "index.js", 
    "scripts": { 
    "test": "echo \"Error: no test specified\" && exit 1" 
    }, 
    "author": "Naoto Ida", 
    "license": "MIT", 
    "peerDependencies": { 
    "react": ">=15.3.2", 
    "react-native": ">=0.35.0" 
    } 
} 

我沒有看到比其他node_modules任何差異。什麼可能導致這個?

回答

1

當從react-native-my-super-component解析react時,節點將在來自react-native-my-super-component文件夾或來自react-native-my-super-component父節點的node_modules中進行搜索。

當使用npm link時,不能讓模塊解析系統以相同的方式工作。

,因此您可以:

  • 安裝所需的丟失的依賴爲「開發依賴」在react-native-my-super-component文件夾
  • 的反應,必須是單身,你必須在你的WebPack配置文件創建別名以同樣的方式解決每個鏈接模塊的「反應」。

例如在你的WebPack配置文件,添加在開發模式:

{ 
     resolve: { 
      alias: [ 
       'react': path.join(process.cwd(), 'node_modules/react') 
      ] 
     } 
    } 

該解決方案需要模塊「路徑」來創建你的反應模塊的絕對路徑:(import path from 'path';),但你可以首先嚐試一個靜態路徑。

+0

感謝您的回答。所以如果我可以將我的'react-native-my-super-component'推到遠程倉庫,我應該這樣做,還是'npm install'?我之前使用過webpack從ES6轉換到老JS,但沒有太多這樣的項目。 –

+0

是的。使用'npm link'可以讓您的主項目在運行自己的開發過程時使用'react-native-my-super-component'。然後在prod中,或者當'react-native-my-super-component'被推送到遠程倉庫時,只需使用'npm install react-native-my-super-component'。 –