Javascript 让一个目录中的所有文件都成为webpack中的入口点的最佳方法?

Javascript 让一个目录中的所有文件都成为webpack中的入口点的最佳方法?,javascript,webpack,Javascript,Webpack,我想为一个网站创建多个入口点,这在Webpack中使用entry属性的对象非常容易,比如 但随着网站的发展(而且不可避免地会),添加每个入口点似乎很麻烦,而且容易出错。所以我想简单地指向一个目录并说“这里是所有的入口点。” 所以我把这件事搞定了: var path = require('path'); var fs = require('fs'); var entryDir = path.resolve(__dirname, '../source/js'); var entries = fs.r

我想为一个网站创建多个入口点,这在Webpack中使用
entry
属性的对象非常容易,比如

但随着网站的发展(而且不可避免地会),添加每个入口点似乎很麻烦,而且容易出错。所以我想简单地指向一个目录并说“这里是所有的入口点。”

所以我把这件事搞定了:

var path = require('path');
var fs = require('fs');
var entryDir = path.resolve(__dirname, '../source/js');
var entries = fs.readdirSync(entryDir);
var entryMap = {};
entries.forEach(function(entry){
    var stat = fs.statSync(entryDir + '/' + entry);
    if (stat && !stat.isDirectory()) {
        var name = entry.substr(0, entry.length -1);
        entryMap[name] = entryDir + '/' + entry;
    }
});

module.exports = {
  entry: entryMap,
  output: {
    path: path.resolve(__dirname, '../static/js'),
    filename: "[name]"
  },
...
这很好,但网页包中是否有一个功能或配置选项可以为我处理此问题?

我已经为此使用过

var path=require('path');
var glob=需要(“glob”);
module.exports={
条目:{'app':glob.sync('./scripts/**.ts*')},
输出:{
path:path.join(uu dirname,'/wwwroot/dist'),
文件名:'[name].bundle.js',
sourceMapFilename:“[name].map”
},
模块:{
规则:[
{
测试:/\.tsx?$/,,
加载器:“ts加载器”,
排除:/node_模块/,
}
]
},
决心:{
扩展名:[“.ts”,“.js”]
}

};我认为glob是正确的选择(AFAIK网页包不会为您这样做)。这就是我的结论,它将查找目录中的所有文件,并创建一个名称与文件匹配的条目:

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

module.exports = {
  entry: glob.sync('../source/js/**.js').reduce(function(obj, el){
     obj[path.parse(el).name] = el;
     return obj
  },{}),
  output: {
    path: path.resolve(__dirname, '../static/js'),
    filename: "[name]"
  },
...

调整搜索路径以满足您的特定需求。如果您有一个特殊的脚本目录,它将成为相对路径搜索的新根,那么将
{cwd:someRoot}
作为同步的第二个参数传递也可能很有用。

在我看来,只需要一点节点技能,而且不必那么复杂

const webpack=require('webpack');
const path=require('path');
常数fs=要求('fs');
const fileNames=fs.readdirSync('./src').reduce((acc,v)=>({…acc,[v]:`./src/${v}}}),{});
常量配置={
条目:文件名,
输出:{
path:path.resolve(uu dirname,'dist'),
文件名:“[name]”,
},
};
module.exports=config;

此链接有帮助吗?回答得好,谢谢!我只需要在输出文件名的“[name]”后面添加“.js”。这可能是由于更新版本的webpack造成的?为什么不使用
path.basename
el.replace(path.resolve('../source/js'),'')
而不是
path.parse(el.name
?太好了,谢谢,在这方面只有一个正确答案。你救了我的命。