UNPKG

9.79 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _regenerator = require('babel-runtime/regenerator');
8
9var _regenerator2 = _interopRequireDefault(_regenerator);
10
11var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
12
13var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
14
15var _fsExtra = require('fs-extra');
16
17var _fsExtra2 = _interopRequireDefault(_fsExtra);
18
19var _ip = require('ip');
20
21var _ip2 = _interopRequireDefault(_ip);
22
23var _os = require('os');
24
25var _os2 = _interopRequireDefault(_os);
26
27var _ejs = require('ejs');
28
29var _ejs2 = _interopRequireDefault(_ejs);
30
31var _readline = require('readline');
32
33var _readline2 = _interopRequireDefault(_readline);
34
35var _colors = require('colors');
36
37var _colors2 = _interopRequireDefault(_colors);
38
39var _tools = require('./../utils/tools');
40
41function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
42
43/**
44 * desc:增加一个页面 newPage
45 *
46 * 1.在view下生成页面
47 * -view
48 * -NewPage
49 * -Index.vue
50 * 2.在router增加路由引入
51 *
52 */
53// export default pageNames => pageNames.forEach(async pageName => {
54// console.log(pageName);
55// await sleep(3000);
56// console.log(124);
57// })
58// export default async (pageNames) => {
59// for (let i = 0, len = pageNames.length; i < len; i++) {
60// var pageName = pageNames[i];
61// console.log(pageName);
62// await sleep(3000);
63// console.log(124);
64// }
65// }
66var devPort = require(_tools.PROJECT_PATH + '/package.json').vivo.devPort;
67
68exports.default = function () {
69 var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(pageNames) {
70 var _loop, i, len, pageName;
71
72 return _regenerator2.default.wrap(function _callee2$(_context3) {
73 while (1) {
74 switch (_context3.prev = _context3.next) {
75 case 0:
76 _loop = /*#__PURE__*/_regenerator2.default.mark(function _loop(i, len) {
77 var upperPageName, lowerPageName, newPageFile, newPageTemplateFile, newPageTemplateData, newPageTemplateStr, routerFile, routerCopyFile, routerFileReadStream, routerCopyFileWriteStream, importRouterStr, routerObjectStr, routerFileReadline, index;
78 return _regenerator2.default.wrap(function _loop$(_context2) {
79 while (1) {
80 switch (_context2.prev = _context2.next) {
81 case 0:
82 pageName = pageNames[i];
83
84 // 1.在view下生成页面对应的文件
85
86 // 首字母大写文件名
87
88 upperPageName = (0, _tools.firstUpperCase)(pageName);
89
90 // 首字母小写文件名
91
92 lowerPageName = (0, _tools.firstLowerCase)(pageName);
93
94 // 新页面
95
96 newPageFile = _tools.SRC_VIEW_PATH + '/' + upperPageName + '/Index.vue';
97
98 // 新页面模版
99
100 newPageTemplateFile = _tools.CLIENT_PATH + '/template/page.vue';
101
102 // 读取模版字符串
103
104 _context2.next = 7;
105 return _fsExtra2.default.readFile(newPageTemplateFile);
106
107 case 7:
108 newPageTemplateData = _context2.sent;
109 _context2.next = 10;
110 return _ejs2.default.render(newPageTemplateData.toString(), {
111 upperPageName: upperPageName,
112 lowerPageName: lowerPageName
113 });
114
115 case 10:
116 newPageTemplateStr = _context2.sent;
117 _context2.next = 13;
118 return _fsExtra2.default.outputFile(newPageFile, newPageTemplateStr);
119
120 case 13:
121
122 // 2.在router增加路由引入
123
124 // 生成router.js
125 routerFile = _tools.SRC_ROUTER_PATH + '/index.js';
126
127 // 拷贝的router.js后的地址
128
129 routerCopyFile = _tools.CLIENT_PATH + '/template/router-copy.js';
130
131 // 同步创建router-copy.js
132
133 _fsExtra2.default.writeFileSync(routerCopyFile);
134
135 // 打开routerFile可读的文件流
136 _context2.next = 18;
137 return _fsExtra2.default.createReadStream(routerFile);
138
139 case 18:
140 routerFileReadStream = _context2.sent;
141 _context2.next = 21;
142 return _fsExtra2.default.createWriteStream(routerCopyFile);
143
144 case 21:
145 routerCopyFileWriteStream = _context2.sent;
146
147
148 // 创建的路由字符串
149 // 导入新建的路由字符串
150 importRouterStr = 'const ' + upperPageName + ' = resolve => require([\'../views/' + upperPageName + '/Index\'], resolve)';
151
152 // 路由对象字符串
153
154 routerObjectStr = '\n {\n path: \'/' + lowerPageName + '\',\n name: \'' + upperPageName + '\',\n meta: {\n title: \'' + upperPageName + '\'\n },\n component: ' + upperPageName + '\n },';
155
156 // 创建一个可逐行读取流
157 // input - 需要监听的可读流
158
159 _context2.next = 26;
160 return _readline2.default.createInterface({
161 input: routerFileReadStream
162 });
163
164 case 26:
165 routerFileReadline = _context2.sent;
166
167
168 // 按行将需要插入的字符串插入至临时文件中
169 // 判断是否是首航标示
170 index = 0;
171 _context2.next = 30;
172 return routerFileReadline.on('line', function () {
173 var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(line) {
174 var beforeStr, insetStr;
175 return _regenerator2.default.wrap(function _callee$(_context) {
176 while (1) {
177 switch (_context.prev = _context.next) {
178 case 0:
179 beforeStr = '';
180 // 如果不是首行,则添加系统换行符
181
182 if (index > 0) {
183 beforeStr = _os2.default.EOL;
184 }
185
186 // 行数递增
187 index++;
188
189 // 声明插入的字符
190 insetStr = '';
191
192 if (line.indexOf('new Router') > -1) {
193 // 判断到声明路由时,插入importRouterStr
194 insetStr = beforeStr + importRouterStr + _os2.default.EOL + line;
195 } else if (line.replace(/\s/g, '').indexOf('routes:[') > -1) {
196 // 判断路由对象数组时,插入routerObjectStr
197 insetStr = beforeStr + line + routerObjectStr;
198 } else {
199 // 其他则还原
200 insetStr = beforeStr + line;
201 }
202 _context.next = 7;
203 return routerCopyFileWriteStream.write(insetStr);
204
205 case 7:
206 case 'end':
207 return _context.stop();
208 }
209 }
210 }, _callee, undefined);
211 }));
212
213 return function (_x2) {
214 return _ref2.apply(this, arguments);
215 };
216 }());
217
218 case 30:
219 _context2.next = 32;
220 return _fsExtra2.default.copy(routerCopyFile, routerFile);
221
222 case 32:
223 _context2.next = 34;
224 return _fsExtra2.default.appendFile(routerFile, _os2.default.EOL);
225
226 case 34:
227 _context2.next = 36;
228 return _fsExtra2.default.unlink(routerCopyFile);
229
230 case 36:
231
232 console.log(_colors2.default.magenta('visit page file :' + newPageFile));
233 console.log(_colors2.default.green('visit page url : http://' + _ip2.default.address() + ':' + devPort + '/#/' + lowerPageName));
234
235 case 38:
236 case 'end':
237 return _context2.stop();
238 }
239 }
240 }, _loop, undefined);
241 });
242 i = 0, len = pageNames.length;
243
244 case 2:
245 if (!(i < len)) {
246 _context3.next = 7;
247 break;
248 }
249
250 return _context3.delegateYield(_loop(i, len), 't0', 4);
251
252 case 4:
253 i++;
254 _context3.next = 2;
255 break;
256
257 case 7:
258 case 'end':
259 return _context3.stop();
260 }
261 }
262 }, _callee2, undefined);
263 }));
264
265 return function (_x) {
266 return _ref.apply(this, arguments);
267 };
268}();
269
270module.exports = exports['default'];
\No newline at end of file