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;
}
}
});
// ...
我使用 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;
}
}
});
// ...