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

回到顶部