create-aomex 0.0.6 → 0.0.7
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.
- package/dist/index.js +2 -4
- package/dist/index.js.map +1 -1
- package/package.json +22 -23
- package/templates/package.json +1 -1
- package/templates/prisma/schema.prisma +4 -4
- package/templates/src/cli.ts +2 -13
- package/templates/src/commanders/hello.cmd.ts +1 -2
- package/templates/src/commanders/schedule.cmd.ts +1 -2
- package/templates/src/routers/index.router.ts +1 -1
- package/templates/src/routers/user.router.ts +2 -3
- package/templates/src/web.ts +15 -3
- package/templates/.env +0 -1
- package/templates/Dockerfile +0 -10
- package/templates/docker-local.yml +0 -18
- package/templates/scripts/docker-build.sh +0 -11
package/dist/index.js
CHANGED
|
@@ -32,7 +32,7 @@ if (existsSync(targetDir)) {
|
|
|
32
32
|
process.exit(1);
|
|
33
33
|
}
|
|
34
34
|
var nodeVersion = process.versions.node;
|
|
35
|
-
var packageManager = "
|
|
35
|
+
var packageManager = "pnpm";
|
|
36
36
|
for (const item of ["pnpm", "npm", "yarn"]) {
|
|
37
37
|
if (argv[item]) {
|
|
38
38
|
packageManager = item;
|
|
@@ -80,7 +80,6 @@ spinner.add({
|
|
|
80
80
|
await cp(templateDir, targetDir, { recursive: true });
|
|
81
81
|
await replaceVariables("package.json", variables);
|
|
82
82
|
await replaceVariables("README.md", variables);
|
|
83
|
-
await replaceVariables("Dockerfile", variables);
|
|
84
83
|
await sleep();
|
|
85
84
|
}
|
|
86
85
|
});
|
|
@@ -105,17 +104,16 @@ spinner.add({
|
|
|
105
104
|
pkgs: [
|
|
106
105
|
"@aomex/core",
|
|
107
106
|
"@aomex/web",
|
|
108
|
-
"@aomex/router",
|
|
109
107
|
"@aomex/cors",
|
|
110
108
|
"@aomex/etag",
|
|
111
109
|
"@aomex/compress",
|
|
112
110
|
"@aomex/http-logger",
|
|
113
111
|
"@aomex/response-time",
|
|
114
112
|
"@aomex/console",
|
|
115
|
-
"@aomex/commander",
|
|
116
113
|
"@aomex/cron",
|
|
117
114
|
"@aomex/helmet",
|
|
118
115
|
"@aomex/openapi",
|
|
116
|
+
"@aomex/swagger-ui",
|
|
119
117
|
"@aomex/async-trace",
|
|
120
118
|
"@prisma/client"
|
|
121
119
|
]
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/replace-variables.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport path from 'node:path/posix';\nimport yargsParser from 'yargs-parser';\nimport { existsSync } from 'node:fs';\nimport { cp, mkdir, rm } from 'node:fs/promises';\nimport { Listr } from 'listr2';\nimport { styleText } from 'node:util';\nimport { execSync, spawn } from 'node:child_process';\nimport { replaceVariables } from './replace-variables';\nimport kebabCase from 'lodash.kebabcase';\n\nconst argv = yargsParser(process.argv.slice(2));\nconst templateDir = path.join(import.meta.dirname, '..', 'templates');\n\nconst projectName = kebabCase(argv['project'] || 'my-aomex-project');\nconst targetDir = path.resolve(projectName);\nif (existsSync(targetDir)) {\n console.error(styleText('red', `目录 \"${targetDir}\" 已存在!`));\n process.exit(1);\n}\nconst nodeVersion = process.versions.node;\n\nlet packageManager = '
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/replace-variables.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport path from 'node:path/posix';\nimport yargsParser from 'yargs-parser';\nimport { existsSync } from 'node:fs';\nimport { cp, mkdir, rm } from 'node:fs/promises';\nimport { Listr } from 'listr2';\nimport { styleText } from 'node:util';\nimport { execSync, spawn } from 'node:child_process';\nimport { replaceVariables } from './replace-variables';\nimport kebabCase from 'lodash.kebabcase';\n\nconst argv = yargsParser(process.argv.slice(2));\nconst templateDir = path.join(import.meta.dirname, '..', 'templates');\n\nconst projectName = kebabCase(argv['project'] || 'my-aomex-project');\nconst targetDir = path.resolve(projectName);\nif (existsSync(targetDir)) {\n console.error(styleText('red', `目录 \"${targetDir}\" 已存在!`));\n process.exit(1);\n}\nconst nodeVersion = process.versions.node;\n\nlet packageManager = 'pnpm';\nfor (const item of <const>['pnpm', 'npm', 'yarn']) {\n if (argv[item]) {\n packageManager = item;\n break;\n }\n}\n\nconst runShell = async (command: string) => {\n await new Promise((resolve, reject) => {\n const stream = spawn(command, {\n cwd: process.cwd(),\n env: process.env,\n shell: true,\n });\n stream.on('close', resolve);\n stream.on('error', reject);\n });\n};\nconst sleep = () => new Promise((resolve) => setTimeout(resolve, 500));\n\nconst spinner = new Listr([]);\n\nspinner.add({\n title: '创建目录',\n task: async () => {\n if (existsSync(targetDir)) {\n await rm(targetDir, { recursive: true, force: true });\n }\n await mkdir(targetDir, { recursive: true });\n process.chdir(path.resolve(projectName));\n },\n});\n\nspinner.add({\n title: 'git初始化',\n task: async () => {\n await runShell('git init');\n await sleep();\n },\n});\n\nspinner.add({\n title: '复制模板文件',\n task: async () => {\n const variables = {\n projectName,\n packageManager,\n nodeVersion,\n };\n await cp(templateDir, targetDir, { recursive: true });\n await replaceVariables('package.json', variables);\n await replaceVariables('README.md', variables);\n await sleep();\n },\n});\n\nspinner.add({\n title: '增加volta配置',\n skip: async () => {\n return !/\\d\\.\\d/.test(execSync('volta -v', { encoding: 'utf8' }));\n },\n task: async () => {\n await runShell(`volta pin node@${nodeVersion}`);\n if (packageManager !== 'npm') {\n await runShell(`volta pin ${packageManager}`);\n }\n },\n});\n\nspinner.add({\n title: '安装插件',\n task: async (_, task) => {\n const packages: { label: string; pkgs: string[]; dev?: boolean }[] = [\n {\n label: 'dependencies',\n pkgs: [\n '@aomex/core',\n '@aomex/web',\n '@aomex/cors',\n '@aomex/etag',\n '@aomex/compress',\n '@aomex/http-logger',\n '@aomex/response-time',\n '@aomex/console',\n '@aomex/cron',\n '@aomex/helmet',\n '@aomex/openapi',\n '@aomex/swagger-ui',\n '@aomex/async-trace',\n '@prisma/client',\n ],\n },\n {\n label: 'dev dependencies',\n pkgs: [\n 'prisma',\n 'typescript',\n 'tsx',\n 'tsc-alias',\n '@types/node',\n 'husky',\n 'prettier',\n '@commitlint/cli',\n '@commitlint/config-conventional',\n 'eslint',\n '@typescript-eslint/eslint-plugin',\n '@typescript-eslint/parser',\n 'eslint-plugin-check-file',\n ],\n dev: true,\n },\n ];\n const action = packageManager === 'npm' ? 'install' : 'add';\n const devSuffix = packageManager === 'npm' ? '--save-dev' : '-D';\n\n for (let i = 0; i < packages.length; ++i) {\n const { pkgs, dev, label } = packages[i]!;\n task.title = '安装插件 ' + styleText('gray', label);\n await runShell(\n `${packageManager} ${action} ${pkgs.join(' ')} ${dev ? devSuffix : ''}`,\n );\n }\n task.title = '安装插件';\n },\n});\n\nspinner.add({\n title: '生成prisma客户端',\n task: async () => {\n await runShell('npx prisma generate');\n await sleep();\n },\n});\n\nawait spinner.run();\n\nconsole.log(\n '\\n项目创建成功:' +\n styleText(['blue', 'underline'], process.cwd()) +\n '\\n' +\n '启动项目可执行如下指令:' +\n '\\n\\n' +\n styleText('green', `cd ${projectName} && ${packageManager} start`) +\n '\\n',\n);\n","import { readFile, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\n\nexport const replaceVariables = async (\n filename: string,\n variables: Record<string, string>,\n) => {\n const packageJSONFile = path.resolve(filename);\n let packageContent = await readFile(packageJSONFile, 'utf8');\n Object.entries(variables).forEach(([key, value]) => {\n packageContent = packageContent.replaceAll(`{{${key}}}`, value);\n });\n await writeFile(packageJSONFile, packageContent);\n};\n"],"mappings":"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","names":["path","path"]}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-aomex",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.7",
|
|
4
4
|
"repository": "git@github.com:aomex/create-aomex.git",
|
|
5
5
|
"author": "geekact <fanwenhua1990@gmail.com>",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"scripts": {
|
|
9
|
-
"cli": "tsx src/index.ts --project=
|
|
9
|
+
"cli": "rm -rf abc && tsx src/index.ts --project=my-aomex",
|
|
10
10
|
"release": "release-it --ci",
|
|
11
11
|
"build": "tsup",
|
|
12
12
|
"prepublishOnly": "tsup"
|
|
@@ -36,28 +36,27 @@
|
|
|
36
36
|
"yargs-parser": "^21.1.1"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@aomex/async-trace": "^
|
|
40
|
-
"@aomex/
|
|
41
|
-
"@aomex/
|
|
42
|
-
"@aomex/
|
|
43
|
-
"@aomex/
|
|
44
|
-
"@aomex/
|
|
45
|
-
"@aomex/
|
|
46
|
-
"@aomex/
|
|
47
|
-
"@aomex/
|
|
48
|
-
"@aomex/
|
|
49
|
-
"@aomex/
|
|
50
|
-
"@aomex/
|
|
51
|
-
"@aomex/
|
|
52
|
-
"@
|
|
53
|
-
"@prisma/client": "^5.16.0",
|
|
39
|
+
"@aomex/async-trace": "^2.0.1",
|
|
40
|
+
"@aomex/compress": "^2.0.1",
|
|
41
|
+
"@aomex/console": "^2.0.1",
|
|
42
|
+
"@aomex/core": "^2.0.1",
|
|
43
|
+
"@aomex/cors": "^2.0.1",
|
|
44
|
+
"@aomex/cron": "^2.0.1",
|
|
45
|
+
"@aomex/etag": "^2.0.1",
|
|
46
|
+
"@aomex/helmet": "^2.0.1",
|
|
47
|
+
"@aomex/http-logger": "^2.0.1",
|
|
48
|
+
"@aomex/openapi": "^2.0.1",
|
|
49
|
+
"@aomex/response-time": "^2.0.1",
|
|
50
|
+
"@aomex/swagger-ui": "^2.0.1",
|
|
51
|
+
"@aomex/web": "^2.0.1",
|
|
52
|
+
"@prisma/client": "^5.17.0",
|
|
54
53
|
"@types/lodash.kebabcase": "^4.1.9",
|
|
55
|
-
"@types/node": "^20.14.
|
|
54
|
+
"@types/node": "^20.14.12",
|
|
56
55
|
"@types/yargs-parser": "^21.0.3",
|
|
57
|
-
"prisma": "^5.
|
|
58
|
-
"release-it": "^17.
|
|
59
|
-
"tsup": "^8.
|
|
60
|
-
"tsx": "^4.
|
|
61
|
-
"typescript": "^5.5.
|
|
56
|
+
"prisma": "^5.17.0",
|
|
57
|
+
"release-it": "^17.6.0",
|
|
58
|
+
"tsup": "^8.2.3",
|
|
59
|
+
"tsx": "^4.16.2",
|
|
60
|
+
"typescript": "^5.5.4"
|
|
62
61
|
}
|
|
63
62
|
}
|
package/templates/package.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"node": "{{nodeVersion}}"
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
|
-
"start": "
|
|
10
|
+
"start": "prisma generate && prisma db push && node --import tsx/esm --watch src/web.ts",
|
|
11
11
|
"build": "tsc && tsc-alias --resolve-full-paths",
|
|
12
12
|
"prepare": "npx husky",
|
|
13
13
|
"preinstall": "npx only-allow {{packageManager}}"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
datasource db {
|
|
2
|
-
provider = "
|
|
3
|
-
url =
|
|
2
|
+
provider = "sqlite"
|
|
3
|
+
url = "file:./sqlite.db"
|
|
4
4
|
relationMode = "prisma"
|
|
5
5
|
}
|
|
6
6
|
|
|
@@ -12,6 +12,6 @@ model User {
|
|
|
12
12
|
id Int @id @default(autoincrement())
|
|
13
13
|
name String
|
|
14
14
|
age Int
|
|
15
|
-
created_at DateTime @default(now())
|
|
16
|
-
updated_at DateTime @default(now()) @updatedAt
|
|
15
|
+
created_at DateTime @default(now())
|
|
16
|
+
updated_at DateTime @default(now()) @updatedAt()
|
|
17
17
|
}
|
package/templates/src/cli.ts
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import { ConsoleApp } from '@aomex/console';
|
|
2
|
-
import { commanders } from '@aomex/commander';
|
|
3
|
-
import { openapi } from '@aomex/openapi';
|
|
1
|
+
import { commanders, ConsoleApp } from '@aomex/console';
|
|
4
2
|
import { cron } from '@aomex/cron';
|
|
5
3
|
import { traceMiddleware } from '@aomex/async-trace';
|
|
6
4
|
|
|
@@ -9,18 +7,12 @@ const app = new ConsoleApp({
|
|
|
9
7
|
mount: [
|
|
10
8
|
cron({
|
|
11
9
|
path: './src/commanders',
|
|
12
|
-
// store:
|
|
10
|
+
// store: new Caching(),
|
|
13
11
|
}),
|
|
14
12
|
traceMiddleware('生命周期', async (record) => {
|
|
15
13
|
// 根据 record.delta 上报慢日志
|
|
16
14
|
// console.log(record);
|
|
17
15
|
}),
|
|
18
|
-
openapi({
|
|
19
|
-
routers: './src/routers',
|
|
20
|
-
docs: {
|
|
21
|
-
servers: [{ url: 'http://localhost:3000', description: 'Local' }],
|
|
22
|
-
},
|
|
23
|
-
}),
|
|
24
16
|
commanders('./src/commanders'),
|
|
25
17
|
],
|
|
26
18
|
});
|
|
@@ -39,6 +31,3 @@ declare module '@aomex/console' {
|
|
|
39
31
|
interface Props extends T {}
|
|
40
32
|
}
|
|
41
33
|
}
|
|
42
|
-
function traceMiddleware(arg0: string, arg1: (record: any) => Promise<void>): any {
|
|
43
|
-
throw new Error('Function not implemented.');
|
|
44
|
-
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { Router } from '@aomex/router';
|
|
2
1
|
import { services } from '../services';
|
|
3
|
-
import { body, params } from '@aomex/web';
|
|
2
|
+
import { body, params, Router } from '@aomex/web';
|
|
4
3
|
import { rule } from '@aomex/core';
|
|
5
4
|
|
|
6
5
|
export const router = new Router({
|
|
@@ -24,7 +23,7 @@ router.get('/:id', {
|
|
|
24
23
|
const { id } = ctx.params;
|
|
25
24
|
const user = await services.user.findById(id);
|
|
26
25
|
if (!user) {
|
|
27
|
-
ctx.throw(404, 'user not found');
|
|
26
|
+
return void ctx.throw(404, 'user not found');
|
|
28
27
|
}
|
|
29
28
|
ctx.send(user);
|
|
30
29
|
},
|
package/templates/src/web.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { WebApp } from '@aomex/web';
|
|
1
|
+
import { routers, WebApp } from '@aomex/web';
|
|
2
2
|
import { cors } from '@aomex/cors';
|
|
3
3
|
import { compress } from '@aomex/compress';
|
|
4
4
|
import { httpLogger } from '@aomex/http-logger';
|
|
5
5
|
import { etag } from '@aomex/etag';
|
|
6
|
-
import { routers } from '@aomex/router';
|
|
7
6
|
import { helmet } from '@aomex/helmet';
|
|
8
7
|
import { responseTime } from '@aomex/response-time';
|
|
9
8
|
import { traceMiddleware } from '@aomex/async-trace';
|
|
9
|
+
import { swaggerUI } from '@aomex/swagger-ui';
|
|
10
|
+
import { generateOpenapi } from '@aomex/openapi';
|
|
10
11
|
|
|
11
12
|
export const app = new WebApp({
|
|
12
13
|
locale: 'zh_CN',
|
|
@@ -18,9 +19,20 @@ export const app = new WebApp({
|
|
|
18
19
|
}),
|
|
19
20
|
cors(),
|
|
20
21
|
compress(),
|
|
21
|
-
httpLogger(),
|
|
22
22
|
etag(),
|
|
23
|
+
// 访问 http://localhost:3000/swagger 可以查看文档
|
|
24
|
+
swaggerUI({
|
|
25
|
+
openapi: () => {
|
|
26
|
+
return generateOpenapi({
|
|
27
|
+
routers: './src/routers',
|
|
28
|
+
docs: {
|
|
29
|
+
servers: [{ url: 'http://localhost:3000', description: 'Local' }],
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
},
|
|
33
|
+
}),
|
|
23
34
|
helmet(),
|
|
35
|
+
httpLogger(),
|
|
24
36
|
routers('./src/routers'),
|
|
25
37
|
],
|
|
26
38
|
});
|
package/templates/.env
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
DATABASE_URL="mysql://root:123456@localhost:3306/demo_db"
|
package/templates/Dockerfile
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
services:
|
|
2
|
-
mysql:
|
|
3
|
-
image: mysql:8
|
|
4
|
-
environment:
|
|
5
|
-
# 对应 .env 文件的配置
|
|
6
|
-
MYSQL_DATABASE: demo_db
|
|
7
|
-
MYSQL_ROOT_PASSWORD: 123456
|
|
8
|
-
volumes:
|
|
9
|
-
- ./volumes/mysql:/var/lib/mysql
|
|
10
|
-
ports:
|
|
11
|
-
- 3306:3306
|
|
12
|
-
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --explicit_defaults_for_timestamp=true
|
|
13
|
-
redis:
|
|
14
|
-
image: redis:7
|
|
15
|
-
volumes:
|
|
16
|
-
- ./volumes/redis:/data
|
|
17
|
-
ports:
|
|
18
|
-
- 6379:6379
|