2016-11-16 3 views
0

この投稿:Can I use an ES6/2015 module import to set a reference in 'global' scope?は「Webpackでモジュールをグローバルに使用できるようにするにはどうすればよいですか?使用してのWebPACKのProvidePluginWebpack:グローバルスコープで名前付きエクスポートを使用するにはどうすればいいですか

// webpack.config.js 
plugins: [ 
    new webpack.ProvidePlugin({ 
     React: "react", 
    }) 
], 

// Foo.js 
class Foo extends React.Component { // React is global 

しかし、その代わりに、デフォルトの輸出の私が名付け輸出用グローバルにしたい場合は、何?

// Foo.js 
class Foo extends React.Component { 
    propTypes = { 
     bar: PropTypes.string, // PropTypes were never imported 
    } 

問題はPropTypesは、私は通常のようにそれをインポートしたい意味という名前のエクスポート、ということである:つまり、私は何をしたい場合は

import {PropTypes} from 'react'; 

が、私がすることはできません

new webpack.ProvidePlugin({ 
    {PropTypes}: "react", // this doesn't work 
}) 

だから、私の質問がされています:WebPACKのでグローバルに(。例えば者PropTypesに反応)という名前のエクスポートを公開する方法はありますWebPACKのの設定でそれを行いますか?

P.S.私はちょうど私のルートJSファイルで明示的にそれを行うだろう:私のモジュールをインポート得るとき

// index.js 
import {PropTypes} from 'react'; 
global.PropTypes = PropTypes; 
import 'restOfMyCode'; 

それは輸入が掲揚されているので、仕事やglobal.PropTypesがこれまでに設定を取得する前に発生していないので、何のglobal.PropTypesは彼らのためにありません使用する。必要と反応し、コールとアクセスしてこれを行います

new webpack.DefinePlugin({ 
    PropTypes: 'require("react").PropTypes', 
}) 

はWebPACKの単純(その正確な場合には)PropTypesのすべての言及を交換することがあります:

答えて

1

は、あなたが(それは非常にきれいではありません)何ができるか、以下であります子PropType。それは最も効率的なものではありませんが、それはあなたがそれを必要とするものを行うでしょう!

別の解決方法は、単にPropTypesを別のファイルのデフォルトの書き出しとしてエクスポートし、それを絶対パスでProvidePluginに渡すことです。ファイルで

(例えばproptypes.js):あなたのWebPACKの設定で

import { PropTypes } from 'react'; 
export default PropTypes; 

そして:

new webpack.ProvidePlugin({ 
    PropTypes: require('path').resolve('../src/proptypes.js'), // absolute path here, otherwise the require might fail since a relative path is not always the same depending on where PropTypes are used 
}) 
関連する問題