create-swdg-frontend 0.2.0 → 0.2.2
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 +8 -5
- package/lib/constants.js +1 -1
- package/lib/gis.js +2 -0
- package/package.json +1 -1
- package/template/README.md +11 -5
- package/template/docs/MAINTAINER.md +12 -12
- package/template/docs/ONBOARDING.md +22 -4
- package/template/docs/TESTING.md +24 -6
- package/template/package.json +1 -2
- package/template/pnpm-lock.yaml +20 -548
- package/template/scripts/test-pack.mjs +101 -0
- package/template/scripts/test-pipeline.mjs +7 -1
- package/template/scripts/test-scaffold.mjs +30 -0
- package/template/src/components/OnboardingDeck/index.vue +33 -2
- package/template/src/main.ts +3 -1
- package/template/src/styles/alerts.css +75 -0
- package/template/src/styles/global.css +2 -21
- package/template/src/styles/responsive.css +48 -0
- package/template/src/styles/shell.css +11 -9
- package/template/src/styles/tokens.css +16 -0
- package/template/vite.config.ts +0 -7
- package/template/src/styles/alerts.less +0 -85
package/README.md
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
# create-swdg-frontend
|
|
2
2
|
|
|
3
|
-
从 SWDG 模板生成新项目。
|
|
3
|
+
从 SWDG 模板生成新项目。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
**官方命令:**
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
pnpm create swdg my-app
|
|
9
|
-
# 或
|
|
10
|
-
pnpm dlx create-swdg-frontend my-app
|
|
8
|
+
pnpm create swdg-frontend my-app
|
|
11
9
|
```
|
|
12
10
|
|
|
11
|
+
| | |
|
|
12
|
+
|---|---|
|
|
13
|
+
| ✅ | `pnpm create swdg-frontend` / `pnpm dlx create-swdg-frontend` |
|
|
14
|
+
| ❌ | `pnpm create swdg`(会解析为不存在的 npm 包 `create-swdg`) |
|
|
15
|
+
|
|
13
16
|
### 常用参数
|
|
14
17
|
|
|
15
18
|
| 参数 | 说明 |
|
package/lib/constants.js
CHANGED
|
@@ -6,7 +6,7 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
|
6
6
|
export const PACKAGE_ROOT = path.resolve(__dirname, '..');
|
|
7
7
|
export const TEMPLATE_DIR = path.join(PACKAGE_ROOT, 'template');
|
|
8
8
|
export const STUBS_DIR = path.join(PACKAGE_ROOT, 'stubs');
|
|
9
|
-
export const SCAFFOLD_VERSION = '0.2.
|
|
9
|
+
export const SCAFFOLD_VERSION = '0.2.2';
|
|
10
10
|
|
|
11
11
|
/** 可选特性:重型依赖默认关闭,创建时 opt-in */
|
|
12
12
|
export const FEATURES = {
|
package/lib/gis.js
CHANGED
|
@@ -86,6 +86,8 @@ export async function removeGisIntegration(destDir) {
|
|
|
86
86
|
await removePathIfExists(destDir, relativePath);
|
|
87
87
|
}
|
|
88
88
|
await patchPackageWithoutGis(destDir);
|
|
89
|
+
// package.json 已去掉 cesium 等依赖,旧 lockfile 会导致 pnpm frozen install 失败
|
|
90
|
+
await fs.rm(path.join(destDir, 'pnpm-lock.yaml'), { force: true });
|
|
89
91
|
await patchReadmeWithoutGis(destDir);
|
|
90
92
|
await applyNoGisStubs(destDir);
|
|
91
93
|
await upsertEnvFeature(destDir, false);
|
package/package.json
CHANGED
package/template/README.md
CHANGED
|
@@ -32,20 +32,26 @@ pnpm dev # http://localhost:3000 ,改 .env 后需重启
|
|
|
32
32
|
|
|
33
33
|
## 创建新项目(脚手架)
|
|
34
34
|
|
|
35
|
+
**官方命令(请只用这一条):**
|
|
36
|
+
|
|
35
37
|
```bash
|
|
36
|
-
pnpm create swdg my-app
|
|
37
|
-
# 或
|
|
38
|
-
npx create-swdg-frontend my-app
|
|
38
|
+
pnpm create swdg-frontend my-app
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
+
| 命令 | 说明 |
|
|
42
|
+
|------|------|
|
|
43
|
+
| `pnpm create swdg-frontend my-app` | ✅ 正确,对应 npm 包 `create-swdg-frontend` |
|
|
44
|
+
| `npx create-swdg-frontend my-app` | ✅ 同上 |
|
|
45
|
+
| `pnpm create swdg my-app` | ❌ 会去找不存在的包 `create-swdg`,不要用 |
|
|
46
|
+
|
|
41
47
|
交互会询问:项目名、**是否 GIS(默认否)**、是否安装依赖、是否 Git、是否 typecheck 校验。
|
|
42
48
|
|
|
43
49
|
```bash
|
|
44
50
|
# 非 GIS 项目(推荐多数后台类应用)
|
|
45
|
-
pnpm create swdg my-app --no-gis --install
|
|
51
|
+
pnpm create swdg-frontend my-app --no-gis --install
|
|
46
52
|
|
|
47
53
|
# GIS 项目
|
|
48
|
-
pnpm create swdg my-app --gis --install
|
|
54
|
+
pnpm create swdg-frontend my-app --gis --install
|
|
49
55
|
```
|
|
50
56
|
|
|
51
57
|
## 目录结构
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
```
|
|
8
8
|
frontend-framework/ # 模板源仓库(本仓库)
|
|
9
|
-
├── create-swdg/ # npm 包 create-swdg-frontend
|
|
9
|
+
├── create-swdg/ # npm 包 create-swdg-frontend(pnpm create swdg-frontend)
|
|
10
10
|
│ ├── bin/index.js # CLI 入口
|
|
11
11
|
│ ├── lib/ # 提示、特性剥离、manifest
|
|
12
12
|
│ ├── stubs/ # 无 GIS 时的配置替身
|
|
@@ -23,22 +23,22 @@ frontend-framework/ # 模板源仓库(本仓库)
|
|
|
23
23
|
1. 登录 [npmjs.com](https://www.npmjs.com/),确认账号已验证邮箱
|
|
24
24
|
2. 确认包名 **`create-swdg-frontend`**、**`swdg`** 在你账号下(首次需未被占用)
|
|
25
25
|
3. npm → Access Tokens → **Generate New Token**
|
|
26
|
-
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
- **必须** 选 **Granular Access Token**(Packages: Read and write)并勾选 **Bypass 2FA**,
|
|
27
|
+
或 **Classic Token → Automation**(专为 CI 设计,不需要 OTP)
|
|
28
|
+
- ⚠️ 不要用 Classic **Publish** token,CI 会报 `EOTP`
|
|
29
|
+
4. GitHub → **Settings → Secrets → Actions** → 更新 **`NPM_TOKEN`**
|
|
29
30
|
|
|
30
31
|
**每次发版**
|
|
31
32
|
|
|
32
33
|
```bash
|
|
33
|
-
# 1.
|
|
34
|
-
pnpm test:ci
|
|
35
|
-
|
|
36
|
-
# 2. 提交并推到 GitHub(如有未 push 的改动)
|
|
34
|
+
# 1. 提交并推到 GitHub(main 上 CI 会跑 test:ci)
|
|
37
35
|
git push github main
|
|
38
36
|
|
|
39
|
-
#
|
|
40
|
-
|
|
41
|
-
|
|
37
|
+
# 2. 打 tag 并推送(版本号与 tag 一致,格式 vX.Y.Z;Release workflow 会跑 test:ci 后 publish)
|
|
38
|
+
|
|
39
|
+
用户创建项目请统一文档为:`pnpm create swdg-frontend <name>`(不要用 `pnpm create swdg`)。
|
|
40
|
+
git tag v0.2.1
|
|
41
|
+
git push github v0.2.1
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
4. 打开 **Actions → Release to npm**,等待 workflow 完成
|
|
@@ -50,7 +50,7 @@ CI 会:从 tag 解析版本 → `test:ci` → 发布 `create-swdg-frontend`
|
|
|
50
50
|
|
|
51
51
|
```bash
|
|
52
52
|
pnpm test:ci
|
|
53
|
-
pnpm release 0.2.
|
|
53
|
+
pnpm release 0.2.1
|
|
54
54
|
```
|
|
55
55
|
|
|
56
56
|
详见 [TESTING.md](./TESTING.md)。
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
| 方式 | 适合谁 | 第一步 |
|
|
10
10
|
| ------------------ | -------------------------------- | ------------------------------------------------------------ |
|
|
11
11
|
| **直接使用本仓库** | 团队统一模板、在 monorepo 上迭代 | `git clone` → `pnpm install` |
|
|
12
|
-
| **脚手架新建项目** | 每个业务一条独立仓库 | `pnpm create swdg my-app`(见根目录 [README](../README.md)) |
|
|
12
|
+
| **脚手架新建项目** | 每个业务一条独立仓库 | `pnpm create swdg-frontend my-app`(见根目录 [README](../README.md)) |
|
|
13
13
|
|
|
14
14
|
两种方式的项目结构、命令、路由约定 **一致**;脚手架可通过 `--gis` / `--no-gis` 裁剪 Cesium 相关文件。
|
|
15
15
|
|
|
@@ -82,7 +82,7 @@ src/
|
|
|
82
82
|
├── api/ # 接口请求
|
|
83
83
|
├── stores/ # Pinia
|
|
84
84
|
├── utils/ # 工具、composables、cesium 封装
|
|
85
|
-
├── styles/ #
|
|
85
|
+
├── styles/ # tokens / global / responsive / shell / alerts
|
|
86
86
|
├── router/ # 路由入口(一般不用改)
|
|
87
87
|
interface/ # 业务 TS 类型
|
|
88
88
|
types/ # 全局类型、env.d.ts
|
|
@@ -111,6 +111,24 @@ import { useFeatureGis } from '@composables/useFeatureGis';
|
|
|
111
111
|
import MyCard from '@components/MyCard/index.vue';
|
|
112
112
|
```
|
|
113
113
|
|
|
114
|
+
### 样式与自适应(推荐做法)
|
|
115
|
+
|
|
116
|
+
模板 **不默认引入** Tailwind 或重型 UI 库,布局用 **原生 CSS**(成熟、无运行时):
|
|
117
|
+
|
|
118
|
+
| 文件 | 作用 |
|
|
119
|
+
| ---- | ---- |
|
|
120
|
+
| `tokens.css` | 断点变量、`clamp()` 间距与字号 |
|
|
121
|
+
| `responsive.css` | 遗留工具类 `.grid-h-*` 的响应式列数 |
|
|
122
|
+
| `shell.css` | 首页壳层、`repeat(auto-fill, minmax(...))` 卡片网格 |
|
|
123
|
+
|
|
124
|
+
断点与业界常用值对齐:**640 / 768 / 1024 / 1280 px**。新页面优先:
|
|
125
|
+
|
|
126
|
+
- `clamp()` / `min()` / `%` 做流体尺寸
|
|
127
|
+
- **CSS Grid** `auto-fill` + `minmax()` 做卡片列表
|
|
128
|
+
- 需要组件级适配时再用 `@media`,一般不必为自适应单独加 npm 包
|
|
129
|
+
|
|
130
|
+
若团队已标准化 **Element Plus / Ant Design Vue**,可在业务仓库自行安装;本模板保持样式中立。
|
|
131
|
+
|
|
114
132
|
---
|
|
115
133
|
|
|
116
134
|
## 六、约定式路由(重要)
|
|
@@ -259,7 +277,7 @@ pnpm preview
|
|
|
259
277
|
## 十三、脚手架创建新项目(摘要)
|
|
260
278
|
|
|
261
279
|
```bash
|
|
262
|
-
pnpm create swdg my-app
|
|
280
|
+
pnpm create swdg-frontend my-app
|
|
263
281
|
cd my-app
|
|
264
282
|
pnpm dev
|
|
265
283
|
```
|
|
@@ -267,7 +285,7 @@ pnpm dev
|
|
|
267
285
|
- 交互默认 **不启用 GIS**;三维项目请选 Y 或加 `--gis`
|
|
268
286
|
- 生成目录含 `docs/ONBOARDING.md`(与本文同步)和 `.swdg/manifest.json`(记录创建选项)
|
|
269
287
|
|
|
270
|
-
更多参数:`
|
|
288
|
+
更多参数:`pnpm create swdg-frontend --help` 或根 [README](../README.md)。
|
|
271
289
|
|
|
272
290
|
---
|
|
273
291
|
|
package/template/docs/TESTING.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 测试与发布门禁
|
|
2
2
|
|
|
3
|
-
发布 `create-swdg-frontend` / `swdg` 到 npmjs **前必须**
|
|
3
|
+
发布 `create-swdg-frontend` / `swdg` 到 npmjs **前必须** 通过完整测试管道(tag 触发 Release 时由 GitHub Actions 执行;本地 `pnpm test:ci` 可选)。
|
|
4
4
|
|
|
5
5
|
## 命令一览
|
|
6
6
|
|
|
@@ -8,19 +8,22 @@
|
|
|
8
8
|
| -------------------- | --------------------------------------- | ----------------- |
|
|
9
9
|
| `pnpm verify` | typecheck + eslint | 日常提交前 |
|
|
10
10
|
| `pnpm test:unit` | Vitest 单元测试 | 开发中 |
|
|
11
|
-
| `pnpm test:scaffold` |
|
|
11
|
+
| `pnpm test:scaffold` | 脚手架集成(含 --no-gis 生成项目 build) | 改 create-swdg 后 |
|
|
12
12
|
| `pnpm test:template` | sync + template install/typecheck/build | 改模板后 |
|
|
13
|
-
|
|
|
13
|
+
| `pnpm test:pack` | npm pack 后从 tarball 跑 CLI 并 build | 改发布物前 |
|
|
14
|
+
| **`pnpm test:ci`** | **完整发布门禁(五阶段)** | **PR / tag 发布** |
|
|
14
15
|
|
|
15
16
|
## 发布门禁管道(`pnpm test:ci`)
|
|
16
17
|
|
|
17
18
|
顺序固定,任一失败即 `exit 1`:
|
|
18
19
|
|
|
19
20
|
```
|
|
21
|
+
0. sync 生成 create-swdg/template
|
|
20
22
|
1. verify 根项目 typecheck + eslint
|
|
21
23
|
2. unit vitest 单元测试
|
|
22
|
-
3. scaffold --no-gis /
|
|
23
|
-
4. template
|
|
24
|
+
3. scaffold 产物/manifest/CLI + --no-gis 项目 install/build
|
|
25
|
+
4. template template install → typecheck → build(GIS on)
|
|
26
|
+
5. pack npm pack → 从 tarball 创建无 GIS 项目并 build
|
|
24
27
|
```
|
|
25
28
|
|
|
26
29
|
`pnpm release x.y.z` 会在改版本号、打 npm 包 **之前** 自动执行 `test:ci`。
|
|
@@ -59,6 +62,20 @@
|
|
|
59
62
|
- 合法参数能退出 0
|
|
60
63
|
- 非法项目名退出非 0
|
|
61
64
|
|
|
65
|
+
**--no-gis 构建**
|
|
66
|
+
|
|
67
|
+
- 生成项目 `pnpm install` → `typecheck` → `build` 通过(无 Cesium)
|
|
68
|
+
|
|
69
|
+
## 发布物测试(pack)
|
|
70
|
+
|
|
71
|
+
`scripts/test-pack.mjs`:
|
|
72
|
+
|
|
73
|
+
1. 在 `create-swdg/` 执行 `npm pack`
|
|
74
|
+
2. 从 tarball 安装并运行 CLI(`--no-gis`)
|
|
75
|
+
3. 生成项目 `install` + `typecheck` + `build`
|
|
76
|
+
|
|
77
|
+
模拟用户 `pnpm create swdg-frontend` 拿到的 npm 包内容。
|
|
78
|
+
|
|
62
79
|
## 模板测试(template)
|
|
63
80
|
|
|
64
81
|
`scripts/test-template.mjs`:
|
|
@@ -98,7 +115,8 @@ pnpm release 0.2.1
|
|
|
98
115
|
| 失败阶段 | 常见原因 |
|
|
99
116
|
| -------- | ------------------------------------------------ |
|
|
100
117
|
| verify | TS 错误、ESLint、单元测试红 |
|
|
101
|
-
| scaffold | GIS
|
|
118
|
+
| scaffold | GIS 剥离不完整、无 GIS 项目 build 失败 |
|
|
102
119
|
| template | 未 sync、template build 失败(Cesium/路由等) |
|
|
120
|
+
| pack | tarball 缺 template、packed CLI 行为异常 |
|
|
103
121
|
|
|
104
122
|
template 阶段最慢(install + build),本地可先 `pnpm test:scaffold` 快速迭代脚手架逻辑。
|
package/template/package.json
CHANGED
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
"test:unit": "vitest run",
|
|
23
23
|
"test:run": "vitest run",
|
|
24
24
|
"test:scaffold": "node scripts/test-scaffold.mjs",
|
|
25
|
+
"test:pack": "node scripts/test-pack.mjs",
|
|
25
26
|
"test:template": "node scripts/test-template.mjs",
|
|
26
27
|
"test:ci": "node scripts/test-pipeline.mjs",
|
|
27
28
|
"verify": "node scripts/verify.mjs"
|
|
@@ -64,11 +65,9 @@
|
|
|
64
65
|
"fs-extra": "^11.3.5",
|
|
65
66
|
"husky": "^9.1.7",
|
|
66
67
|
"jsdom": "^29.1.1",
|
|
67
|
-
"less": "^4.6.4",
|
|
68
68
|
"lint-staged": "^17.0.5",
|
|
69
69
|
"prettier": "^3.8.3",
|
|
70
70
|
"rollup-plugin-copy": "^3.5.0",
|
|
71
|
-
"sass-embedded": "^1.100.0",
|
|
72
71
|
"stylelint": "^17.12.0",
|
|
73
72
|
"stylelint-config-recommended-vue": "^1.6.1",
|
|
74
73
|
"stylelint-config-standard": "^40.0.0",
|