1. let box = document.getElementById("box");
    2. box.onclick = function () {
    3. const a = require("./util/"+ box.className);
    4. console.log(a);
    5. };

    如上面的代码,webpack是分析不出到底依赖那个文件的,如果出现这个不确定的动态导入webpack会把uti目录下的文件下都导入
    工程目录
    image.png
    main.js里的导入
    image.png
    util文件下的文件都导入啦

    上面的代码等效于

    1. // 仅在webpack运行过程中有效
    2. // 参数1:目录,哪个目录中的模块需要添加到打包结果
    3. // 参数2:是否递归寻找子目录,如果为true,表示需要寻找子目录
    4. // 参数3:正则表达式,凡是匹配的才会加入到打包结果
    5. const context = require.context("./", true, /\.js$/);
    6. console.log(context)

    如何使用工程下的a.js呢

    1. const context = require.context("./util", true, /\.js$/);
    2. const a = context("./a.js");
    3. console.log(a);

    你看main.js中的代码
    image.png

    假设util目录下有很多模块将来还会增加模块,我们可以将其作为一个整体将其导出
    示例:
    /util/index.js的代码

    1. const context = require.context("./", true, /\.js$/);
    2. for (const key of context.keys()) {
    3. if (key !== "./index.js") {
    4. let filename = key.substr(2);
    5. filename = filename.substr(0, filename.length - 3);
    6. exports[filename] = context(key);
    7. }
    8. }

    index.js 的代码

    1. const util = require("./util");
    2. console.log(util.a);