@icebreakers/monorepo 3.1.18 → 3.2.0
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/README.md +9 -0
- package/dist/cli.cjs +43 -27
- package/dist/cli.mjs +33 -15
- package/dist/index.cjs +25 -6
- package/dist/index.d.cts +56 -37
- package/dist/index.d.mts +56 -37
- package/dist/index.mjs +2 -2
- package/dist/{upgrade-BlCigUlp.mjs → upgrade-CXX-ziub.mjs} +156 -175
- package/dist/{upgrade-DAoYVyhV.cjs → upgrade-DuK9YfNz.cjs} +160 -192
- package/package.json +6 -11
- package/resources/skills/icebreakers-monorepo-cli/SKILL.md +43 -0
- package/resources/skills/icebreakers-monorepo-cli/references/commands.md +75 -0
- package/resources/skills/icebreakers-monorepo-cli/references/config.md +63 -0
- package/resources/skills/icebreakers-monorepo-cli/references/templates.md +21 -0
- package/assets/.changeset/config.json +0 -16
- package/assets/.dockerignore +0 -44
- package/assets/.editorconfig +0 -12
- package/assets/.gitattributes +0 -218
- package/assets/.github/FUNDING.yml +0 -4
- package/assets/.github/ISSUE_TEMPLATE/bug_report.yml +0 -71
- package/assets/.github/ISSUE_TEMPLATE/config.yml +0 -17
- package/assets/.github/workflows/ci.yml +0 -62
- package/assets/.github/workflows/release.yml +0 -57
- package/assets/.husky/commit-msg +0 -4
- package/assets/.husky/pre-commit +0 -4
- package/assets/.vscode/extensions.json +0 -6
- package/assets/.vscode/settings.json +0 -172
- package/assets/CODE_OF_CONDUCT.md +0 -128
- package/assets/CONTRIBUTING.md +0 -3
- package/assets/Dockerfile +0 -27
- package/assets/SECURITY.md +0 -21
- package/assets/commitlint.config.ts +0 -3
- package/assets/eslint.config.js +0 -7
- package/assets/gitignore +0 -38
- package/assets/lint-staged.config.js +0 -11
- package/assets/monorepo.config.ts +0 -22
- package/assets/netlify.toml +0 -14
- package/assets/package.json +0 -88
- package/assets/pnpm-workspace.yaml +0 -10
- package/assets/renovate.json +0 -28
- package/assets/stylelint.config.js +0 -3
- package/assets/tsconfig.json +0 -51
- package/assets/turbo.json +0 -74
- package/assets/vitest.config.ts +0 -123
- package/templates/apps/cli/bin/index.js +0 -2
- package/templates/apps/cli/dev/index.ts +0 -2
- package/templates/apps/cli/gitignore +0 -2
- package/templates/apps/cli/package.json +0 -35
- package/templates/apps/cli/src/cli.ts +0 -4
- package/templates/apps/cli/src/index.ts +0 -15
- package/templates/apps/cli/tsconfig.json +0 -7
- package/templates/apps/cli/tsup.config.ts +0 -13
- package/templates/apps/client/eslint.config.js +0 -12
- package/templates/apps/client/gitignore +0 -28
- package/templates/apps/client/index.html +0 -13
- package/templates/apps/client/package.json +0 -52
- package/templates/apps/client/public/vite.svg +0 -1
- package/templates/apps/client/src/App.vue +0 -11
- package/templates/apps/client/src/main.ts +0 -16
- package/templates/apps/client/src/pages/index.vue +0 -357
- package/templates/apps/client/src/query-keys.ts +0 -4
- package/templates/apps/client/src/router/index.ts +0 -13
- package/templates/apps/client/src/stores/i18n.ts +0 -24
- package/templates/apps/client/src/stores/index.ts +0 -15
- package/templates/apps/client/src/style.css +0 -1
- package/templates/apps/client/src/trpc/index.ts +0 -10
- package/templates/apps/client/src/vite-env.d.ts +0 -2
- package/templates/apps/client/tsconfig.app.json +0 -28
- package/templates/apps/client/tsconfig.json +0 -8
- package/templates/apps/client/tsconfig.node.json +0 -25
- package/templates/apps/client/tsconfig.worker.json +0 -11
- package/templates/apps/client/vite.config.ts +0 -57
- package/templates/apps/client/worker/app.ts +0 -24
- package/templates/apps/client/worker/config.ts +0 -1
- package/templates/apps/client/worker/fetch-entry.ts +0 -5
- package/templates/apps/client/worker/node-entry.ts +0 -13
- package/templates/apps/client/worker/trpc-router.ts +0 -24
- package/templates/apps/client/wrangler.jsonc +0 -24
- package/templates/apps/server/gitignore +0 -2
- package/templates/apps/server/package.json +0 -60
- package/templates/apps/server/src/app.ts +0 -191
- package/templates/apps/server/src/config.ts +0 -1
- package/templates/apps/server/src/fetch-entry.ts +0 -5
- package/templates/apps/server/src/node-entry.ts +0 -13
- package/templates/apps/server/test/index.test.ts +0 -14
- package/templates/apps/server/tsconfig.json +0 -24
- package/templates/apps/server/tsup.config.ts +0 -13
- package/templates/apps/server/vitest.config.ts +0 -15
- package/templates/apps/server/wrangler.jsonc +0 -18
- package/templates/apps/website/.vitepress/config.ts +0 -93
- package/templates/apps/website/.vitepress/theme/index.ts +0 -4
- package/templates/apps/website/.vitepress/theme/tailwind.css +0 -1
- package/templates/apps/website/gitignore +0 -1
- package/templates/apps/website/index.md +0 -127
- package/templates/apps/website/monorepo/index.md +0 -46
- package/templates/apps/website/monorepo/manage.md +0 -126
- package/templates/apps/website/monorepo/publish.md +0 -142
- package/templates/apps/website/package.json +0 -39
- package/templates/apps/website/public/logo.jpg +0 -0
- package/templates/apps/website/thinking.md +0 -88
- package/templates/apps/website/tools/changeset.md +0 -87
- package/templates/apps/website/tools/husky.md +0 -108
- package/templates/apps/website/tools/lint-staged.md +0 -79
- package/templates/apps/website/tools/pnpm.md +0 -100
- package/templates/apps/website/tools/renovate.md +0 -91
- package/templates/apps/website/tools/turborepo.md +0 -149
- package/templates/apps/website/why/assets/npm-dt.svg +0 -15
- package/templates/apps/website/why/assets/npm-ts.svg +0 -19
- package/templates/apps/website/why/examples/0.npm-basic-package/index.js +0 -10
- package/templates/apps/website/why/examples/0.npm-basic-package/package.json +0 -11
- package/templates/apps/website/why/examples/1.npm-basic-package/index.cjs +0 -12
- package/templates/apps/website/why/examples/1.npm-basic-package/index.d.ts +0 -1
- package/templates/apps/website/why/examples/1.npm-basic-package/index.js +0 -8
- package/templates/apps/website/why/examples/1.npm-basic-package/package.json +0 -19
- package/templates/apps/website/why/examples/2.npm-basic-package/README.md +0 -1
- package/templates/apps/website/why/examples/2.npm-basic-package/package-lock.json +0 -30
- package/templates/apps/website/why/examples/2.npm-basic-package/package.json +0 -35
- package/templates/apps/website/why/examples/2.npm-basic-package/rename-ext.js +0 -24
- package/templates/apps/website/why/examples/2.npm-basic-package/src/index.ts +0 -8
- package/templates/apps/website/why/examples/2.npm-basic-package/tsconfig.cjs.json +0 -8
- package/templates/apps/website/why/examples/2.npm-basic-package/tsconfig.esm.json +0 -7
- package/templates/apps/website/why/examples/2.npm-basic-package/tsconfig.json +0 -18
- package/templates/apps/website/why/examples/3.npm-basic-package/README.md +0 -1
- package/templates/apps/website/why/examples/3.npm-basic-package/build.config.ts +0 -24
- package/templates/apps/website/why/examples/3.npm-basic-package/package-lock.json +0 -3661
- package/templates/apps/website/why/examples/3.npm-basic-package/package.json +0 -32
- package/templates/apps/website/why/examples/3.npm-basic-package/src/index.ts +0 -8
- package/templates/apps/website/why/examples/3.npm-basic-package/tsconfig.json +0 -16
- package/templates/apps/website/why/examples/3.npm-basic-package/tsup.config.ts +0 -16
- package/templates/apps/website/why/examples/usage-cjs/cjs.cjs +0 -4
- package/templates/apps/website/why/examples/usage-cjs/esm.mjs +0 -4
- package/templates/apps/website/why/examples/usage-cjs/index.js +0 -12
- package/templates/apps/website/why/examples/usage-cjs/package-lock.json +0 -42
- package/templates/apps/website/why/examples/usage-cjs/package.json +0 -20
- package/templates/apps/website/why/examples/usage-esm/cjs.cjs +0 -4
- package/templates/apps/website/why/examples/usage-esm/createRequire.js +0 -7
- package/templates/apps/website/why/examples/usage-esm/esm.mjs +0 -4
- package/templates/apps/website/why/examples/usage-esm/index.js +0 -8
- package/templates/apps/website/why/examples/usage-esm/package-lock.json +0 -42
- package/templates/apps/website/why/examples/usage-esm/package.json +0 -21
- package/templates/apps/website/why/how-to-reuse-js-code.md +0 -250
- package/templates/apps/website/why/index.md +0 -1
- package/templates/apps/website/why/js-cjs-mjs.md +0 -99
- package/templates/apps/website/why/js-keywords.md +0 -132
- package/templates/apps/website/why/modern/bundlers.md +0 -79
- package/templates/apps/website/why/modern/dts.md +0 -93
- package/templates/apps/website/why/modern/esm-vs-cjs.md +0 -84
- package/templates/apps/website/why/modern/index.md +0 -55
- package/templates/apps/website/why/modern/package-entry-points.md +0 -128
- package/templates/apps/website/why/modern/typescript.md +0 -155
- package/templates/apps/website/why/publish-basic-npm-package.md +0 -146
- package/templates/apps/website/why/what-is-npm-package.md +0 -162
- package/templates/packages/tsdown-template/package.json +0 -47
- package/templates/packages/tsdown-template/src/index.ts +0 -5
- package/templates/packages/tsdown-template/test/index.test.ts +0 -11
- package/templates/packages/tsdown-template/tsconfig.json +0 -15
- package/templates/packages/tsdown-template/tsdown.config.ts +0 -9
- package/templates/packages/tsdown-template/vitest.config.ts +0 -15
- package/templates/packages/tsup-template/build.config.ts +0 -24
- package/templates/packages/tsup-template/package.json +0 -48
- package/templates/packages/tsup-template/src/index.ts +0 -12
- package/templates/packages/tsup-template/test/index.test.ts +0 -18
- package/templates/packages/tsup-template/tsconfig.json +0 -15
- package/templates/packages/tsup-template/tsup.config.ts +0 -18
- package/templates/packages/tsup-template/vitest.config.ts +0 -15
- package/templates/packages/unbuild-template/build.config.ts +0 -24
- package/templates/packages/unbuild-template/package.json +0 -48
- package/templates/packages/unbuild-template/src/index.ts +0 -9
- package/templates/packages/unbuild-template/src/utils.ts +0 -3
- package/templates/packages/unbuild-template/test/index.test.ts +0 -18
- package/templates/packages/unbuild-template/tsconfig.json +0 -15
- package/templates/packages/unbuild-template/vitest.config.ts +0 -15
- package/templates/packages/vue-lib-template/eslint.config.js +0 -12
- package/templates/packages/vue-lib-template/gitignore +0 -1
- package/templates/packages/vue-lib-template/index.html +0 -13
- package/templates/packages/vue-lib-template/lib/HelloWorld.vue +0 -21
- package/templates/packages/vue-lib-template/lib/index.ts +0 -3
- package/templates/packages/vue-lib-template/package.json +0 -61
- package/templates/packages/vue-lib-template/src/App.vue +0 -9
- package/templates/packages/vue-lib-template/src/main.ts +0 -8
- package/templates/packages/vue-lib-template/src/pages/index.vue +0 -7
- package/templates/packages/vue-lib-template/src/router/index.ts +0 -11
- package/templates/packages/vue-lib-template/src/style.css +0 -1
- package/templates/packages/vue-lib-template/src/vite-env.d.ts +0 -2
- package/templates/packages/vue-lib-template/test/index.test.ts +0 -13
- package/templates/packages/vue-lib-template/tsconfig.app.json +0 -30
- package/templates/packages/vue-lib-template/tsconfig.json +0 -14
- package/templates/packages/vue-lib-template/tsconfig.node.json +0 -25
- package/templates/packages/vue-lib-template/tsconfig.test.json +0 -40
- package/templates/packages/vue-lib-template/vite.config.ts +0 -54
- package/templates/packages/vue-lib-template/vite.shared.config.ts +0 -13
- package/templates/packages/vue-lib-template/vitest.config.ts +0 -13
- /package/{assets/LICENSE → LICENSE} +0 -0
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@icebreakers/server",
|
|
3
|
-
"type": "module",
|
|
4
|
-
"version": "0.0.0",
|
|
5
|
-
"description": "tsup(esbuild) build package template",
|
|
6
|
-
"author": "ice breaker <1324318532@qq.com>",
|
|
7
|
-
"license": "MIT",
|
|
8
|
-
"repository": {
|
|
9
|
-
"type": "git",
|
|
10
|
-
"url": "git+https://github.com/sonofmagic/monorepo-template.git",
|
|
11
|
-
"directory": "apps/server"
|
|
12
|
-
},
|
|
13
|
-
"bugs": {
|
|
14
|
-
"url": "https://github.com/sonofmagic/monorepo-template/issues"
|
|
15
|
-
},
|
|
16
|
-
"keywords": [],
|
|
17
|
-
"sideEffects": false,
|
|
18
|
-
"exports": {
|
|
19
|
-
".": "./src/index.ts",
|
|
20
|
-
"./router": "./src/trpc-router.ts",
|
|
21
|
-
"./config": "./src/config.ts"
|
|
22
|
-
},
|
|
23
|
-
"files": [
|
|
24
|
-
"dist"
|
|
25
|
-
],
|
|
26
|
-
"scripts": {
|
|
27
|
-
"dev": "wrangler dev",
|
|
28
|
-
"node:build:watch": "tsup --watch --sourcemap",
|
|
29
|
-
"node:build": "tsup",
|
|
30
|
-
"node:dev": "tsx watch src/node-entry.ts",
|
|
31
|
-
"node:start": "node dist/node-entry.js",
|
|
32
|
-
"test": "vitest run",
|
|
33
|
-
"test:dev": "vitest",
|
|
34
|
-
"release": "pnpm publish",
|
|
35
|
-
"lint": "eslint .",
|
|
36
|
-
"lint:fix": "eslint . --fix",
|
|
37
|
-
"deploy": "wrangler deploy",
|
|
38
|
-
"cf-typegen": "wrangler types",
|
|
39
|
-
"postinstall": "pnpm cf-typegen"
|
|
40
|
-
},
|
|
41
|
-
"publishConfig": {
|
|
42
|
-
"exports": {
|
|
43
|
-
".": {
|
|
44
|
-
"types": "./dist/index.d.ts",
|
|
45
|
-
"import": "./dist/index.js",
|
|
46
|
-
"require": "./dist/index.cjs"
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
"main": "./dist/index.cjs",
|
|
50
|
-
"module": "./dist/index.js",
|
|
51
|
-
"types": "./dist/index.d.ts"
|
|
52
|
-
},
|
|
53
|
-
"devDependencies": {
|
|
54
|
-
"@hono/node-server": "^1.19.9",
|
|
55
|
-
"consola": "^3.4.2",
|
|
56
|
-
"hono": "^4.11.4",
|
|
57
|
-
"wrangler": "^4.59.1",
|
|
58
|
-
"zod": "^4.3.5"
|
|
59
|
-
}
|
|
60
|
-
}
|
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
import { Hono } from 'hono'
|
|
2
|
-
|
|
3
|
-
interface ColorStop { color: string, position: number }
|
|
4
|
-
|
|
5
|
-
const grads: ColorStop[][] = [
|
|
6
|
-
[
|
|
7
|
-
{ color: '00000c', position: 0 },
|
|
8
|
-
{ color: '00000c', position: 0 },
|
|
9
|
-
],
|
|
10
|
-
[
|
|
11
|
-
{ color: '020111', position: 85 },
|
|
12
|
-
{ color: '191621', position: 100 },
|
|
13
|
-
],
|
|
14
|
-
[
|
|
15
|
-
{ color: '020111', position: 60 },
|
|
16
|
-
{ color: '20202c', position: 100 },
|
|
17
|
-
],
|
|
18
|
-
[
|
|
19
|
-
{ color: '020111', position: 10 },
|
|
20
|
-
{ color: '3a3a52', position: 100 },
|
|
21
|
-
],
|
|
22
|
-
[
|
|
23
|
-
{ color: '20202c', position: 0 },
|
|
24
|
-
{ color: '515175', position: 100 },
|
|
25
|
-
],
|
|
26
|
-
[
|
|
27
|
-
{ color: '40405c', position: 0 },
|
|
28
|
-
{ color: '6f71aa', position: 80 },
|
|
29
|
-
{ color: '8a76ab', position: 100 },
|
|
30
|
-
],
|
|
31
|
-
[
|
|
32
|
-
{ color: '4a4969', position: 0 },
|
|
33
|
-
{ color: '7072ab', position: 50 },
|
|
34
|
-
{ color: 'cd82a0', position: 100 },
|
|
35
|
-
],
|
|
36
|
-
[
|
|
37
|
-
{ color: '757abf', position: 0 },
|
|
38
|
-
{ color: '8583be', position: 60 },
|
|
39
|
-
{ color: 'eab0d1', position: 100 },
|
|
40
|
-
],
|
|
41
|
-
[
|
|
42
|
-
{ color: '82addb', position: 0 },
|
|
43
|
-
{ color: 'ebb2b1', position: 100 },
|
|
44
|
-
],
|
|
45
|
-
[
|
|
46
|
-
{ color: '94c5f8', position: 1 },
|
|
47
|
-
{ color: 'a6e6ff', position: 70 },
|
|
48
|
-
{ color: 'b1b5ea', position: 100 },
|
|
49
|
-
],
|
|
50
|
-
[
|
|
51
|
-
{ color: 'b7eaff', position: 0 },
|
|
52
|
-
{ color: '94dfff', position: 100 },
|
|
53
|
-
],
|
|
54
|
-
[
|
|
55
|
-
{ color: '9be2fe', position: 0 },
|
|
56
|
-
{ color: '67d1fb', position: 100 },
|
|
57
|
-
],
|
|
58
|
-
[
|
|
59
|
-
{ color: '90dffe', position: 0 },
|
|
60
|
-
{ color: '38a3d1', position: 100 },
|
|
61
|
-
],
|
|
62
|
-
[
|
|
63
|
-
{ color: '57c1eb', position: 0 },
|
|
64
|
-
{ color: '246fa8', position: 100 },
|
|
65
|
-
],
|
|
66
|
-
[
|
|
67
|
-
{ color: '2d91c2', position: 0 },
|
|
68
|
-
{ color: '1e528e', position: 100 },
|
|
69
|
-
],
|
|
70
|
-
[
|
|
71
|
-
{ color: '2473ab', position: 0 },
|
|
72
|
-
{ color: '1e528e', position: 70 },
|
|
73
|
-
{ color: '5b7983', position: 100 },
|
|
74
|
-
],
|
|
75
|
-
[
|
|
76
|
-
{ color: '1e528e', position: 0 },
|
|
77
|
-
{ color: '265889', position: 50 },
|
|
78
|
-
{ color: '9da671', position: 100 },
|
|
79
|
-
],
|
|
80
|
-
[
|
|
81
|
-
{ color: '1e528e', position: 0 },
|
|
82
|
-
{ color: '728a7c', position: 50 },
|
|
83
|
-
{ color: 'e9ce5d', position: 100 },
|
|
84
|
-
],
|
|
85
|
-
[
|
|
86
|
-
{ color: '154277', position: 0 },
|
|
87
|
-
{ color: '576e71', position: 30 },
|
|
88
|
-
{ color: 'e1c45e', position: 70 },
|
|
89
|
-
{ color: 'b26339', position: 100 },
|
|
90
|
-
],
|
|
91
|
-
[
|
|
92
|
-
{ color: '163C52', position: 0 },
|
|
93
|
-
{ color: '4F4F47', position: 30 },
|
|
94
|
-
{ color: 'C5752D', position: 60 },
|
|
95
|
-
{ color: 'B7490F', position: 80 },
|
|
96
|
-
{ color: '2F1107', position: 100 },
|
|
97
|
-
],
|
|
98
|
-
[
|
|
99
|
-
{ color: '071B26', position: 0 },
|
|
100
|
-
{ color: '071B26', position: 30 },
|
|
101
|
-
{ color: '8A3B12', position: 80 },
|
|
102
|
-
{ color: '240E03', position: 100 },
|
|
103
|
-
],
|
|
104
|
-
[
|
|
105
|
-
{ color: '010A10', position: 30 },
|
|
106
|
-
{ color: '59230B', position: 80 },
|
|
107
|
-
{ color: '2F1107', position: 100 },
|
|
108
|
-
],
|
|
109
|
-
[
|
|
110
|
-
{ color: '090401', position: 50 },
|
|
111
|
-
{ color: '4B1D06', position: 100 },
|
|
112
|
-
],
|
|
113
|
-
[
|
|
114
|
-
{ color: '00000c', position: 80 },
|
|
115
|
-
{ color: '150800', position: 100 },
|
|
116
|
-
],
|
|
117
|
-
]
|
|
118
|
-
|
|
119
|
-
// Convert hour to CSS gradient
|
|
120
|
-
async function toCSSGradient(hour: number): Promise<string> {
|
|
121
|
-
let css = 'linear-gradient(to bottom,'
|
|
122
|
-
const data = grads[hour]
|
|
123
|
-
const len = data.length
|
|
124
|
-
|
|
125
|
-
for (let i = 0; i < len; i++) {
|
|
126
|
-
const item = data[i]
|
|
127
|
-
css += ` #${item.color} ${item.position}%`
|
|
128
|
-
if (i < len - 1) {
|
|
129
|
-
css += ','
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
return `${css})`
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
const app = new Hono()
|
|
137
|
-
|
|
138
|
-
app.get('*', async (c) => {
|
|
139
|
-
const request = c.req.raw
|
|
140
|
-
|
|
141
|
-
// Base HTML style
|
|
142
|
-
let html_style = `
|
|
143
|
-
html{width:100vw; height:100vh;}
|
|
144
|
-
body{padding:0; margin:0 !important;height:100%;}
|
|
145
|
-
#container {
|
|
146
|
-
display: flex;
|
|
147
|
-
flex-direction:column;
|
|
148
|
-
align-items: center;
|
|
149
|
-
justify-content: center;
|
|
150
|
-
height: 100%;
|
|
151
|
-
color:white;
|
|
152
|
-
font-family:sans-serif;
|
|
153
|
-
}`
|
|
154
|
-
|
|
155
|
-
// Get timezone from Cloudflare request
|
|
156
|
-
const timezone: string = request.cf?.timezone as string || 'UTC'
|
|
157
|
-
|
|
158
|
-
// Get localized time
|
|
159
|
-
const localized_date = new Date(
|
|
160
|
-
new Date().toLocaleString('en-US', { timeZone: timezone }),
|
|
161
|
-
)
|
|
162
|
-
|
|
163
|
-
const hour = localized_date.getHours()
|
|
164
|
-
const minutes = localized_date.getMinutes()
|
|
165
|
-
|
|
166
|
-
// Generate HTML content
|
|
167
|
-
let html_content = `<h1>${hour}:${minutes}</h1>`
|
|
168
|
-
html_content += `<p>${timezone}<br/></p>`
|
|
169
|
-
|
|
170
|
-
// Add background gradient based on hour
|
|
171
|
-
html_style += `body{background:${await toCSSGradient(hour)};}`
|
|
172
|
-
|
|
173
|
-
// Complete HTML document
|
|
174
|
-
const html = `
|
|
175
|
-
<!DOCTYPE html>
|
|
176
|
-
<head>
|
|
177
|
-
<title>Geolocation: Customized Design</title>
|
|
178
|
-
</head>
|
|
179
|
-
<body>
|
|
180
|
-
<style>${html_style}</style>
|
|
181
|
-
<div id="container">
|
|
182
|
-
${html_content}
|
|
183
|
-
</div>
|
|
184
|
-
</body>`
|
|
185
|
-
|
|
186
|
-
return c.html(html)
|
|
187
|
-
})
|
|
188
|
-
|
|
189
|
-
export {
|
|
190
|
-
app,
|
|
191
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export const port = 8787
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { serve } from '@hono/node-server'
|
|
2
|
-
import { consola } from 'consola'
|
|
3
|
-
import { logger } from 'hono/logger'
|
|
4
|
-
import { app } from './app'
|
|
5
|
-
import { port } from './config'
|
|
6
|
-
|
|
7
|
-
app.use(logger())
|
|
8
|
-
serve({
|
|
9
|
-
fetch: app.fetch,
|
|
10
|
-
port,
|
|
11
|
-
})
|
|
12
|
-
|
|
13
|
-
consola.success(`Server listening on http://localhost:${port}`)
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { Hono } from 'hono'
|
|
2
|
-
import { testClient } from 'hono/testing'
|
|
3
|
-
|
|
4
|
-
describe('index', () => {
|
|
5
|
-
it('foo bar', async () => {
|
|
6
|
-
const app = new Hono().get('/search', c =>
|
|
7
|
-
c.json({ hello: 'world' }))
|
|
8
|
-
const res = await testClient(app).search.$get()
|
|
9
|
-
|
|
10
|
-
expect(await res.json()).toEqual({ hello: 'world' })
|
|
11
|
-
|
|
12
|
-
// expect(await res.json()).toEqual({ hello: 'world' })
|
|
13
|
-
})
|
|
14
|
-
})
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "../../tsconfig.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"lib": [
|
|
5
|
-
"ES2022",
|
|
6
|
-
"WebWorker"
|
|
7
|
-
],
|
|
8
|
-
"baseUrl": ".",
|
|
9
|
-
"paths": {
|
|
10
|
-
"@/*": [
|
|
11
|
-
"src/*"
|
|
12
|
-
]
|
|
13
|
-
},
|
|
14
|
-
"types": [
|
|
15
|
-
"node",
|
|
16
|
-
"vitest/globals",
|
|
17
|
-
"./worker-configuration.d.ts"
|
|
18
|
-
]
|
|
19
|
-
},
|
|
20
|
-
"include": [
|
|
21
|
-
"src",
|
|
22
|
-
"test"
|
|
23
|
-
]
|
|
24
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { defineConfig } from 'tsup'
|
|
2
|
-
|
|
3
|
-
export default defineConfig({
|
|
4
|
-
entry: ['src/node-entry.ts'], // , 'src/cli.ts'],
|
|
5
|
-
shims: true,
|
|
6
|
-
format: ['esm'],
|
|
7
|
-
clean: true,
|
|
8
|
-
dts: false,
|
|
9
|
-
// https://github.com/egoist/tsup/pull/1056
|
|
10
|
-
// https://github.com/egoist/tsup/issues?q=cjsInterop
|
|
11
|
-
// cjsInterop: true,
|
|
12
|
-
// splitting: true,
|
|
13
|
-
})
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import path from 'node:path'
|
|
2
|
-
import { defineProject } from 'vitest/config'
|
|
3
|
-
|
|
4
|
-
export default defineProject({
|
|
5
|
-
test: {
|
|
6
|
-
alias: [
|
|
7
|
-
{
|
|
8
|
-
find: '@',
|
|
9
|
-
replacement: path.resolve(__dirname, './src'),
|
|
10
|
-
},
|
|
11
|
-
],
|
|
12
|
-
globals: true,
|
|
13
|
-
testTimeout: 60_000,
|
|
14
|
-
},
|
|
15
|
-
})
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "./node_modules/wrangler/config-schema.json",
|
|
3
|
-
"name": "monorepo-service",
|
|
4
|
-
"compatibility_date": "2025-10-16",
|
|
5
|
-
"main": "./src/fetch-entry.ts",
|
|
6
|
-
"dev": {
|
|
7
|
-
"port": 8787
|
|
8
|
-
},
|
|
9
|
-
"routes": [
|
|
10
|
-
{
|
|
11
|
-
"custom_domain": true,
|
|
12
|
-
"pattern": "sls.monorepo.icebreaker.top"
|
|
13
|
-
}
|
|
14
|
-
],
|
|
15
|
-
"observability": {
|
|
16
|
-
"enabled": true
|
|
17
|
-
}
|
|
18
|
-
}
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import Tailwindcss from '@tailwindcss/vite'
|
|
2
|
-
import { defineConfig } from 'vitepress'
|
|
3
|
-
import { withMermaid } from 'vitepress-plugin-mermaid'
|
|
4
|
-
// https://vitepress.dev/reference/site-config
|
|
5
|
-
export default withMermaid(defineConfig({
|
|
6
|
-
outDir: '../../dist',
|
|
7
|
-
title: 'icebreaker\'s monorepo',
|
|
8
|
-
description: 'icebreaker\'s monorepo. upgrade your monorepo',
|
|
9
|
-
themeConfig: {
|
|
10
|
-
// https://vitepress.dev/reference/default-theme-config
|
|
11
|
-
nav: [
|
|
12
|
-
{ text: '使用手册', link: '/' },
|
|
13
|
-
{ text: '一些思考', link: '/thinking' },
|
|
14
|
-
],
|
|
15
|
-
socialLinks: [
|
|
16
|
-
{ icon: 'github', link: 'https://github.com/sonofmagic/monorepo-template' },
|
|
17
|
-
],
|
|
18
|
-
outline: {
|
|
19
|
-
label: '目录',
|
|
20
|
-
level: [2, 3],
|
|
21
|
-
},
|
|
22
|
-
logo: '/logo.jpg',
|
|
23
|
-
sidebar: {
|
|
24
|
-
'/': [
|
|
25
|
-
{ text: '使用手册', link: '/' },
|
|
26
|
-
{ text: '一些思考', link: 'thinking' },
|
|
27
|
-
{
|
|
28
|
-
text: 'npm 发包',
|
|
29
|
-
base: '/why/',
|
|
30
|
-
items: [
|
|
31
|
-
{ text: '如何复用 js 代码', link: '/how-to-reuse-js-code' },
|
|
32
|
-
{ text: 'JS 文件的各种后缀', link: '/js-cjs-mjs' },
|
|
33
|
-
{ text: 'CJS和ESM关键字/全局变量对比', link: '/js-keywords' },
|
|
34
|
-
{ text: '什么是 npm 包', link: '/what-is-npm-package' },
|
|
35
|
-
{ text: '如何发布 npm 包', link: '/publish-basic-npm-package' },
|
|
36
|
-
{
|
|
37
|
-
text: '改进并发布现代 npm 包',
|
|
38
|
-
link: 'index',
|
|
39
|
-
base: 'why/modern/',
|
|
40
|
-
items: [
|
|
41
|
-
{ text: 'package entry points 字段', link: '/package-entry-points' },
|
|
42
|
-
{ text: '添加 DTS', link: '/dts' },
|
|
43
|
-
{ text: 'ESM vs CJS', link: '/esm-vs-cjs' },
|
|
44
|
-
{ text: '使用 TypeScript', link: '/typescript' },
|
|
45
|
-
{ text: '使用打包器', link: '/bundlers' },
|
|
46
|
-
],
|
|
47
|
-
},
|
|
48
|
-
],
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
text: 'Monorepo',
|
|
52
|
-
base: '/monorepo/',
|
|
53
|
-
items: [
|
|
54
|
-
{ text: '为什么往 monorepo 方向演进', link: '/' },
|
|
55
|
-
{ text: '如何管理 monorepo', link: '/manage' },
|
|
56
|
-
{ text: 'monorepo 发包生成变更日志', link: '/publish' },
|
|
57
|
-
],
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
text: '相关的工具',
|
|
61
|
-
base: '/tools/',
|
|
62
|
-
items: [
|
|
63
|
-
{ text: 'pnpm', link: '/pnpm' },
|
|
64
|
-
{ text: 'turborepo', link: '/turborepo' },
|
|
65
|
-
{ text: 'changeset', link: '/changeset' },
|
|
66
|
-
{ text: 'husky', link: '/husky' },
|
|
67
|
-
{ text: 'lint-staged', link: '/lint-staged' },
|
|
68
|
-
{ text: 'renovate', link: '/renovate' },
|
|
69
|
-
],
|
|
70
|
-
},
|
|
71
|
-
],
|
|
72
|
-
},
|
|
73
|
-
editLink: {
|
|
74
|
-
pattern: 'https://github.com/sonofmagic/monorepo-template/edit/main/apps/website/:path',
|
|
75
|
-
text: '为此页提供修改建议',
|
|
76
|
-
},
|
|
77
|
-
},
|
|
78
|
-
vite: {
|
|
79
|
-
plugins: [
|
|
80
|
-
// @ts-ignore
|
|
81
|
-
Tailwindcss(),
|
|
82
|
-
],
|
|
83
|
-
// server: {
|
|
84
|
-
// hmr: {
|
|
85
|
-
// overlay: false,
|
|
86
|
-
// },
|
|
87
|
-
// },
|
|
88
|
-
},
|
|
89
|
-
mermaid: {
|
|
90
|
-
|
|
91
|
-
},
|
|
92
|
-
}),
|
|
93
|
-
)
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
@import 'tailwindcss';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.vitepress/cache
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
layout: doc
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# icebreaker's monorepo 模板
|
|
6
|
-
|
|
7
|
-
整套模板围绕 **pnpm + Turborepo + TypeScript** 打造,帮助团队快速落地一个可维护、可编排、可持续迭代的 `monorepo` 工程。这里我们把使用方式拆成几个核心模块,方便你按需查阅。
|
|
8
|
-
|
|
9
|
-
## 核心能力
|
|
10
|
-
|
|
11
|
-
- **工作区管理**:`pnpm` workspace + Turborepo 任务编排,内置缓存和过滤能力。
|
|
12
|
-
- **全链路 TypeScript**:所有模板(应用、类库、CLI)均使用 TS,并自带基础测试脚手架(`vitest`)。
|
|
13
|
-
- **质量与规范**:集成 `eslint`、`stylelint`、`husky`、`commitlint`、`lint-staged`,开箱即用。
|
|
14
|
-
- **自动化发布**:`changesets` + GitHub Actions + Dockerfile 模板,实现语义化发版和部署。
|
|
15
|
-
- **命令行助手**:`@icebreakers/monorepo` CLI 提供创建、同步、升级、镜像等常用命令,可通过 `monorepo.config.ts` 自定义行为。
|
|
16
|
-
|
|
17
|
-
## 快速上手
|
|
18
|
-
|
|
19
|
-
1. **拉取模板**:[GitHub](https://github.com/sonofmagic/monorepo-template) 右上角 `Use this template`,或克隆源码。
|
|
20
|
-
2. **安装依赖**:在 `pnpm-workspace.yaml` 所在目录执行 `pnpm install`(需要 Node.js ≥ 20,推荐 `npm i -g pnpm`)。
|
|
21
|
-
3. **可选清理**:直接运行 `npx -y @icebreakers/monorepo@latest clean` 远程执行清理,移除演示包后再执行 `pnpm install`(避免依赖本地构建 `monorepo`);如已安装依赖,也可使用 `pnpm script:clean`。
|
|
22
|
-
4. **初始化元数据**:`pnpm script:init` 会批量更新 `package.json`、`README.md` 等公共信息。
|
|
23
|
-
|
|
24
|
-
## 仓库结构速览
|
|
25
|
-
|
|
26
|
-
| 目录 | 描述 |
|
|
27
|
-
| --------------------------- | -------------------------------- |
|
|
28
|
-
| `apps/cli` | TypeScript 编写的 CLI 模板 |
|
|
29
|
-
| `apps/client` | Vue 3 + Vite 客户端示例 |
|
|
30
|
-
| `apps/server` | 基于 Hono 的服务端模板 |
|
|
31
|
-
| `apps/website` | VitePress 文档站(即本网站源码) |
|
|
32
|
-
| `packages/tsup-template` | 使用 `tsup` 打包的库模板 |
|
|
33
|
-
| `packages/unbuild-template` | 使用 `unbuild` 打包的库模板 |
|
|
34
|
-
| `packages/vue-lib-template` | Vue 组件库模板 |
|
|
35
|
-
| `packages/monorepo` | CLI 及配置同步工具,支持独立升级 |
|
|
36
|
-
|
|
37
|
-
## 常用脚本
|
|
38
|
-
|
|
39
|
-
| 命令 | 说明 |
|
|
40
|
-
| -------------------- | --------------------------------------------------- |
|
|
41
|
-
| `pnpm script:clean` | 清理演示仓库,保留最小模板 |
|
|
42
|
-
| `pnpm script:init` | 同步初始化 `package.json`、`README.md` 等基础信息 |
|
|
43
|
-
| `pnpm script:sync` | 使用 `cnpm` 同步所有包到 npmmirror(需预装 `cnpm`) |
|
|
44
|
-
| `pnpm script:mirror` | 为 VS Code 终端写入国内镜像环境变量 |
|
|
45
|
-
|
|
46
|
-
更多脚本可在根目录 `package.json` 中查看,命令介绍详见 [工具区](./tools/turborepo.md)。
|
|
47
|
-
|
|
48
|
-
## CLI 命令概览
|
|
49
|
-
|
|
50
|
-
```bash
|
|
51
|
-
npx monorepo new # 创建子包/应用
|
|
52
|
-
npx -y @icebreakers/monorepo@latest clean # 远程清理已勾选的子项目,避免依赖本地构建
|
|
53
|
-
npx monorepo sync # 同步所有包到 npmmirror
|
|
54
|
-
npx monorepo mirror # 写入 VS Code 镜像配置
|
|
55
|
-
npx monorepo up # 从最新模板同步配置文件
|
|
56
|
-
npx monorepo ai create # 生成 Agentic 任务提示词模板(支持输出到文件,可用别名 ai new)
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
示例:`npx monorepo ai create -o agentic-task.md -f`,可直接生成 Markdown 模板并覆盖旧文件。默认会写入 `agentic/prompts/<timestamp>/prompt.md`,同时生成一个按时间排序的目录,并会提示你确认或修改目录名称,方便后续补充图片等素材;也可以用别名 `npx monorepo ai new`.
|
|
60
|
-
|
|
61
|
-
多文件场景:
|
|
62
|
-
|
|
63
|
-
- `npx monorepo ai create --name checkout` 自动落盘到 `agentic/prompts/checkout.md`(默认目录可改)。
|
|
64
|
-
- `npx monorepo ai create --tasks agentic/tasks.json -f` 读取 JSON 数组批量生成,适合多人协作收口任务。
|
|
65
|
-
|
|
66
|
-
所有命令都支持在 `monorepo.config.ts` 中覆写默认行为,例如新增模板、修改同步命令、跳过 README 初始化等。配置示例见下文和 [配置中心说明](./monorepo/manage.md#使用-monorepo-configts-定制命令行为)。
|
|
67
|
-
|
|
68
|
-
## 自定义配置:`monorepo.config.ts`
|
|
69
|
-
|
|
70
|
-
```ts
|
|
71
|
-
import { defineMonorepoConfig } from '@icebreakers/monorepo'
|
|
72
|
-
|
|
73
|
-
export default defineMonorepoConfig({
|
|
74
|
-
commands: {
|
|
75
|
-
ai: {
|
|
76
|
-
baseDir: 'agentic/custom-prompts',
|
|
77
|
-
format: 'json',
|
|
78
|
-
force: true,
|
|
79
|
-
tasksFile: 'agentic/tasks.json',
|
|
80
|
-
},
|
|
81
|
-
create: {
|
|
82
|
-
defaultTemplate: 'cli',
|
|
83
|
-
renameJson: true,
|
|
84
|
-
},
|
|
85
|
-
clean: {
|
|
86
|
-
autoConfirm: true,
|
|
87
|
-
ignorePackages: ['docs'],
|
|
88
|
-
},
|
|
89
|
-
upgrade: {
|
|
90
|
-
skipOverwrite: true,
|
|
91
|
-
targets: ['.github', 'monorepo.config.ts'],
|
|
92
|
-
},
|
|
93
|
-
},
|
|
94
|
-
})
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
更多可配置项详见 [管理指南](./monorepo/manage.md)。
|
|
98
|
-
|
|
99
|
-
## 依赖与版本升级
|
|
100
|
-
|
|
101
|
-
```bash
|
|
102
|
-
pnpm up -rLi
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
- `-r`:递归遍历所有 workspace
|
|
106
|
-
- `-L`:升级到最新版本
|
|
107
|
-
- `-i`:交互式选择(推荐查看差异后再确认)
|
|
108
|
-
|
|
109
|
-
## 自动化发布
|
|
110
|
-
|
|
111
|
-
模板默认集成 [`changesets`](https://github.com/changesets/changesets) 与推荐的 GitHub Actions 工作流:
|
|
112
|
-
|
|
113
|
-
1. 安装 [changeset-bot](https://github.com/apps/changeset-bot)。
|
|
114
|
-
2. 在仓库设置中开启 `Actions` 的 `Read and write permissions` 并勾选允许创建 PR。
|
|
115
|
-
3. 在 `Repository secrets` 中配置 `NPM_TOKEN`(若需要 Codecov 也可配置 `CODECOV_TOKEN`)。
|
|
116
|
-
4. 运行 `pnpm changeset`、`pnpm changeset version`、`pnpm changeset publish` 完成发布;或交由 CI 自动执行。
|
|
117
|
-
|
|
118
|
-
具体操作指南参见 [发包流程](./monorepo/publish.md)。
|
|
119
|
-
|
|
120
|
-
## 更多资源
|
|
121
|
-
|
|
122
|
-
- [为什么选择 monorepo?](./monorepo/index.md)
|
|
123
|
-
- [pnpm workspaces 与 Turborepo 组合的优势](./monorepo/manage.md)
|
|
124
|
-
- [工具链介绍](./tools/turborepo.md)
|
|
125
|
-
- [常见思考与 FAQ](./thinking.md)
|
|
126
|
-
|
|
127
|
-
> 欢迎结合自己的业务场景对模板做进一步裁剪与扩展,建议在自定义后保留 `monorepo.config.ts` 以便集中管理命令默认值。
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
# 为什么选择 Monorepo?
|
|
2
|
-
|
|
3
|
-
随着项目复杂度提升,Node.js 团队越来越倾向于把多套服务、组件库、CLI 工具放在同一个仓库里。Monorepo 的核心价值在于 **集中管理依赖与流程**,从而让重构、协作、发布都更高效。
|
|
4
|
-
|
|
5
|
-
## Monorepo 的主要收益
|
|
6
|
-
|
|
7
|
-
| 维度 | 收益 |
|
|
8
|
-
| -------- | ------------------------------------------------------------------ |
|
|
9
|
-
| 依赖管理 | `pnpm` 等工具会共享缓存、避免重复安装;严格依赖隔离杜绝“幽灵依赖” |
|
|
10
|
-
| 构建效率 | 借助 Turborepo 的缓存与依赖图,仅构建真正改动的包,CI 时间显著降低 |
|
|
11
|
-
| 原子提交 | 一个提交即可跨多个模块同步改动,便于回滚与审计 |
|
|
12
|
-
| 协作体验 | 同一仓库统一配置、脚本与规范,减少跨项目跳转和环境差异 |
|
|
13
|
-
| 可复用性 | 公共库、UI 组件、工具函数在 workspace 内即可本地引用并共享 |
|
|
14
|
-
|
|
15
|
-
## 与 Polyrepo 的对比
|
|
16
|
-
|
|
17
|
-
| Polyrepo 常见痛点 | Monorepo 的解决方式 |
|
|
18
|
-
| -------------------------------- | -------------------------------------------------- |
|
|
19
|
-
| 每个仓库单独装依赖、重复维护脚本 | Workspace 共享依赖与脚本,一次配置多处使用 |
|
|
20
|
-
| 同步多个仓库中的接口或配置 | 原子提交 + Turborepo 构建,修改一次即可全仓库生效 |
|
|
21
|
-
| CI/CD 配置分散、发布流程冗长 | 基于 changesets 和统一仓库配置快速搭建自动化流水线 |
|
|
22
|
-
| 大规模重构成本高 | 搜索范围集中,易于批量修改、验证与回滚 |
|
|
23
|
-
|
|
24
|
-
## 常见落地场景
|
|
25
|
-
|
|
26
|
-
- **多端同仓**:Web、Server、CLI 共存,代码共享严格受控。
|
|
27
|
-
- **组件库/工具链**:公共 API 与内部应用一起维护,避免版本漂移。
|
|
28
|
-
- **微服务集成**:多个服务共享协议、类型定义,发布与部署流程统一。
|
|
29
|
-
- **巨石拆分**:将原有大型项目拆成多个 package,逐步抽象并复用。
|
|
30
|
-
|
|
31
|
-
## 迁移建议
|
|
32
|
-
|
|
33
|
-
1. **先集中依赖**:把最常见的公共依赖和脚本统一到根目录,利用 `pnpm workspace` 管理版本。
|
|
34
|
-
2. **逐步迁移模块**:按照业务领域或团队边界迁移子模块,保留原 CI 作为兜底。
|
|
35
|
-
3. **引入构建缓存**:配置 Turborepo,使用 `turbo run <task> --filter=<scope>` 控制任务范围。
|
|
36
|
-
4. **接入 changesets**:在迁移过程中就开始记录版本与变更,养成可发布的节奏。
|
|
37
|
-
5. **通过 monorepo.config.ts 定制命令**:按团队习惯调整 `create` 模板、`clean` 行为、`upgrade` 目标等,提高可维护性。
|
|
38
|
-
|
|
39
|
-
## 进一步阅读
|
|
40
|
-
|
|
41
|
-
- [仓库管理实践](./manage.md) —— 如何将 pnpm + Turborepo + monorepo.config 协同使用。
|
|
42
|
-
- [发包与变更日志](./publish.md) —— 使用 changesets 管理版本、自动化发布。
|
|
43
|
-
- [工具专题](../tools/turborepo.md) —— 常用工具的配置与技巧。
|
|
44
|
-
- [常见思考](../thinking.md) —— 关于模块拆分、包结构的经验分享。
|
|
45
|
-
|
|
46
|
-
> Monorepo 不是银弹,但在需要大量复用、自动化、跨团队协作的场景下,它能显著提升工程效率。关键是配合合适的工具与规范,让拆分后的每个模块都有清晰的职责与边界。
|