Node 和 Webpack,使用 require 指令初始化插件 类

Node and Webpack, initialize plugins classes with require instruction

我使用 Symfony 和 webpack。从 javascript 脚本,我想管理一个插件系统:

插件是一个包含 class 并位于特定目录“plugins”中的文件。从主 javascript 脚本中,我想“加载”所有可用的插件(= 初始化所有插件 classes)。

我尝试了简单的代码:

    // In the directory 'plugins', I have by example 3 plugins files :
    // 'a.js'
    // 'b.js'
    // and 'c.js'

    // The content of each plugin is the same : 

    export class a{
        constructor(param1) {
        // ...
        }
    }

并且在 main.js 脚本中:

    // ...
    // plugins is an array of string I want to load (I don't want load all module in the directory 'plugins')
    // each string is the file name of a plugin (example : a.js, c.js)
    main = this;
    main.instancesOfPlugin = [];
    plugins.forEach(function (value, index) {
        try {
            main.instancesOfPlugin[index] = new (require('./plugins/' + value))('paramfoo1');
        } catch (e) {
            if (e.code !== 'MODULE_NOT_FOUND') {
                throw e;
            }
        }
    });
    // ...

但是我的浏览器出现错误,我不明白为什么...

(HTMLListener参考主脚本,第30行对应main.instanceOfPlugin[index] = new (require('./plugins/' + value))('paramfoo1');行)

我尝试了几种方法,但还是卡住了..感谢您的帮助!

经过多次尝试找到的解决方案:

// a module file 
module.exports = class {

    constructor(a) {
        console.log(a);
    }

}
//and from the main script
// ...
        // plugins = ['a.js', 'c.js']
        plugins.forEach(function (value, index) {
            try {
                plugins[index] = new (require('./plugins/' + value))('paramfoo1');
            } catch (e) {
                if (e.code !== 'MODULE_NOT_FOUND') {
                    throw e;
                }
            }
        });
// ...