forked from swordsman-coder/webfunny_servers
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcreateModule.js
224 lines (209 loc) · 6.67 KB
/
createModule.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
/*
* module.js
* fishYu
*
* 创建新模块
*/
"use strict";
var path = require('path');
var fs = require('fs');
//正则+replace 实现首字母大写
function titleCase(s) {
return s.replace(/\b([\w|']+)\b/g, function (word) {
return word.replace(word.charAt(0), word.charAt(0).toUpperCase());
});
}
/**
* 创建目录
* @param {string} url 目录路径
* @param {function} callBack 回调函数
*/
function createDir(url, callBack) {
fs.mkdir(__dirname + url, function (err) {
if (err) {
throw err;
} else {
callBack && callBack();
console.log('创建目录成功');
}
});
}
/**
* 创建文件
* @param {string} fileName 文件路径
* @param {string} data 文件内容
*/
function createFile(fileName, data) {
var ws = fs.createWriteStream(__dirname + fileName, { start: 0 });
var temp = data.replace(/\{0\}/g, CompName).replace(/\{1\}/g, modlueName);
var buffer = new Buffer(temp);
ws.write(buffer, 'utf8', function (err, buffer) {
if (err) {
throw err;
} else {
console.log('创建文件成功');
}
});
}
/**
* 创建具体模块
* @param {string} name 模块名称
* @param {function} callBack 回调函数
*/
function createModule(name, callBack) {
var schemaPath = "/schema/";
var modulePath = "/modules/";
var controllerPath = "/controllers/";
//创建 schema 中的model
var schemaTemp = fs.readFileSync(__dirname + '/templates/schema.js.template', 'utf8');
createFile(schemaPath + "/" + name + ".js", schemaTemp);
//创建 module
var moduleTemp = fs.readFileSync(__dirname + '/templates/modules.js.template', 'utf8');
createFile(modulePath + "/" + name + ".js", moduleTemp);
//创建 controller
var controllerTemp = fs.readFileSync(__dirname + '/templates/controllers.js.template', 'utf8');
createFile(controllerPath + "/" + name + ".js", controllerTemp);
//成功回调
callBack && callBack();
}
/**
* 更新reducers聚合文件
* @param {string} content 需要更新的内容
* *@param {function} callBack 成功回调
*/
function updateReducers(content, callBack) {
fs.open(__dirname + '/src/reducers.js', 'w', function (err, fd) {
if (err) {
console.error('打开reducers聚合文件失败',err);
fs.close(fd);
return;
} else {
var buffer = new Buffer(content);
//写入,写入总长,从起始位置写入
fs.write(fd, buffer,0, buffer.length, 0, function (err, written, buffer) {
fs.close(fd);
if (err) {
console.log('更新reducers聚合文件失败', err);
return;
} else {
console.log("更新reducers聚合文件 OK");
callBack && callBack();
}
});
}
});
}
/**
* 在bandle load追加内容
* @param {function} callBack 成功回调函数
*/
function appendBundleLoad(callBack){
var bundleLoadTemp = fs.readFileSync(__dirname + '/src/templates/bundleLoad.js.template', 'utf8');
var data = bundleLoadTemp.replace(/\{0\}/g, CompName).replace(/\{1\}/g, modlueName);
data = '\n' + data + '\n';
var buffer = new Buffer(data);
fs.appendFile(__dirname + '/src/bundle_load.js', buffer, function (err) {
if (err) {
console.error("追加 bandler load 失败",err);
return;
} else {
callBack && callBack();
console.log("追加 bandler load OK");
}
});
}
/**
* 更新路由
* @param {function} callBack 成功回调函数
*/
function updateRouter(callBack) {
var data = fs.readFileSync(__dirname + '/src/router.js', 'utf8');
data = data.substr(0, data.lastIndexOf("]"));
var routerTemp = fs.readFileSync(__dirname + '/src/templates/router.js.template', 'utf8');
var router = routerTemp.replace(/\{0\}/g, CompName).replace(/\{1\}/g, modlueName);
var buf = data + "\t" + router + "\n]"
var buffer = new Buffer(buf);
fs.writeFile(__dirname + '/src/router.js', buffer, function (err) {
if (err) {
console.error("追加 router 失败",err);
return;
} else {
callBack && callBack();
console.log("追加 router OK");
}
});
}
/**
* 读取modules 模块目录,
* @param {string} url 需要读取的目录路径
* @param {function} callBack 回调函数
*/
function readDir(url, callBack) {
fs.readdir(__dirname + url, function (err, files) {
if (err) {
console.log('读取目录失败', err);
throw err;
} else {
console.log('读取目录成功');
callBack && callBack(files);
}
})
}
/**
* 拼接reducers内容 demo3: {reducer: demo3Reducer, isCached: false},
* @param {array} files modules目录下的文件夹数组
*/
function jointReducersContent(files){
console.log(files);
var updateReducer = "";
var reducerPath = "";
var reducerContent = "export default {\n";
var store = "";
for (var i = 0; i < files.length; i++) {
var file = files[i];
if(file === '.DS_Store'){
continue;
}
reducerPath += 'import ' + file + 'Reducer from "Modules/' + file + '/reducer"\n';
store += " " + file + ': {reducer: ' + file + 'Reducer, isCached: false},\n';
}
store = store.substr(0, store.lastIndexOf(','));
updateReducer = reducerPath + '\n' + reducerContent + store + "\n}";
return updateReducer;
}
var index = 0;
//获取参数
var args = process.argv.splice(2);
var modlueName = args[index]; //模块名称
var CompName = titleCase(modlueName); //组件名称 模块名称的首字母大写
/**
* 递归循环创建 module
*/
function loopCreate () {
if(index >= args.length) return;
modlueName = args[index]; //模块名称
CompName = titleCase(modlueName); //组件名称 模块名称的首字母大写
//创建模块 具体实现
createModule(modlueName, function() {
console.log('创建成功');
//读取目录
// readDir("/src/modules/", function (files) {
// //更新reducers聚合
// updateReducers(jointReducersContent(files), function() {
// //追加bandle load
// appendBundleLoad(function() {
// //更新路由
// updateRouter(function(){
// console.log("更新路由成功");
// index++;
// loopCreate();
// });
// });
// });
// });
});
}
/**
* 递归创建
*/
loopCreate();