版权声明: https://blog.csdn.net/qq_30868289/article/details/80221610
起初上手webpack大多是进行单页面的配置,但还是会遇到多页面的项目,关于多页面的配置我会有一篇单独的文章来进行介绍,今天我们来共同学习一下webpack多页面配置中的自动获取入口的方法。
先看一下实现方式吧:
var path = require('path');
var fs = require('fs');
module.exports =function getEntrys() {
var matchs;
var files = {};
var entry = [];
var modules = path.resolve(__dirname, './src/modules/');
var dirs = fs.readdirSync(modules);
dirs.forEach(function(item, index) {
var itemPath = path.resolve(modules, item);
var sta = fs.statSync(itemPath);
if (sta.isDirectory()) {
var filesDir = fs.readdirSync(itemPath);
filesDir.forEach(function(val, index) {
matchs = /(.+)\.js$/g.test(val);
if (matchs) {
var prname = val.split('.')[0];
files[prname] = path.resolve(itemPath, val);
}
});
}
});
return files;
};
入口文件的目录如图:
这个函数可以获取入口文件所在的目录。然后将其用在webpack的配置中就ok啦。
函数关键语法讲解
path.resolve
path.resolve方法用于将相对路径转为绝对路径
它可以接受多个参数,依次表示所要进入的路径,直到将最后一个参数转为绝对路径。如果根据参数无法得到绝对路径,就以当前所在路径作为基准。除了根目录,该方法的返回值都不带尾部的斜杠。
// 格式
path.resolve([from ...], to)
// 实例
path.resolve('foo/bar', '/tmp/file/', '..', 'a/../subfile')
上面代码的实例,执行效果类似下面的命令。
$ cd foo/bar
$ cd /tmp/file/
$ cd ..
$ cd a/../subfile
$ pwd
__dirname
__dirname:全局变量,存储的是文件所在的文件目录
fs.readdirSync
方法将返回一个包含“指定目录下所有文件名称”的数组对象。
fs.statSync(path,callback)
参数:
1)、path为文件的路径
2)、callback:回调函数 ,有两个参数,err:在获取文件信息失败时,会存储错误信息,stats:存储文件信息的参数。
stats:是fs.stats()对象,执行fs.stat后将stats类实例返回给其回调函数 ,因此可以通过stats对象上的isFile()方法来判断读取的是否为文件(而不是文件夹)
var fs=require('fs')
fs.stat('./router',function(err,stats){ //读取router文件夹
console.log(stats.isFile()) //判断文件夹是否为文件; 返回false
})