2017-08-11 4 views
0

私はWebPACKのの生成CSSファイルのリストをJSコードの一部を置き換える必要がありWebPACKのプラグインを書いていた後、ファイルを変更するプラグイン。これをイメージングすると、コードをJS:WebPACKのコンパイル

ReactWebComponent.create(<App />, 'react-web-component', { injectReactWebComponent: true }); 

私はそのリンクタグがWebPACKので生成されたファイルですが

injectReactWebComponent: '<link href="static/css/main.cacbacc7.css" rel="stylesheet">' 

injectReactWebComponent: true部品を交換したいと思います。これは、次のようなコード

マイ(作業の一種)が行く:

ReactWebComponent.prototype.apply = function(compiler) { 
    compiler.plugin('emit', function(compilation, callback) { 
    const cssFiles = Object.keys(compilation.assets) 
     .filter(fileName => /\.css$/.test(fileName)); 

    const jsFiles = Object.keys(compilation.assets) 
     .filter(fileName => /\.js$/.test(fileName)); 

    const cssLinkTagsAsString = cssFiles 
     .map(fileName => `<link href="${fileName}" rel="stylesheet">`) 
     .join(''); 

    jsFiles.forEach(fileName => { 
     compilation.assets[fileName].children.forEach(child => { 
     if (child._value) { 
      child._value = child._value.replace(/injectReactWebComponent\s*:\s*true/g, `injectReactWebComponent: \'${cssLinkTagsAsString}\'`); 
     } 
     }); 
    }); 

    callback(); 
    }); 
}; 

module.exports = ReactWebComponent; 

が、私はぶっきらぼうにソースを書き換えています

child._value = child._value.replace(...) 

を行う行を参照してください。

しかし、これは私のために右のようではありません。私が変換しているコードはすでに生成されており、もはや変換されるべきではないようです。私はまた、これでソースマップを壊していると確信しています。

だから私は私がやっているものを達成するための適切な方法だろう何、疑問に思って?

私はloaderを使用する必要がありますが、ローダーは生成されたファイル名について知らないのですか?

助けていただけたら幸いです!

答えて

0

この種のものは、(他のものよりいくつかの良い)が複数あるうちローダーによって処理されるのに十分に簡単です表示されます。

https://www.npmjs.com/package/string-replace-loader

https://www.npmjs.com/package/regexp-replace-loader

https://www.npmjs.com/package/replace-loader

あなたがこれを行うには、独自のプラグインを作って行くにしたい場合は(私はちょうど正規表現の置換よりも少し洗練された何かをするためのプロセスを経て)、私がすることができました基本的にこれらの3つのページから一緒に私の解決策をPIECE:

https://github.com/webpack/webpack/blob/master/lib/BannerPlugin.js

https://webpack.js.org/api/plugins/compilation/#optimize-chunk-assets-chunks-chunk-async

https://github.com/webpack/webpack-sources

関連する問題