UNPKG

6.33 kBJavaScriptView Raw
1/**
2 * 初始化项目
3 *
4 * @param {string} filePath 文件路径
5 *
6 * @memberOf Watch
7 */
8module.exports = (option)=>{
9 const fs = require('fs-extra'),
10 path = require('path'),
11 tip = require('./tip'),
12 pathInfo = require('./getPathInfo'),
13 getDirFilesPath = require('./getDirFilesPath'), //获取目录文件数据
14 getFileInfo = require('./getFileInfo'), //获取指定文件的相关信息
15 getCompileFn = require('./getCompileFn'), //根据文件类型来获取编译方法
16 getDistPath = require('./getDistPath'),
17 updateImg = require('./updateImg');
18
19 let src = option.src,
20 dist = option.dist,
21 srcDirFiles = getDirFilesPath({
22 srcDir:src
23 // ignoreDir:['node_modules'], //默认会排除'node_modules'的目录
24 // ignore_:true //默认会排以"_"开始的文件公共文件
25 }),
26 tasks = [];
27
28 //清空开发目录文件
29 tasks.push(()=>{
30 return new Promise((resolve,reject)=>{
31 fs.remove(dist,err => {
32 if(err){
33 reject({
34 status:'error',
35 msg:`删除失败 ${dist}`,
36 info:err
37 });
38 }else{
39 resolve({
40 status:'success',
41 msg:`清空 ${dist}`
42 });
43 };
44 });
45 });
46 });
47
48 //清空清灵图目录
49 tasks.push(()=>{
50 return new Promise((resolve,reject)=>{
51 let fwsSpriteDataDir = path.join(src,'css','_fws','sprite','_spriteData');
52 if(pathInfo(fwsSpriteDataDir).type === 'dir'){
53 fs.remove(fwsSpriteDataDir,err => {
54 if(err){
55 reject({
56 status:'error',
57 msg:`删除失败 ${fwsSpriteDataDir}`,
58 info:err
59 });
60 }else{
61 resolve({
62 status:'success',
63 msg:`清空 ${fwsSpriteDataDir}`
64 });
65 };
66 });
67 }else{
68 resolve({
69 status:'success',
70 msg:`清空 ${fwsSpriteDataDir}`
71 });
72 };
73 });
74 });
75
76 //初始化图片资源数据
77 tasks.push(()=>{
78 return new updateImg({
79 srcDirFiles:srcDirFiles
80 });
81 });
82
83 //初始化项目文件
84 tasks.push(()=>{
85 return new Promise((resolve,reject)=>{
86 let taskList = [],
87 data = srcDirFiles;
88
89 //删除vue类型文件,因为初始化时只需要编译入口的js文件即可
90 delete(data['.vue']);
91
92
93 //初始化项目文件
94 for(let i in data){
95 for(let ii in data[i]){
96 //编译选项
97 let option = {};
98 //如果是精灵图需要设置其输入/输出目录/sass输出目录,其它类型文件只需要设置输入或是输出项目即可
99 if(i === '_sprite'){
100 option.srcDir = ii; //精灵图目录
101 option.distSpreiteDir = path.resolve(ii.replace(src,dist),'..'); //精灵图输出目录
102 option.distScssDir = path.join(src,'css','_fws','sprite'); //精灵图sass输出目录
103 }else{
104 option.src = ii;
105 option.dist = getDistPath(ii,true);
106 };
107
108
109 //如果是jade文件,需要试图从项目data目录中寻找对应的数据文件
110 if(i === '.jade' || i === '.pug'){
111
112 //得到文件的信息,文件名,文件类型,是否为公共文件
113 let fileInfo = getFileInfo(ii),
114
115 //根据jade|pug文件路径得到相对应的数据文件路径
116 dataPath = ii.replace(src,path.join(src,'data'+path.sep));
117
118 dataPath = path.join(path.dirname(dataPath),fileInfo.name+'.js');
119
120 //检查对应的文件是否存在,如果存在则引入文件
121 if(pathInfo(dataPath).extension === '.js'){
122 option.data = fws.require(dataPath);
123 };
124 };
125
126 //设置为开发模式
127 option.debug = true;
128
129 //获取与文件类型相对应的编译方法
130 let compile = getCompileFn(i);
131
132 //添加编译任务
133 taskList.push(()=>{
134 return new compile(option);
135 });
136 };
137 };
138
139 //将编译任务异步执行
140 let f = async ()=>{
141 for(let i=0,len=taskList.length; i < len; i++){
142 let subTask = await taskList[i]();
143 if(subTask instanceof Array){
144 subTask.forEach((item,index)=>{
145 if(item.status === 'success'){
146 tip.success(item.msg);
147 };
148 });
149 };
150 if(subTask.status === 'success'){
151 tip.success(subTask.msg);
152 };
153 };
154 return {
155 status:'success',
156 msg:'项目初始化编译完成'
157 };
158 };
159
160 f().then(v => {
161 //isInitCompile = true;
162 resolve(v);
163 }).catch(e => {
164 tip.error(e.msg);
165 reject(e);
166 });
167 });
168 });
169
170
171 return tasks;
172}
\No newline at end of file