簡體   English   中英

Webpack 在通過插件編譯前添加文件

[英]Webpack add files before compiling through plugin

我正在嘗試構建一個 webpack 插件,我想在整個編譯步驟之前添加一些要處理的文件。 我的目的是從文件夾中添加一些文件,以便使用所需的插件和加載程序由正常構建過程傳遞。

我意識到如果我創建一個新資產,我可以這樣做:

  SomePlugin.prototype.apply = function(compiler) {
    compiler.plugin("emit", function(compilation, callback) {

      compilation.assets['newAsset.js'] = {
        source: function() {
          return 'content';
        },
        size: function() {
          return 'content'.length;
        }
      };
      callback();
    });
  }

但是我不知道如何在要處理的文件列表中添加例如 .scss 以便 webpack 可以根據加載程序處理 scss 文件。

事實證明,使用 webpack 內部使用的東西可以做到這一點,假設您想添加一個名為 test.md 的降價以與您正在使用的相同內容捆綁在一起,基於它的EntryOptionPlugin (用於決定如何捆綁取決於在輸入選項上)。 你可以這樣做

    MyPlugin.prototype.apply = function(compiler) {

      compiler.plugin("entry-option", function(context, entry) {
        function itemToPlugin(item, name) {
          if(Array.isArray(item))
            return new MultiEntryPlugin(context, item, name);
          else
            return new SingleEntryPlugin(context, item, name);
        }
        if(typeof entry=== 'string'){
          entry = [entry,__dirname+'/test.md']
        }
        else if (Array.isArray(entry)){
          entry.push(__dirname+'/test.md')
        }
        else{
          entry['SOME_KEY'] = __dirname+'/test.md'
        }
        if( Array.isArray(entry)) {
          compiler.apply(itemToPlugin(entry, "main"));
        } else if(typeof entry === "object") {
          Object.keys(entry).forEach(function(name) {
            compiler.apply(itemToPlugin(entry[name], name));
          });
        }
        return true;
      });
    } 

生成的文件將填充在您的管道上,並由您已經包含的加載器和插件處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM