1 | /**
|
2 | * 初始化项目
|
3 | *
|
4 | * @param {string} filePath 文件路径
|
5 | *
|
6 | * @memberOf Watch
|
7 | */
|
8 | module.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 |