2017-10-16 3 views
4

Reactコンポーネントを作成して公開したいと考えています。公開方法リアクションを含まないリアクトコンポーネント

私はpackage.jsonに入れている:

"peerDependencies": { 
    "react": "^15.6.1", 
    "react-dom": "^15.6.1" 
    }, 

とのWebPACKと私のモジュールを構築するときに、私のコンポーネントがこれを叫ぶないだろうと期待:

Module not found: Error: Can't resolve 'react' 

はどのように生産コンポーネントをコンパイルすることができますリアクトを含めることなく?

は、私はいくつかの有名なものにチェック:私は私のdevDepsに反応する追加した場合

react-select react-toggle

そして、彼らはリストには、(テストや開発の目的のために、私は推測する、とdevDependeciesで)のみpeerDependeciesで反応 をし、 webpack -pを実行すると正常にコンパイルされますが、コンポーネントバンドルにはreactがあります。

ここに私のsimple webpack config

私は何をしないのですか?

UPDATE 私は、これは正しくコンパイルされて、それがバンドルに反応するが、私はこのプロジェクトでそれをインポートするときに使用するように反応して含まれていない、WebPACKのコンフィグ(要旨が更新された)で、「外部」オプションを追加しましたそれはそれは私を与える:

は、それが私のコンポーネントのReact.Componentを見つけるとすぐに未定義

の「コンポーネント」プロパティを読み込めません...

答えて

2

をあなたはpeerDependencyとしてそれを設定するだけでなく、として追加することができますをインストールしてローカルにインストールできます。 webpack設定でexternalのようにしてください。それはあなたが消費したときに

https://webpack.js.org/configuration/externals/#object

externals: { 
    react: { 
     root: 'React', 
     commonjs2: 'react', 
     commonjs: 'react', 
     amd: 'react' 
    }, 
    'react-dom': { 
     root: 'ReactDOM', 
     commonjs2: 'react-dom', 
     commonjs: 'react-dom', 
     amd: 'react-dom' 
    }, 
    'prop-types': { 
     root: 'PropTypes', 
     commonjs2: 'prop-types', 
     commonjs: 'prop-types', 
     amd: 'prop-types' 
    } 
    }, 

    output: { 
    publicPath: '/', 
    filename: '[name]', 
    library: "foobar", 
    libraryTarget: 'umd', 
    } 
を参照してください必要性についてすべてです:

"dependencies": { 
    "foobar": "1.0.0", 
    "react": "~16.0.0", 
    "react-dom": "~16.0.0", 
    "prop-types": "^15.6.0" 
} 
+0

おかげで、私は(あなたが問題の更新要旨を見ることができます)外観のオプションを追加した、それはコンパイルし、維持私が望むように反応しますが、それをReactと 'import 'するプロジェクトでインポートすると、' React.Component'を読むときに「プロパティを読み込めません」というコンポーネントがあります。 – ciaoben

+0

それを消費するプロジェクト反応を起こして反応を起こすことができます。 'npm install'を実行すると、そこになければ、' peerDependenices'はビルドなどを呼び起こし、潜在的に破壊するはずです。さらに、UMDやCJSなどの異なるビルドターゲットを持つかもしれません。私は典型的なセットアップを含めるために私の答えを更新しました –

+0

PSは要点にアクセスできない、漏洩を防ぐために設計された企業のファイアウォールの背後にブロックされています... –

関連する問題