2017-06-26 13 views
0

プロジェクトにnode_moduleとしてインストールしてインポートするReactコンポーネントがあります。このコンポーネントはSVGを必要とし、私が必要とする前にバベルを介してES5に移されます。どのようにWebpack '!'輸入は機能しますか?

関連する蒸散コードは次のようになります。このコードをインポート

'use strict'; 

Object.defineProperty(exports, "__esModule", { 
    value: true 
}); 

var _hudInline = require('./icons/hud.inline.svg'); 

var _hudInline2 = _interopRequireDefault(_hudInline); 

_react2.default.createElement(_hudInline2.default, { 
    className: 'FooterNav-hud-icon', 
    style: { 
    width: '16px', 
    fill: 'white' 
    } 
}) 

私の主なプロジェクトは、JSファイルやSVGファイルのためのSVGローダールールのバベルローダールールを持っているのWebPACKの設定を持っています。

私はこの構文を使用してコンポーネントをインポートする場合、それは動作します:

import MyComponent from '!babel-loader!my_node_modules_folder/MyComponent'; 

この作品、なぜ私は理解していません。私は、 "!" webpackの設定をバイパスし、定義したローダーを使用します。しかし、babel-loaderはSVGの処理方法を知ってはいけません。

webpackの設定でsvgローダーを削除した場合、上記のbabel-loaderのインポートは機能しません。 "!"最初のファイルにはリストされたローダーのみを使用しますが、それが依存関係ツリーを横断するときには、その後webpack configを使用する必要がありますか?

上記のインポートスタイルを使用せず、ウェブパックの設定を除外しないように変更した場合/node_modules/コードは機能しません。 Webpackは、SVG(予期せぬキャラクター)の処理方法がわからないと訴え、正しいSVGローダーに当たらないと信じさせてくれます。

ウェブパックローダー/作業の仕組みを誤解していますか?もともと蒸留されたES6→ES5が必要性を失うからでしょうか?ここで

は私のjsとSVGローダオプションは

const babelLoader = { 
    test: /\.jsx?$/, 
    use: [{ 
    loader: require.resolve('babel-loader'), 
    query: { 
     babelrc: false, 
     presets: [['es2015', { modules: false }], 'react', 'stage-0'], 
     cacheDirectory: true 
    } 
    }] 
}; 

const inlineSvgLoader = { 
    test: /\.inline.svg$/, 
    use: [{ 
    loader: 'babel-loader', 
    query: { 
     presets: ['es2015'] 
    } 
    }, { 
    loader: 'react-svg-loader', 
    query: { 
     jsx: true, 
     ... 
    }; 
}] 

あるEDIT:

私の問題は、バベル・ローダーにもかかわらず、node_modulesでの私のパッケージからの.jsファイル、プラグインwebpack-node-externalsを含むということでしたそれが含まれるように、モジュール側のWebpackビルドでモジュールをホワイトリストする必要がありました。

答えて

0

"!"最初のファイルにはリストされたローダーのみを使用しますが、それが依存関係ツリーを横断するときには、その後webpack configを使用する必要がありますか?

はい。インラインローダーは、インポートするモジュールを含むファイルにのみ適用されます。それ以外の場合は、そのモジュールに別のローダを必要とするものを必要とすることはできません。

+0

ありがとうございます。なんらかの理由でnode_moduleからインポートされたファイルの依存関係解決が異なるのでしょうか?なぜnode_modulesからインポートされたコンポーネントが、その要求のためにsvg-loaderを使用しないのか分かりません – Jon

+0

いいえ、違いはありません。たぶんローダーの順番を変えなければならないのでしょうか?最初に適用される帽子の上を伝えることはできません。配列の最初のものが最初に適用されたと仮定します。この場合、svg-loaderをbabel-loaderの前に実行する必要があります。 –

+0

Hmnは、このトリックをやっていないようだ。 babelを使ってjsx - > es5からすでに切り出したものにwebpackを実行しようとすると問題になることはありますか? – Jon

関連する問題