好的,我搜索了高低,但无法可靠地确定 webpack 是否可行。
https://github.com/webpack/webpack/tree/master/examples/require.context 似乎表明可以将字符串传递给函数并加载模块…
但我的尝试只是行不通:webpack.config.js
'use strict';
let webpack = require('webpack'),
jsonLoader = require("json-loader"),
path = require("path"),
fs = require('fs'),
nodeModules = {};
fs.readdirSync('node_modules')
.filter(function(x) {
return ['.bin'].indexOf(x) === -1;
})
.forEach(function(mod) {
nodeModules[mod] = 'commonjs ' + mod;
});
let PATHS = {
app: __dirname + '/src'
};
module.exports = {
context: PATHS.app,
entry: {
app: PATHS.app+'/server.js'
},
target: 'node',
output: {
path: PATHS.app,
filename: '../build/server.js'
},
externals: nodeModules,
performance: {
hints: "warning"
},
plugins: [
jsonLoader
],
resolve: {
modules: [
'./node_modules',
path.resolve(__dirname),
path.resolve(__dirname + "/src"),
path.resolve('./config')
]
},
node: {
fs: "empty"
}
};
服务器.js
let _ = require('lodash');
let modules = [ "modules/test" ];
require( 'modules/test' )();
_.map( modules, function( module ){
require( module );
});
modules/ 中名为 test.js 的模块
module.exports = () => {
console.log('hello world');
};
但结果总是一样的…… pm2 日志只是为静态要求说你好世界…… 但对于同一模块的动态加载
错误:找不到模块“。”
我想要做的就是循环遍历模块的路径数组然后加载……
原文由 user1037355 发布,翻译遵循 CC BY-SA 4.0 许可协议
您不能将变量用作
require
的参数。 Webpack 需要知道在编译时要打包哪些文件。由于它不进行程序流分析,因此无法知道您传递给函数的内容。在那种情况下,它可能是显而易见的,但这可能会使用用户输入来决定需要什么模块,并且 webpack 不可能知道在编译时要包含哪些模块,因此 webpack 不允许这样做。您发布的示例有点不同。您可以将
require
与串联字符串一起使用。例如:webpack 需要在 bundle 中包含哪些模块?变量
moduleName
可以是任何东西,所以在编译时不知道确切的模块。相反,它包括可能匹配上述表达式的 所有 模块。假设以下目录结构:All of these
test.js
files will be included in the bundle, becausemoduleName
could beone
or something nested liketwo/subdir
.有关更多详细信息,请参阅官方文档的 require with expression 。
您不能遍历数组并导入数组的每个模块,除了上述通过连接字符串的例外情况,但这具有包括所有可能模块的效果,通常应避免。