2 votes

Comment accéder à un module dans les fichiers sources à l'intérieur d'un plugin webpack personnalisé ?

Un projet très simple :

  • Le fichier d'entrée est index.js
  • Un module foo.js
  • index.js importations foo.js
  • Une base webpack.config.js
  • Un plugin personnalisé - HelloWorldPlugin

Fichiers :

// ./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;

La question est :

Est-il possible d'accéder {foo:'foo'} de la foo-module à l'intérieur de HelloWorldPlugin ?

2voto

d7my Points 129

Si vous essayez d'obtenir le code source dans votre plugin, vous pouvez l'obtenir à partir de compilation.assets[fileName].source() et vous pouvez le faire :

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();
    });
  }
}

en se connectant à l'une des compilation crochets vous pouvez accéder à tous vos modules et obtenir les noms de fichiers et leur contenu

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X