1 | class Build{
|
2 | constructor(srcPath,options){
|
3 | const _ts = this;
|
4 |
|
5 | let m = _ts.m = {
|
6 | fs:require('fs-extra'),
|
7 | path:require('path'),
|
8 | tip:require('../lib/tip'),
|
9 | pathInfo:require('../lib/getPathInfo'),
|
10 | isFwsDir:require('../lib/isFwsDir'),
|
11 | ReplaceTask:require('../lib/replaceTask'),
|
12 | compressionTask:require('../lib/compressionTask'),
|
13 | simplifyFont:require('../lib/simplifyFont'),
|
14 | fontmin:require('fontmin')
|
15 | },
|
16 | config = _ts.config = {},
|
17 | option = _ts.option = options;
|
18 |
|
19 | config.src = fws.srcPath = typeof srcPath === 'string' ? m.path.join(fws.cmdPath,srcPath,'src'+m.path.sep) : fws.srcPath;
|
20 | config.dev = fws.devPath = m.path.join(config.src,'..','dev'+m.path.sep);
|
21 | config.dist = fws.distPath = m.path.join(config.src,'..','dist'+m.path.sep);
|
22 | }
|
23 |
|
24 |
|
25 | init(){
|
26 | const _ts = this;
|
27 |
|
28 | let m = _ts.m,
|
29 | config = _ts.config,
|
30 | tasks = _ts.taskList(),
|
31 | f = async ()=>{
|
32 | for(let i=0,len=tasks.length; i<len; i++){
|
33 | let task = await tasks[i]();
|
34 | if(task.status === 'success'){
|
35 | m.tip.success(task.msg);
|
36 | }else if(task.status === 'part'){
|
37 | console.log('');
|
38 | console.log(task.msg);
|
39 | console.log('----------------------------------------');
|
40 | };
|
41 | };
|
42 | return '编译完成。';
|
43 | };
|
44 |
|
45 | f().then(v => {
|
46 | console.log('');
|
47 | m.tip.highlight('========================================');
|
48 | m.tip.highlight(v);
|
49 | m.tip.highlight('========================================');
|
50 | }).catch(e => {
|
51 | m.tip.error(e.msg);
|
52 | console.log('error',e);
|
53 | });
|
54 | }
|
55 |
|
56 |
|
57 | taskList(){
|
58 | const _ts = this;
|
59 |
|
60 | let m = _ts.m,
|
61 | config = _ts.config,
|
62 | option = _ts.option,
|
63 | tasks = [];
|
64 |
|
65 |
|
66 | let projectDir = m.path.join(config.src,'..'),
|
67 | backupDirName = m.pathInfo(projectDir).name+'_fwsBackup'+(+new Date),
|
68 | backupDirPath = m.path.join(projectDir,'..',backupDirName),
|
69 | isFwsDir = m.isFwsDir(projectDir);
|
70 |
|
71 |
|
72 | if(!isFwsDir){
|
73 | tasks.push(()=>{
|
74 | return new Promise((resolve,reject)=>{
|
75 |
|
76 | m.fs.ensureDir(backupDirPath).then(v => {
|
77 |
|
78 | m.fs.copy(projectDir,backupDirPath).then(v => {
|
79 | resolve({
|
80 | status:'success',
|
81 | msg:`备份 ${projectDir} -> ${backupDirPath}`,
|
82 | data:backupDirPath
|
83 | });
|
84 | }).catch(e => {
|
85 | reject({
|
86 | status:'error',
|
87 | msg:`${projectDir} 备份失败`,
|
88 | info:e
|
89 | });
|
90 | });
|
91 | }).catch(e => {
|
92 | reject({
|
93 | status:'error',
|
94 | msg:`${backupDirPath} 创建失败`,
|
95 | infor:e
|
96 | });
|
97 | });
|
98 | });
|
99 | });
|
100 | }else{
|
101 |
|
102 | tasks.push(_ts.insertPart('初始化:'));
|
103 |
|
104 |
|
105 | let initCompileTasks = require('../lib/initCompile_dev')({
|
106 | src:fws.srcPath,
|
107 | dist:fws.devPath
|
108 | });
|
109 | tasks.push(...initCompileTasks);
|
110 |
|
111 |
|
112 |
|
113 | let replaceRule = fws.config.distReplace;
|
114 | if(replaceRule){
|
115 | tasks.push(_ts.insertPart('关键字匹配替换:'));
|
116 |
|
117 |
|
118 | let replaceTask = new m.ReplaceTask({
|
119 | src:fws.devPath,
|
120 | rule:replaceRule
|
121 | });
|
122 | tasks.push(replaceTask);
|
123 | };
|
124 | };
|
125 |
|
126 |
|
127 | tasks.push(_ts.insertPart('文件压缩处理:'));
|
128 | let compressionTask = m.compressionTask({
|
129 | src:isFwsDir ? fws.devPath : backupDirPath,
|
130 | dist:isFwsDir ? fws.distPath : projectDir,
|
131 | isMobile:option.mobile,
|
132 | isBeautify:option.beautify
|
133 | });
|
134 | tasks.push(...compressionTask);
|
135 |
|
136 |
|
137 | tasks.push(_ts.insertPart('CSS inline-image Base64编码压缩'));
|
138 | let cssBase64Simplify = require('../lib/cssBase64Simplify');
|
139 | tasks.push(cssBase64Simplify({
|
140 | src:isFwsDir ? fws.distPath : projectDir,
|
141 | dist:isFwsDir ? fws.distPath : projectDir
|
142 | }));
|
143 |
|
144 |
|
145 | if(isFwsDir){
|
146 | tasks.push(_ts.insertPart('字体文件精简:'));
|
147 | let simplifyFont = require('../lib/fontMin');
|
148 | tasks.push(
|
149 | simplifyFont({
|
150 | src:isFwsDir ? fws.devPath : backupDirPath,
|
151 | dist:isFwsDir ? fws.distPath : projectDir
|
152 | })
|
153 | );
|
154 | };
|
155 |
|
156 | return tasks;
|
157 | }
|
158 |
|
159 |
|
160 | insertPart(partTitle){
|
161 | return ()=>{
|
162 | return new Promise((resolve,reject)=>{
|
163 | resolve({
|
164 | status:'part',
|
165 | msg:partTitle
|
166 | })
|
167 | });
|
168 | }
|
169 | }
|
170 |
|
171 | };
|
172 |
|
173 |
|
174 | module.exports = {
|
175 | regTask:{
|
176 | command:'[name]',
|
177 | description:'编译项目',
|
178 | option:[
|
179 | ['-m, --mobile','移动端模式,css样式将不会添加全部前缀'],
|
180 | ['-b, --beautify','css、js文件格式化,不被压缩 ']
|
181 | ],
|
182 | help:()=>{
|
183 | console.log('');
|
184 | console.log(' 补充说明:');
|
185 | console.log(' ------------------------------------------------------------');
|
186 | console.log(' 暂无');
|
187 | },
|
188 | action:Build
|
189 | }
|
190 | }; |
\ | No newline at end of file |