UNPKG

4.13 kBJavaScriptView Raw
1/**
2 * 获取指定目录下的所有文件(不包含“_”开头的文件,如果是精灵图则只保存其所属目录)
3 *
4 * @param {string} dirPath 目录路径
5 * @param {array} ignoreDir 需要过滤的目录,例如“node_module”则会过滤掉“config.src/node_module”目录
6 * @returns
7 *
8 * @memberOf Watch
9 */
10module.exports = (option)=>{
11 const {fs,path,pathInfo,isData,isSprite,getFileInfo} = {
12 fs:require('fs-extra'),
13 path:require('path'),
14 pathInfo:require('./getPathInfo'),
15 isData:require('./isData'),
16 isSprite:require('./isSprite'),
17 getFileInfo:require('./getFileInfo')
18 };
19
20 let config = {
21 srcDir:option.srcDir,
22 ignoreDir:option.ignoreDir ? [...option.ignoreDir] : ['node_modules'],
23 ignore_:option.ignore_ === undefined ? true : option.ignore_
24 };
25
26 //先声明文件结构,以编译顺序能根据文件结构来
27 let oFiles = {
28 '.pug':{},
29 '.jade':{},
30 '.ts':{},
31 '.tsx':{},
32 '.jsx':{},
33 '.js':{},
34 '.png':{},
35 '.svg':{},
36 '_sprite':{},
37 '.scss':{},
38 '.sass':{}
39 },
40 eachDir,
41
42 //检查文件是否为需要过滤的目录内
43 isIgnoreDir = (filePath)=>{
44 return config.ignoreDir.some((item,index)=>{
45 //console.log('文件路径:',filePath);
46 return filePath.indexOf(path.sep + item + path.sep) > -1;
47 });
48 },
49 isIgnoreFile = (fileName)=>{
50 return ['.DS_Store'].some((item)=>{
51 return item === fileName;
52 });
53 };
54
55 (eachDir = (dir)=>{
56 //检查,如果目录存在,则读取目录文件列表并逐层遍历
57 let isDir = pathInfo(dir).type === 'dir';
58 if(isDir){
59 let files = fs.readdirSync(dir);
60
61 files.forEach((item,index)=>{
62 let filePath = path.join(dir,item),
63 itemInfo = pathInfo(filePath),
64 isNotIgnore = !isIgnoreDir(filePath);
65
66 if(itemInfo.type === 'dir' && isNotIgnore){
67 eachDir(filePath)
68 }else if(itemInfo.type === 'file' && isNotIgnore && !isIgnoreFile(itemInfo.name)){
69
70 //如果文件是精灵图,保存其所属目录
71 let _isSprite = isSprite(filePath),
72 _isData = isData(filePath);
73 if(_isSprite){
74 oFiles['_sprite'][path.dirname(filePath)] = null;
75 }else if(!_isData){
76 //oFiles[itemInfo.extension].push(_ts.getFileInfo(filePath));
77 let fileInfo = getFileInfo(filePath);
78
79 //如果开启了排除公共文件
80 if(config.ignore_){
81 //该类型文件没有出现过且不是以“_”开始的公共文件,那么创建一个空的对象用以存储文件列表
82 if(oFiles[itemInfo.extension] === undefined && !fileInfo.isPublic){
83 oFiles[itemInfo.extension] = {};
84 };
85 //文件不是公共文件(即以"_"开头的文件,则保存到对象中)
86 if(!fileInfo.isPublic){
87 oFiles[itemInfo.extension][filePath] = null;
88 };
89 }
90 //未开启排除公共文件,则是所有文件都添加到文件列表
91 else{
92 if(oFiles[itemInfo.extension] === undefined){
93 oFiles[itemInfo.extension] = {};
94 };
95 oFiles[itemInfo.extension][filePath] = null;
96 };
97 };
98 };
99 });
100 };
101 })(config.srcDir);
102
103
104
105 return oFiles;
106
107};
\No newline at end of file