skybase 0.1.83 → 0.1.86

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/.eslintignore +35 -35
  2. package/.eslintrc +41 -41
  3. package/CHANGELOG.md +29 -486
  4. package/README.md +214 -214
  5. package/demo/1-simple/README.md +1 -1
  6. package/demo/1-simple/index.js +7 -7
  7. package/demo/1-simple/model/api/demo.js +26 -26
  8. package/demo/1-simple/model/api/frontApiFiles//347/224/250/344/272/216/345/261/225/347/244/272/345/246/202/344/275/225/345/256/232/344/271/211/344/270/200/344/270/252/346/216/245/345/217/243.js +32 -32
  9. package/demo/1-simple/model//347/224/250/344/272/216/345/261/225/347/244/272/345/246/202/344/275/225/345/256/232/344/271/211/344/270/200/344/270/252/346/216/245/345/217/243.js +29 -29
  10. package/demo/1-simple/package.json +11 -11
  11. package/demo/1-simple/router/demo.js +8 -8
  12. package/demo/1-simple/ws_router/echo.js +9 -9
  13. package/demo/2-api-register/README.md +1 -1
  14. package/demo/2-api-register/config/config.default.js +25 -25
  15. package/demo/2-api-register/config/config.dev.js +15 -15
  16. package/demo/2-api-register/config/config.prod.js +15 -15
  17. package/demo/2-api-register/config/config.test.js +15 -15
  18. package/demo/2-api-register/config/index.js +32 -32
  19. package/demo/2-api-register/model/api/demo.js +26 -26
  20. package/demo/2-api-register/model/api/dir/demo.js +27 -27
  21. package/demo/2-api-register/model/api/redirect.js +30 -30
  22. package/demo/2-api-register/model/api/use-limit.js +45 -45
  23. package/demo/2-api-register/package.json +11 -11
  24. package/demo/2-api-register/router/demo.js +9 -9
  25. package/demo/2-api-register/router/dir/demo.js +9 -9
  26. package/demo/2-api-register/router/redirect.js +8 -8
  27. package/demo/2-api-register/router/use-limit.js +9 -9
  28. package/demo/3-full-module/README.md +1 -1
  29. package/demo/3-full-module/config/config.default.js +33 -33
  30. package/demo/3-full-module/config/config.dev.js +15 -15
  31. package/demo/3-full-module/config/config.prod.js +15 -15
  32. package/demo/3-full-module/config/config.test.js +15 -15
  33. package/demo/3-full-module/config/index.js +32 -32
  34. package/demo/3-full-module/index.js +36 -36
  35. package/demo/3-full-module/model/api/demo.js +26 -26
  36. package/demo/3-full-module/model/api/dir/demo.js +26 -26
  37. package/demo/3-full-module/model/api/use-rabbitmq.js +26 -26
  38. package/demo/3-full-module/model/api/use-redis.js +33 -33
  39. package/demo/3-full-module/package.json +17 -17
  40. package/demo/3-full-module/rabbit-consumer.js +45 -45
  41. package/demo/3-full-module/router/demo.js +9 -9
  42. package/demo/3-full-module/router/dir/demo.js +9 -9
  43. package/demo/3-full-module/router/use-redis.js +14 -14
  44. package/demo/4-api-to-file/README.md +8 -8
  45. package/demo/4-api-to-file/config/config.default.js +8 -8
  46. package/demo/4-api-to-file/config/index.js +32 -32
  47. package/demo/4-api-to-file/index.js +6 -6
  48. package/demo/4-api-to-file/model/api/api.js +142 -142
  49. package/demo/4-api-to-file/package.json +14 -14
  50. package/demo/4-api-to-file/router/api.js +37 -37
  51. package/demo/5-mock-api/README.md +2 -2
  52. package/demo/5-mock-api/config/config.default.js +8 -8
  53. package/demo/5-mock-api/config/index.js +32 -32
  54. package/demo/5-mock-api/index.js +24 -24
  55. package/demo/5-mock-api/model/api/mock.js +213 -213
  56. package/demo/5-mock-api/model/mock.js +27 -27
  57. package/demo/5-mock-api/package.json +15 -15
  58. package/demo/5-mock-api/router/mock.js +20 -20
  59. package/demo/6-sql-test/README.md +1 -1
  60. package/demo/6-sql-test/config/config.default.js +61 -61
  61. package/demo/6-sql-test/config/config.dev.js +15 -15
  62. package/demo/6-sql-test/config/config.prod.js +15 -15
  63. package/demo/6-sql-test/config/config.test.js +15 -15
  64. package/demo/6-sql-test/config/index.js +32 -32
  65. package/demo/6-sql-test/index.js +48 -48
  66. package/demo/6-sql-test/model/api/dir/dir/dir/four.js +18 -18
  67. package/demo/6-sql-test/model/api/dir/dir/three.js +26 -26
  68. package/demo/6-sql-test/model/api/dir/two.js +26 -26
  69. package/demo/6-sql-test/model/api/one.js +18 -18
  70. package/demo/6-sql-test/package.json +18 -18
  71. package/demo/6-sql-test/router/test.js +38 -38
  72. package/demo/6-sql-test/service/test.js +96 -96
  73. package/demo/7-token/README.md +1 -1
  74. package/demo/7-token/config/config.default.js +35 -35
  75. package/demo/7-token/config/config.dev.js +15 -15
  76. package/demo/7-token/config/config.prod.js +15 -15
  77. package/demo/7-token/config/config.test.js +15 -15
  78. package/demo/7-token/config/index.js +32 -32
  79. package/demo/7-token/model/api/demo.js +43 -43
  80. package/demo/7-token/package.json +17 -17
  81. package/demo/8-test/README.md +1 -1
  82. package/demo/8-test/config/config.default.js +35 -35
  83. package/demo/8-test/config/config.dev.js +15 -15
  84. package/demo/8-test/config/config.prod.js +15 -15
  85. package/demo/8-test/config/config.test.js +15 -15
  86. package/demo/8-test/config/index.js +32 -32
  87. package/demo/8-test/index.js +30 -30
  88. package/demo/8-test/model/api/demo.js +43 -43
  89. package/demo/8-test/model/api/dir/two.js +26 -26
  90. package/demo/8-test/model/api/mock.js +157 -157
  91. package/demo/8-test/model/api/one.js +150 -150
  92. package/demo/8-test/model/mock.js +35 -35
  93. package/demo/8-test/package.json +17 -17
  94. package/demo/8-test/router/demo.js +45 -45
  95. package/demo/8-test/router/mock.js +20 -20
  96. package/demo/8-test/router/test.js +43 -43
  97. package/demo/8-test/service/test.js +35 -35
  98. package/demo/9-mysql-chart/config/config.dev.js +15 -15
  99. package/demo/9-mysql-chart/config/config.prod.js +15 -15
  100. package/demo/9-mysql-chart/config/config.test.js +15 -15
  101. package/demo/9-mysql-chart/index.js +36 -36
  102. package/demo/9-mysql-chart/package.json +18 -18
  103. package/lib/middleware/sky-api-register.js +348 -348
  104. package/lib/middleware/sky-cors.js +8 -8
  105. package/lib/middleware/sky-output.js +83 -83
  106. package/lib/middleware/sky-static-server.js +16 -16
  107. package/outFiles.js +325 -325
  108. package/package.json +50 -67
  109. package/sky-module/create_amqplib.js +69 -69
  110. package/sky-module/create_ioredis.js +47 -47
  111. package/sky-module/create_kafka.js +24 -24
  112. package/skyconfig.js +2 -1
  113. package/tests/test.js +173 -173
