webpack中有多个动态入口脚本?

Agm*_*her 7 javascript webpack

假设我有一个像这样的应用程序结构

app/
   modules/
      module1/
         <other files>
         script.js
      module2/
         <other files>
         script.js
      module3/
         <other files>
         script.js
   lib/
      <some common/shared scripts to import from>
public/
   js/
Run Code Online (Sandbox Code Playgroud)

如何配置webpack以捆绑并输出每个script.js(将从公共lib文件夹中导入各种库/实用程序)到这样的结构中?

例如

public/js/module1/script.js
public/js/module2/script.js
Run Code Online (Sandbox Code Playgroud)

但是没有单独定义每个条目文件?像gulp这样的东西有/**/*.js语法吗?

我的目标是webpack.config.js每次添加新模块/组件时都不必维护我的文件.

Vla*_*ish 4

您需要 glob 包并entryoutput您的webpack.config.js. 在根目录中的示例webpack.config.js

var webpack = require('webpack');
var glob = require('glob');

//Generate object for webpack entry
//rename './app/modules/module1/script.js' -> 'module1/script'
var entryObject = glob.sync('./app/modules/**/script.js').reduce(
    function (entries, entry) {
        var matchForRename = /^\.\/app\/modules\/([\w\d_]+\/script)\.js$/g.exec(entry);

        if (matchForRename !== null && typeof matchForRename[1] !== 'undefined') {
            entries[matchForRename[1]] = entry;
        }

        return entries;
    }, 
    {}
);

module.exports = {
    ...
    entry: entryObject,//{'moduleName/script': './app/modules/moduleName/script.js', ...}
    output: {
        path: __dirname + '/public/js',
        filename: '[name].js'//'moduleName/script.js', [name] - key from entryObject
    }
    ...
};
Run Code Online (Sandbox Code Playgroud)

如果您遇到 fs 错误,例如“无法解析'fs'”,请添加选项

node: {
    fs: "empty"
}
Run Code Online (Sandbox Code Playgroud)

此外,您可以使用其他 EntryObject 将文件捆绑<other files>到公共 script.js 中。

var entryObject = glob.sync('./app/modules/**/*.js').reduce(
    function (entries, entry) {
        var matchForRename = /^\.\/app\/modules\/([\w\d_]+)\/.+\.js$/g.exec(entry);

        if (matchForRename !== null && typeof matchForRename[1] !== 'undefined') {
            var entryName = matchForRename[1] + '/script';

            if (typeof entries[entryName] !== 'undefined') {
                entries[entryName].push(entry);
            } else {
                entries[entryName] = [entry];
            }

        }

        return entries;
    },
    {}
);
Run Code Online (Sandbox Code Playgroud)