Как получить доступ к модулю в исходных файлах внутри собственного плагина веб-пакета? - PullRequest
0 голосов
/ 22 февраля 2019

Очень простой проект:

  • Входной файл index.js
  • Один модуль foo.js
  • index.js импорт foo.js
  • Базовый webpack.config.js
  • Один пользовательский плагин - HelloWorldPlugin

Файлы:

// ./src/foo.js
export default {
  foo: 'foo'
}

// ./src/index.js
import foo from './foo'
console.log(foo);

// webpack.config.js
const path = require('path');
var HelloWorldPlugin = require('./hello-world-plugin');

module.exports = {
  entry: './src/index.js',
  plugins: [
    new HelloWorldPlugin({ options: true })
  ]
};

// HelloWorldPlugin.js
class HelloWorldPlugin {
  apply(compiler) {
    compiler.hooks.afterEmit.tapAsync("HelloWorldPlugin", (compilation, next) => {
      console.log(arguments);
      // let foo = the module as imported from ./src/foo.js i.e. {foo: 'foo'}
      next();
    });
  }
}

module.exports = HelloWorldPlugin;

Вопрос:

Возможно ли получить доступ к {foo:'foo'} из foo-module внутри HelloWorldPlugin?

1 Ответ

0 голосов
/ 22 февраля 2019

Если вы пытаетесь получить исходный код в своем плагине, вы можете получить его от compilation.assets[fileName].source(), и вы можете сделать это:

class HelloWorldPlugin {
  apply(compiler) {
    compiler.hooks.afterEmit.tapAsync("HelloWorldPlugin", (compilation, next) => {
      console.log(arguments);
      compilation.hooks.afterOptimizeAssets.tap({ name: 'name' }, (modules) => {
        for (let fileName in modules) {
          const source = compilation.assets[fileName].source();
          console.log(source); // source of files
        }
      })
      next();
    });
  }
}

, подключившись к одному из compilation hooks вы можете получить доступ ко всем вашим модулям и получить имена файлов и их содержимое

...