package/outFiles.js CHANGED
@@ -1,325 +1,325 @@
1
- const fs = require('fs')
2
-
3
- module.exports = {
4
- outProjectCode
5
- }
6
-
7
- async function outProjectCode (option) {
8
- for (let k in option.initModelsMap) {
9
- if (option.initModelsMap[k].codeConfig) { // 获取相应代码配置
10
- option.initModelsMap[k].codeConfig = option.initModelsMap[k].codeConfig()
11
- }
12
- }
13
-
14
- let fileTree = {
15
- config: {
16
- 'index.js': getConfigIndex(), // 直接拷贝代码
17
- 'config.default.js': getConfigDefault(option) // 外部依赖 代码修改
18
- },
19
- model: {
20
- api: {
21
- 'demo.js': getModelApiDemo() // 直接拷贝代码
22
- }
23
- },
24
- router: {
25
- 'demo.js': getRouterDemo() // 直接拷贝代码
26
- },
27
- 'index.js': getIndex(option), // 外部依赖 代码修改
28
- 'nodemon.json': getNodemon(),
29
- 'package.json': getPackage(option) // 项目名称修整
30
- }
31
-
32
- for (let k in option.initModelsMap) {
33
- await outPutFile(option.name, '', fileTree, option)
34
- if (option.initModelsMap[k] && option.initModelsMap[k].outFile) {
35
- // await option.initModelsMap[k].outFile(option.name, `${option.dirName}/../node_modules/skybase-${k}/`)
36
- await option.initModelsMap[k].outFile(option.name, `${option.dirName}/../../node_modules/skybase-${k}/`)
37
- }
38
- }
39
- }
40
-
41
- function getNodemon () {
42
- return `
43
- {
44
- "restartable": "rs",
45
- "ignore": [
46
- "*.txt",
47
- ".git",
48
- "www",
49
- "output",
50
- "tests",
51
- "tools",
52
- "mochawesome-report",
53
- "mochawesome-reports",
54
- "front"
55
- ],
56
- "verbose": false
57
- }`
58
- }
59
-
60
- // package.json
61
- function getPackage (option) {
62
- let file = {
63
- 'name': option.name, // 项目名称
64
- 'version': '1.0.0',
65
- 'main': 'index.js',
66
- 'dependencies': {
67
- skybase: '*'
68
- }
69
- }
70
- // "amqplib": "^0.5.3",
71
- // "skybase": "*"
72
- return JSON.stringify(file, '', ' ')
73
- }
74
-
75
- // index.js
76
- function getIndex (option) {
77
- let addRequire = ''
78
- let addFunc = ''
79
- let addFuncCall = ''
80
- let addBeforeMount = ''
81
- let addCommon = {} // commonModelName --- bool
82
-
83
- for (let k in option.initModelsMap) { // 独立配置增加,比如stat 需要连接单独的redis或mq队列等等
84
- if (option.initModelsMap[k].codeConfig && option.initModelsMap[k].codeConfig.index) {
85
- addRequire += option.initModelsMap[k].codeConfig.index.require || ''
86
- addFunc += option.initModelsMap[k].codeConfig.index.func || ''
87
- addFuncCall += option.initModelsMap[k].codeConfig.index.funcCall || ''
88
- addBeforeMount += option.initModelsMap[k].codeConfig.index.beforeMount || ''
89
- }
90
- if (option.initModelsMap[k].codeConfig && option.initModelsMap[k].codeConfig.common) { // 增加公用模块 所有项目一起使用 redis、mysql等等配置
91
- for (let kk in option.initModelsMap[k].codeConfig.common) {
92
- if (!addCommon[kk] && option.initModelsMap[k].codeConfig.common[kk].index) {
93
- addRequire += option.initModelsMap[k].codeConfig.common[kk].index.require || ''
94
- addFunc += option.initModelsMap[k].codeConfig.common[kk].index.func || ''
95
- addFuncCall += option.initModelsMap[k].codeConfig.common[kk].index.funcCall || ''
96
- addBeforeMount += option.initModelsMap[k].codeConfig.common[kk].index.beforeMount || ''
97
- addCommon[kk] = true
98
- }
99
- }
100
- }
101
- }
102
- let file = `
103
- const sky = require('skybase')
104
- const config = require('./config')
105
- const Pack = require('./package.json')
106
- ${addRequire}
107
-
108
- /* global $ */
109
-
110
- config.beforeMount = async () => {
111
- ${addBeforeMount}
112
- }
113
-
114
- sky.start(config, async () => {
115
- $.log('${option.name} 项目成功启动')
116
- ${addFuncCall}
117
- })
118
-
119
- ${addFunc}
120
- `
121
- return file
122
- }
123
-
124
- // 获取默认配置
125
- function getConfigDefault (option) {
126
- let addFile = ''
127
- let addCommon = {} // 判断公用配置不重复添加 commonModelName --- bool
128
- for (let k in option.initModelsMap) {
129
- if (option.initModelsMap[k].codeConfig) {
130
- addFile += option.initModelsMap[k].codeConfig.config || '' // 独立配置增加,比如stat 需要连接单独的redis或mq队列等等
131
- if (option.initModelsMap[k].codeConfig.common) { // 增加公用模块 所有项目一起使用 redis、mysql等等配置
132
- for (let kk in option.initModelsMap[k].codeConfig.common) {
133
- if (!addCommon[kk]) {
134
- addFile += option.initModelsMap[k].codeConfig.common[kk].config || ''
135
- addCommon[kk] = true
136
- }
137
- }
138
- }
139
- }
140
- }
141
-
142
- let file = `
143
- const path = require('path')
144
- const packageJson = require('../package')
145
- module.exports = {
146
- ${addFile}
147
- name: packageJson.name,
148
- port: 8080,
149
- rootDir: path.join(__dirname, '../')
150
- }`
151
- return file
152
- }
153
-
154
- // 获取 config/index.js 文档
155
- function getConfigIndex () {
156
- let file = `
157
- 'use strict'
158
- let $ = require('meeko')
159
- const envMap = {
160
- dev: 'dev',
161
- development: 'dev',
162
- test: 'test',
163
- 'local-test': 'local-test',
164
- checkout: 'checkout', // 是另一个测试环境,当时运维没命好名
165
- local: 'local',
166
- production: 'prod',
167
- prod: 'prod'
168
- }
169
-
170
- let env = process.env.NODE_ENV
171
-
172
- // 有这个之后,启动时 node ./index.js local 即可指定环境
173
- if (!env && process.argv[2]) {
174
- env = process.argv[2]
175
- }
176
-
177
- env = envMap[env] || 'local'
178
- const defConfig = require('./config.default')
179
-
180
- let config = {}
181
- try {
182
- config = require('./config.' + env)
183
- } catch (e) {
184
- console.log('\x1b[2;31m' + \`【普通错误】\${env}配置文件缺失,将使用default配置\` + '\x1b[m')
185
- }
186
- $.option.logTime = 0
187
- $.log(\` NODE_ENV:\${$.c.g(\` \${env} \`)}`)
188
- module.exports = { ...defConfig, ...config }
189
- `
190
- return file
191
- }
192
-
193
- // 递归创建文档
194
- async function outPutFile (dir, key, obj) {
195
- try {
196
- if (typeof obj === 'string') {
197
- // console.log(`创建目录 ${dir}`)
198
- await fs.mkdirSync(dir, { recursive: true })
199
- if (obj.length > 0) {
200
- await fs.writeFileSync(`${dir}/${key}`, obj)
201
- }
202
- return
203
- }
204
- for (let k in obj) {
205
- outPutFile(key === '' ? dir : `${dir}/${key}`, k, obj[k])
206
- }
207
- } catch (e) {
208
- console.error(e.stack)
209
- }
210
- }
211
-
212
- function getRouterDemo () {
213
- return `
214
- const Mock = require('mockjs')
215
-
216
- /* global $ */
217
-
218
- module.exports = {
219
- async haveController (ctx) {
220
- ctx.ok({})
221
- }
222
- }`
223
- }
224
-
225
- function getModelApiDemo () {
226
- return `
227
- module.exports = {
228
- __swagger__: {
229
- name: 'mock数据接口',
230
- description: 'mock数据接口 - http://mockjs.com/examples.html'
231
- },
232
- '/demo/noControllerNoMock': {
233
- name: 'mock controller、mock 都没有',
234
- desc: 'mock controller、mock 都没有',
235
- method: 'get',
236
- // controller: 'demo.noController',
237
- param: {},
238
- err_code: {
239
- 200: {
240
- temp: {
241
- 'data': {},
242
- 'code': 200,
243
- 'msg': 'ok',
244
- 't': 1552709427858
245
- }
246
- }
247
- },
248
- test: {},
249
- 'token': false,
250
- 'needSign': false,
251
- 'front': true
252
- },
253
- '/demo/noController': {
254
- name: 'mock 没有controller',
255
- desc: 'mock 没有controller',
256
- method: 'all',
257
- // controller: 'demo.noController',
258
- param: {},
259
- mock: {
260
- // 属性 list 的值是一个数组,其中含有 1 到 10 个元素
261
- 'list|1-2': [{
262
- // 属性 id 是一个自增数,起始值为 1,每次增 1
263
- 'id|+1': 100,
264
- 'id1|0-21': 100,
265
- 'name': \`@genName\`,
266
- str: \`@genData('abcdefghijklmnopqrstuvwxyz', 10)\`,
267
- datetime: \`@genDatetime('2016-1-1', '2016-2-2')\`,
268
- card: \`@genCard\`,
269
- url: \`@genUrl(5)\`,
270
- phoneNum: \`@genPhone\`,
271
- color: \`@genColor\`,
272
- colorRGBA: \`@genColor('rgba')\`,
273
- ip: \`@genIp\`,
274
- word: '@genWord(10)',
275
- word0: '@genWord',
276
- sentence: \`@genText(20)\`,
277
- sentence20: \`@genText(20)\`,
278
- sentence10: \`@genText(10)\`,
279
- sentence0: \`@genText\`,
280
- constellation: \`@genConstellation\`,
281
- bool: \`@genBool\`,
282
- genEnum1: \`@genEnum(['5', 6, 7])\`, // NOTICE key不能和函数名一样
283
- genEnum0: \`@genEnum\`,
284
- genEnum2: \`@genEnum(['5x', '6x', '7x'])\`,
285
- genEnum3: \`@genEnum([[], null, ''])\`
286
- }]
287
- },
288
- err_code: {
289
- 200: {
290
- temp: {
291
- 'data': {},
292
- 'code': 200,
293
- 'msg': 'ok',
294
- 't': 1552709427858
295
- }
296
- }
297
- },
298
- test: {},
299
- 'token': false,
300
- 'needSign': false,
301
- 'front': true
302
- },
303
- '/demo/haveController': {
304
- name: 'mock 有controller',
305
- desc: 'mock 有controller',
306
- method: 'get',
307
- controller: 'demo.haveController',
308
- param: {},
309
- err_code: {
310
- 200: {
311
- temp: {
312
- 'data': { },
313
- 'code': 0,
314
- 'msg': 'ok',
315
- 't': 1559204889719
316
- }
317
- }
318
- },
319
- test: {},
320
- 'token': false,
321
- 'needSign': false,
322
- 'front': true
323
- }
324
- }`
325
- }
1
+ const fs = require('fs')
2
+
3
+ module.exports = {
4
+ outProjectCode
5
+ }
6
+
7
+ async function outProjectCode (option) {
8
+ for (let k in option.initModelsMap) {
9
+ if (option.initModelsMap[k].codeConfig) { // 获取相应代码配置
10
+ option.initModelsMap[k].codeConfig = option.initModelsMap[k].codeConfig()
11
+ }
12
+ }
13
+
14
+ let fileTree = {
15
+ config: {
16
+ 'index.js': getConfigIndex(), // 直接拷贝代码
17
+ 'config.default.js': getConfigDefault(option) // 外部依赖 代码修改
18
+ },
19
+ model: {
20
+ api: {
21
+ 'demo.js': getModelApiDemo() // 直接拷贝代码
22
+ }
23
+ },
24
+ router: {
25
+ 'demo.js': getRouterDemo() // 直接拷贝代码
26
+ },
27
+ 'index.js': getIndex(option), // 外部依赖 代码修改
28
+ 'nodemon.json': getNodemon(),
29
+ 'package.json': getPackage(option) // 项目名称修整
30
+ }
31
+
32
+ for (let k in option.initModelsMap) {
33
+ await outPutFile(option.name, '', fileTree, option)
34
+ if (option.initModelsMap[k] && option.initModelsMap[k].outFile) {
35
+ // await option.initModelsMap[k].outFile(option.name, `${option.dirName}/../node_modules/skybase-${k}/`)
36
+ await option.initModelsMap[k].outFile(option.name, `${option.dirName}/../../node_modules/skybase-${k}/`)
37
+ }
38
+ }
39
+ }
40
+
41
+ function getNodemon () {
42
+ return `
43
+ {
44
+ "restartable": "rs",
45
+ "ignore": [
46
+ "*.txt",
47
+ ".git",
48
+ "www",
49
+ "output",
50
+ "tests",
51
+ "tools",
52
+ "mochawesome-report",
53
+ "mochawesome-reports",
54
+ "front"
55
+ ],
56
+ "verbose": false
57
+ }`
58
+ }
59
+
60
+ // package.json
61
+ function getPackage (option) {
62
+ let file = {
63
+ 'name': option.name, // 项目名称
64
+ 'version': '1.0.0',
65
+ 'main': 'index.js',
66
+ 'dependencies': {
67
+ skybase: '*'
68
+ }
69
+ }
70
+ // "amqplib": "^0.5.3",
71
+ // "skybase": "*"
72
+ return JSON.stringify(file, '', ' ')
73
+ }
74
+
75
+ // index.js
76
+ function getIndex (option) {
77
+ let addRequire = ''
78
+ let addFunc = ''
79
+ let addFuncCall = ''
80
+ let addBeforeMount = ''
81
+ let addCommon = {} // commonModelName --- bool
82
+
83
+ for (let k in option.initModelsMap) { // 独立配置增加,比如stat 需要连接单独的redis或mq队列等等
84
+ if (option.initModelsMap[k].codeConfig && option.initModelsMap[k].codeConfig.index) {
85
+ addRequire += option.initModelsMap[k].codeConfig.index.require || ''
86
+ addFunc += option.initModelsMap[k].codeConfig.index.func || ''
87
+ addFuncCall += option.initModelsMap[k].codeConfig.index.funcCall || ''
88
+ addBeforeMount += option.initModelsMap[k].codeConfig.index.beforeMount || ''
89
+ }
90
+ if (option.initModelsMap[k].codeConfig && option.initModelsMap[k].codeConfig.common) { // 增加公用模块 所有项目一起使用 redis、mysql等等配置
91
+ for (let kk in option.initModelsMap[k].codeConfig.common) {
92
+ if (!addCommon[kk] && option.initModelsMap[k].codeConfig.common[kk].index) {
93
+ addRequire += option.initModelsMap[k].codeConfig.common[kk].index.require || ''
94
+ addFunc += option.initModelsMap[k].codeConfig.common[kk].index.func || ''
95
+ addFuncCall += option.initModelsMap[k].codeConfig.common[kk].index.funcCall || ''
96
+ addBeforeMount += option.initModelsMap[k].codeConfig.common[kk].index.beforeMount || ''
97
+ addCommon[kk] = true
98
+ }
99
+ }
100
+ }
101
+ }
102
+ let file = `
103
+ const sky = require('skybase')
104
+ const config = require('./config')
105
+ const Pack = require('./package.json')
106
+ ${addRequire}
107
+
108
+ /* global $ */
109
+
110
+ config.beforeMount = async () => {
111
+ ${addBeforeMount}
112
+ }
113
+
114
+ sky.start(config, async () => {
115
+ $.log('${option.name} 项目成功启动')
116
+ ${addFuncCall}
117
+ })
118
+
119
+ ${addFunc}
120
+ `
121
+ return file
122
+ }
123
+
124
+ // 获取默认配置
125
+ function getConfigDefault (option) {
126
+ let addFile = ''
127
+ let addCommon = {} // 判断公用配置不重复添加 commonModelName --- bool
128
+ for (let k in option.initModelsMap) {
129
+ if (option.initModelsMap[k].codeConfig) {
130
+ addFile += option.initModelsMap[k].codeConfig.config || '' // 独立配置增加,比如stat 需要连接单独的redis或mq队列等等
131
+ if (option.initModelsMap[k].codeConfig.common) { // 增加公用模块 所有项目一起使用 redis、mysql等等配置
132
+ for (let kk in option.initModelsMap[k].codeConfig.common) {
133
+ if (!addCommon[kk]) {
134
+ addFile += option.initModelsMap[k].codeConfig.common[kk].config || ''
135
+ addCommon[kk] = true
136
+ }
137
+ }
138
+ }
139
+ }
140
+ }
141
+
142
+ let file = `
143
+ const path = require('path')
144
+ const packageJson = require('../package')
145
+ module.exports = {
146
+ ${addFile}
147
+ name: packageJson.name,
148
+ port: 8080,
149
+ rootDir: path.join(__dirname, '../')
150
+ }`
151
+ return file
152
+ }
153
+
154
+ // 获取 config/index.js 文档
155
+ function getConfigIndex () {
156
+ let file = `
157
+ 'use strict'
158
+ let $ = require('meeko')
159
+ const envMap = {
160
+ dev: 'dev',
161
+ development: 'dev',
162
+ test: 'test',
163
+ 'local-test': 'local-test',
164
+ checkout: 'checkout', // 是另一个测试环境,当时运维没命好名
165
+ local: 'local',
166
+ production: 'prod',
167
+ prod: 'prod'
168
+ }
169
+
170
+ let env = process.env.NODE_ENV
171
+
172
+ // 有这个之后,启动时 node ./index.js local 即可指定环境
173
+ if (!env && process.argv[2]) {
174
+ env = process.argv[2]
175
+ }
176
+
177
+ env = envMap[env] || 'local'
178
+ const defConfig = require('./config.default')
179
+
180
+ let config = {}
181
+ try {
182
+ config = require('./config.' + env)
183
+ } catch (e) {
184
+ console.log('\x1b[2;31m' + \`【普通错误】\${env}配置文件缺失,将使用default配置\` + '\x1b[m')
185
+ }
186
+ $.option.logTime = 0
187
+ $.log(\` NODE_ENV:\${$.c.g(\` \${env} \`)}`)
188
+ module.exports = { ...defConfig, ...config }
189
+ `
190
+ return file
191
+ }
192
+
193
+ // 递归创建文档
194
+ async function outPutFile (dir, key, obj) {
195
+ try {
196
+ if (typeof obj === 'string') {
197
+ // console.log(`创建目录 ${dir}`)
198
+ await fs.mkdirSync(dir, { recursive: true })
199
+ if (obj.length > 0) {
200
+ await fs.writeFileSync(`${dir}/${key}`, obj)
201
+ }
202
+ return
203
+ }
204
+ for (let k in obj) {
205
+ outPutFile(key === '' ? dir : `${dir}/${key}`, k, obj[k])
206
+ }
207
+ } catch (e) {
208
+ console.error(e.stack)
209
+ }
210
+ }
211
+
212
+ function getRouterDemo () {
213
+ return `
214
+ const Mock = require('mockjs')
215
+
216
+ /* global $ */
217
+
218
+ module.exports = {
219
+ async haveController (ctx) {
220
+ ctx.ok({})
221
+ }
222
+ }`
223
+ }
224
+
225
+ function getModelApiDemo () {
226
+ return `
227
+ module.exports = {
228
+ __swagger__: {
229
+ name: 'mock数据接口',
230
+ description: 'mock数据接口 - http://mockjs.com/examples.html'
231
+ },
232
+ '/demo/noControllerNoMock': {
233
+ name: 'mock controller、mock 都没有',
234
+ desc: 'mock controller、mock 都没有',
235
+ method: 'get',
236
+ // controller: 'demo.noController',
237
+ param: {},
238
+ err_code: {
239
+ 200: {
240
+ temp: {
241
+ 'data': {},
242
+ 'code': 200,
243
+ 'msg': 'ok',
244
+ 't': 1552709427858
245
+ }
246
+ }
247
+ },
248
+ test: {},
249
+ 'token': false,
250
+ 'needSign': false,
251
+ 'front': true
252
+ },
253
+ '/demo/noController': {
254
+ name: 'mock 没有controller',
255
+ desc: 'mock 没有controller',
256
+ method: 'all',
257
+ // controller: 'demo.noController',
258
+ param: {},
259
+ mock: {
260
+ // 属性 list 的值是一个数组,其中含有 1 到 10 个元素
261
+ 'list|1-2': [{
262
+ // 属性 id 是一个自增数,起始值为 1,每次增 1
263
+ 'id|+1': 100,
264
+ 'id1|0-21': 100,
265
+ 'name': \`@genName\`,
266
+ str: \`@genData('abcdefghijklmnopqrstuvwxyz', 10)\`,
267
+ datetime: \`@genDatetime('2016-1-1', '2016-2-2')\`,
268
+ card: \`@genCard\`,
269
+ url: \`@genUrl(5)\`,
270
+ phoneNum: \`@genPhone\`,
271
+ color: \`@genColor\`,
272
+ colorRGBA: \`@genColor('rgba')\`,
273
+ ip: \`@genIp\`,
274
+ word: '@genWord(10)',
275
+ word0: '@genWord',
276
+ sentence: \`@genText(20)\`,
277
+ sentence20: \`@genText(20)\`,
278
+ sentence10: \`@genText(10)\`,
279
+ sentence0: \`@genText\`,
280
+ constellation: \`@genConstellation\`,
281
+ bool: \`@genBool\`,
282
+ genEnum1: \`@genEnum(['5', 6, 7])\`, // NOTICE key不能和函数名一样
283
+ genEnum0: \`@genEnum\`,
284
+ genEnum2: \`@genEnum(['5x', '6x', '7x'])\`,
285
+ genEnum3: \`@genEnum([[], null, ''])\`
286
+ }]
287
+ },
288
+ err_code: {
289
+ 200: {
290
+ temp: {
291
+ 'data': {},
292
+ 'code': 200,
293
+ 'msg': 'ok',
294
+ 't': 1552709427858
295
+ }
296
+ }
297
+ },
298
+ test: {},
299
+ 'token': false,
300
+ 'needSign': false,
301
+ 'front': true
302
+ },
303
+ '/demo/haveController': {
304
+ name: 'mock 有controller',
305
+ desc: 'mock 有controller',
306
+ method: 'get',
307
+ controller: 'demo.haveController',
308
+ param: {},
309
+ err_code: {
310
+ 200: {
311
+ temp: {
312
+ 'data': { },
313
+ 'code': 0,
314
+ 'msg': 'ok',
315
+ 't': 1559204889719
316
+ }
317
+ }
318
+ },
319
+ test: {},
320
+ 'token': false,
321
+ 'needSign': false,
322
+ 'front': true
323
+ }
324
+ }`
325
+ }