Javascript 让一个目录中的所有文件都成为webpack中的入口点的最佳方法?
我想为一个网站创建多个入口点,这在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
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
?太好了,谢谢,在这方面只有一个正确答案。你救了我的命。