webpack动态模块加载器按需
好的,我已经搜索了高低位,但是无法可靠地确定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"
}
};
server.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日志只是向静态需求打个招呼世界…但是对于同一个模块的动态负载
错误:找不到模块“。”
我要做的就是循环遍历模块的路径数组并加载然后…
回答:
您不能将变量用作的参数require
。Webpack需要知道在编译时捆绑哪些文件。由于它不进行程序流分析,因此无法知道传递给函数的内容。在那种情况下,这很明显,但是这可能要用用户输入来决定需要哪个模块,而且webpack不可能在编译时就知道要包含哪些模块,因此webpack不允许这样做。
您发布的示例有些不同。您可以使用require
串联字符串。例如:
require(`./src/${moduleName}/test`);
webpack需要在捆绑包中包括哪些模块?该变量moduleName
可以是任何值,因此在编译时不知道确切的模块。相反,它包括 所有
可能与上述表达式匹配的模块。假设以下目录结构:
src├─ one
│ └─ test.js
├─ two
│ ├─ subdir
│ │ └─ test.js
│ └─ test.js
└─ three
└─ test.js
所有这些test.js
文件都将包含在捆绑包中,因为moduleName
可能是one
或类似嵌套的东西two/subdir
。
有关更多详细信息,请参阅带有官方文档表达的require。
您无法遍历一个数组并导入该数组的每个模块,但上述例外情况是无法通过串联字符串来进行导入,但是这样做的结果是包括了所有可能的模块,通常应避免这样做。
以上是 webpack动态模块加载器按需 的全部内容, 来源链接: utcz.com/qa/416561.html