@xiaobuyu/nodesign 0.0.1 → 0.0.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 +156 -106
- package/bin/nodesign.js +0 -0
- package/package.json +1 -1
- package/server/api/README.md +45 -45
- package/server/api/_guard.js +75 -75
- package/server/api/admin.js +187 -187
- package/server/api/assets/docx-page.js +103 -103
- package/server/api/assets/helpers.js +22 -22
- package/server/api/assets/notes.js +144 -144
- package/server/api/assets.js +896 -896
- package/server/api/board.js +57 -57
- package/server/api/browse.js +138 -138
- package/server/api/canvas.js +444 -444
- package/server/api/chatai.js +324 -324
- package/server/api/exports/build-standalone.js +980 -980
- package/server/api/exports/cards.js +118 -118
- package/server/api/exports/docx-pdf.js +46 -46
- package/server/api/exports/export-page.js +142 -142
- package/server/api/exports/handoff.js +147 -147
- package/server/api/exports.js +690 -690
- package/server/api/instruction.js +75 -75
- package/server/api/me.js +116 -116
- package/server/api/memory.js +185 -185
- package/server/api/pending-changes.js +366 -366
- package/server/api/plugins.js +164 -164
- package/server/api/projects.js +220 -220
- package/server/api/publish.js +64 -64
- package/server/api/recent.js +73 -73
- package/server/api/sessions.js +589 -589
- package/server/api/skills.js +77 -77
- package/server/api/standalone-fit.js +168 -168
- package/server/api/turn-compose.js +180 -180
- package/server/api/turn-inflight.js +44 -44
- package/server/auth/README.md +17 -17
- package/server/auth/middleware.js +138 -138
- package/server/auth/origin-guard.js +71 -71
- package/server/auth/session.js +108 -108
- package/server/auth/tier.js +113 -113
- package/server/auth/users-store.js +348 -348
- package/server/edit/README.md +29 -29
- package/server/engine/README.md +113 -113
- package/server/engine/agent/agent-shared.js +550 -550
- package/server/engine/agent/auto-mode-default-hard-deny.txt +4 -4
- package/server/engine/agent/auto-mode-rules.js +78 -78
- package/server/engine/agent/context.js +418 -418
- package/server/engine/agent/events.js +464 -464
- package/server/engine/agent/hooks/canvas-validate.js +199 -199
- package/server/engine/agent/hooks/failure.js +120 -120
- package/server/engine/agent/hooks/file-events.js +75 -75
- package/server/engine/agent/hooks/lifecycle.js +233 -233
- package/server/engine/agent/hooks/post-canvas-focus.js +80 -80
- package/server/engine/agent/hooks/post-guidance.js +206 -206
- package/server/engine/agent/hooks/post-subagent-report.js +104 -104
- package/server/engine/agent/hooks/post-trim.js +58 -58
- package/server/engine/agent/hooks/pre-board-neighborhood.js +34 -34
- package/server/engine/agent/hooks/pre-defaults.js +84 -84
- package/server/engine/agent/hooks/pre-injectors.js +277 -277
- package/server/engine/agent/hooks/pre-performance-log-guard.js +78 -78
- package/server/engine/agent/hooks/pre-starter-files.js +61 -61
- package/server/engine/agent/hooks/pre-workspace-scope-guard.js +78 -78
- package/server/engine/agent/hooks/site-validate.js +94 -94
- package/server/engine/agent/hooks/tool-prompts.js +31 -31
- package/server/engine/agent/hooks/turn-state-memory.js +56 -56
- package/server/engine/agent/hooks/user-prompt-submit.js +215 -215
- package/server/engine/agent/hooks.js +354 -354
- package/server/engine/agent/init-contract.js +69 -69
- package/server/engine/agent/isolation.js +159 -159
- package/server/engine/agent/model-table.js +292 -292
- package/server/engine/agent/plugin-loader.js +266 -266
- package/server/engine/agent/prompts/nodesign-prelude.md +336 -336
- package/server/engine/agent/prompts/tools/ask-user-question-protocol.md +71 -71
- package/server/engine/agent/prompts/tools/direct-edit-protocol.md +98 -98
- package/server/engine/agent/prompts/tools/generate-image-cookbook.gemini-gateway.md +583 -583
- package/server/engine/agent/prompts/tools/generate-image-cookbook.md +483 -483
- package/server/engine/agent/prompts/tools/hybrid-reference.md +100 -100
- package/server/engine/agent/prompts/tools/paint-still-cookbook.md +270 -270
- package/server/engine/agent/prompts/tools/roll-film-cookbook.md +70 -70
- package/server/engine/agent/prompts/tools/site-reference.md +106 -106
- package/server/engine/agent/prompts/tools/tweaks-syntax.md +125 -125
- package/server/engine/agent/prompts/tools/vision-checker-dispatch.md +48 -48
- package/server/engine/agent/session-loop.js +1024 -1024
- package/server/engine/agent/session-model.js +164 -164
- package/server/engine/agent/skill.js +204 -204
- package/server/engine/agent/task-events.js +78 -78
- package/server/engine/agents/ds-extractor.md +132 -132
- package/server/engine/agents/explorer.md +190 -190
- package/server/engine/agents/index.js +230 -230
- package/server/engine/agents/schemas/design-system.json +156 -156
- package/server/engine/agents/schemas/tweak-schema.json +113 -113
- package/server/engine/agents/tweak-proposer.md +127 -127
- package/server/engine/agents/vision-checker.md +254 -254
- package/server/engine/browse/capture.js +422 -422
- package/server/engine/browse/card.js +137 -137
- package/server/engine/browse/handover.js +59 -59
- package/server/engine/browse/page-digest.js +119 -119
- package/server/engine/browse/refs.js +196 -196
- package/server/engine/browse/registry.js +307 -307
- package/server/engine/browse/screencast.js +170 -170
- package/server/engine/browse/state.js +121 -121
- package/server/engine/chatai/chat-log.js +79 -79
- package/server/engine/chatai/index.js +193 -193
- package/server/engine/chatai/openai-compat.js +152 -152
- package/server/engine/chatai/orchestrate.js +309 -309
- package/server/engine/chatai/perform.js +40 -40
- package/server/engine/chatai/summarize.js +79 -79
- package/server/engine/mcp/capability-gate.js +52 -52
- package/server/engine/mcp/index.js +339 -339
- package/server/engine/mcp/param-sanitizer.js +142 -142
- package/server/engine/mcp/tools/arrange-on-board.js +124 -124
- package/server/engine/mcp/tools/artifact-session.js +278 -278
- package/server/engine/mcp/tools/browse-computer.js +421 -421
- package/server/engine/mcp/tools/browse-find-batch.js +183 -183
- package/server/engine/mcp/tools/browse-screenshot.js +157 -157
- package/server/engine/mcp/tools/browse.js +480 -480
- package/server/engine/mcp/tools/build-docx.js +101 -101
- package/server/engine/mcp/tools/clear-pending-changes.js +99 -99
- package/server/engine/mcp/tools/create-on-board.js +155 -155
- package/server/engine/mcp/tools/crystallize-skill.js +168 -168
- package/server/engine/mcp/tools/explain-style.js +237 -237
- package/server/engine/mcp/tools/export-handoff.js +133 -133
- package/server/engine/mcp/tools/expose-tweaks.js +149 -149
- package/server/engine/mcp/tools/generate-image.js +842 -842
- package/server/engine/mcp/tools/get-computed-styles.js +164 -164
- package/server/engine/mcp/tools/get-pending-changes.js +205 -205
- package/server/engine/mcp/tools/h3box-ssh.js +84 -84
- package/server/engine/mcp/tools/helpers/acquire-page.js +82 -82
- package/server/engine/mcp/tools/helpers/motion-lab.js +554 -554
- package/server/engine/mcp/tools/helpers/motion-scroll.js +112 -112
- package/server/engine/mcp/tools/helpers/perception-page.js +215 -215
- package/server/engine/mcp/tools/helpers/reference-download.js +103 -103
- package/server/engine/mcp/tools/helpers/rembg-bridge.py +80 -80
- package/server/engine/mcp/tools/helpers/shot-pipeline.js +280 -280
- package/server/engine/mcp/tools/highlight.js +68 -68
- package/server/engine/mcp/tools/list-pages.js +222 -222
- package/server/engine/mcp/tools/lookup-tags.js +59 -59
- package/server/engine/mcp/tools/navigate-to-page.js +60 -60
- package/server/engine/mcp/tools/organize-board.js +64 -64
- package/server/engine/mcp/tools/paint-still.js +434 -434
- package/server/engine/mcp/tools/pin-to-board.js +130 -130
- package/server/engine/mcp/tools/preview-deck.js +130 -130
- package/server/engine/mcp/tools/profile-scroll.js +305 -305
- package/server/engine/mcp/tools/publish-site.js +102 -102
- package/server/engine/mcp/tools/query-elements.js +195 -195
- package/server/engine/mcp/tools/read-board.js +103 -103
- package/server/engine/mcp/tools/read-document.js +93 -93
- package/server/engine/mcp/tools/read-page.js +264 -264
- package/server/engine/mcp/tools/read-tavern-json.js +143 -143
- package/server/engine/mcp/tools/record-decision.js +140 -140
- package/server/engine/mcp/tools/relate-on-board.js +110 -110
- package/server/engine/mcp/tools/report-issue.js +115 -115
- package/server/engine/mcp/tools/roll-film.js +266 -266
- package/server/engine/mcp/tools/screenshot-docx.js +138 -138
- package/server/engine/mcp/tools/screenshot-url.js +195 -195
- package/server/engine/mcp/tools/screenshot.js +583 -583
- package/server/engine/mcp/tools/tier-gate.js +96 -96
- package/server/engine/mcp/tools/trace-motion.js +215 -215
- package/server/engine/mcp/tools/web-search.js +548 -548
- package/server/engine/motion/inventory.js +349 -349
- package/server/engine/perception/session.js +235 -235
- package/server/engine/plugins/nodesign/.claude-plugin/plugin.json +5 -5
- package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/SKILL.md +192 -192
- package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/canvas.template.html +667 -667
- package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/patterns/hybrid-grid.md +22 -22
- package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/patterns/image-led-cover.md +25 -25
- package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/patterns/portrait.md +23 -23
- package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/patterns/quote-backdrop.md +21 -21
- package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/patterns/section-divider.md +23 -23
- package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/patterns/text-led.md +21 -21
- package/server/engine/plugins/nodesign/skills/docx-craft/SKILL.md +162 -162
- package/server/engine/plugins/nodesign/skills/docx-craft/references/token-schema.md +407 -407
- package/server/engine/plugins/nodesign/skills/docx-craft//346/226/207/346/241/243.template.json +80 -80
- package/server/engine/plugins/nodesign/skills/rp-craft/SKILL.md +228 -228
- package/server/engine/plugins/nodesign/skills/rp-craft/patterns//346/274/224/345/207/272/351/241/265-/346/234/200/345/260/217/345/256/236/347/216/260.html +78 -78
- package/server/engine/plugins/nodesign/skills/rp-craft//346/274/224/345/207/272.template.js +268 -268
- package/server/engine/plugins/nodesign/skills/site-craft/SKILL.md +323 -323
- package/server/engine/plugins/nodesign/skills/site-craft/patterns/build-lane.md +134 -134
- package/server/engine/plugins/nodesign/skills/site-craft/patterns/cutout-collage.md +61 -61
- package/server/engine/plugins/nodesign/skills/site-craft/patterns/mock-app.md +163 -163
- package/server/engine/plugins/nodesign/skills/site-craft/patterns/page-transitions.md +86 -86
- package/server/engine/runs/active-runs.js +698 -698
- package/server/engine/runs/live-turn.js +252 -252
- package/server/engine/runs/store.js +364 -364
- package/server/engine/runs/turn-relay.js +217 -217
- package/server/engine/runtime/workspace.js +164 -164
- package/server/lib/artifact-file-path.js +80 -80
- package/server/lib/artifact-target.js +284 -284
- package/server/lib/asset-refs.js +239 -239
- package/server/lib/async-queue.js +104 -104
- package/server/lib/auto-relations.js +130 -130
- package/server/lib/binding-types.js +60 -60
- package/server/lib/board-kind-sizes.js +62 -62
- package/server/lib/board-relations.js +133 -133
- package/server/lib/browse-proxy.js +180 -180
- package/server/lib/canvas-id.js +36 -36
- package/server/lib/cover.js +227 -227
- package/server/lib/danbooru-tags.js +291 -291
- package/server/lib/doc-extract.js +156 -156
- package/server/lib/docx/build-from-source.js +260 -260
- package/server/lib/docx/build.js +490 -490
- package/server/lib/docx/dump-styles.js +287 -287
- package/server/lib/docx/fonts/nodesign-cjk.conf +164 -164
- package/server/lib/docx/merge-runs.js +129 -129
- package/server/lib/docx/numbering.js +218 -218
- package/server/lib/docx/order.js +152 -152
- package/server/lib/docx/rawzip.js +172 -172
- package/server/lib/docx/render.js +92 -92
- package/server/lib/docx/text-lint.js +225 -225
- package/server/lib/docx/tokens.js +335 -335
- package/server/lib/docx/units.js +29 -29
- package/server/lib/docx/xml.js +291 -291
- package/server/lib/docx-pages.js +187 -187
- package/server/lib/export-collect.js +289 -289
- package/server/lib/export-package.js +210 -210
- package/server/lib/html-srcset.js +145 -145
- package/server/lib/image-variant.js +460 -460
- package/server/lib/ingress/forward-openai-chat.js +305 -305
- package/server/lib/ingress/openai-chat.js +491 -491
- package/server/lib/ingress/session-notice.js +66 -66
- package/server/lib/ingress/session-routes.js +68 -68
- package/server/lib/ingress/slot-probe.js +130 -130
- package/server/lib/ingress/upstream-billing.js +52 -52
- package/server/lib/ingress/upstream-fail-streak.js +72 -72
- package/server/lib/ingress/upstream-truncation.js +48 -48
- package/server/lib/issues-store.js +182 -182
- package/server/lib/kinds/deck.js +72 -72
- package/server/lib/kinds/docx.js +283 -283
- package/server/lib/kinds/file-kinds.js +113 -113
- package/server/lib/kinds/index.js +202 -202
- package/server/lib/kinds/site.js +161 -161
- package/server/lib/model-ingress.js +543 -543
- package/server/lib/moderation.js +255 -255
- package/server/lib/notice-store.js +103 -103
- package/server/lib/plugin-install.js +104 -104
- package/server/lib/plugin-validator.js +721 -721
- package/server/lib/publish-store.js +115 -115
- package/server/lib/quick-summary.js +52 -52
- package/server/lib/quota.js +270 -270
- package/server/lib/rate-window.js +29 -29
- package/server/lib/reference-assets.js +92 -92
- package/server/lib/region-shot.js +135 -135
- package/server/lib/safe-path.js +73 -73
- package/server/lib/sdk-session.js +33 -33
- package/server/lib/showcase-store.js +92 -92
- package/server/lib/site-publish.js +465 -465
- package/server/lib/ssrf-guard.js +432 -432
- package/server/lib/task-scan.js +158 -158
- package/server/lib/tavern-json.js +154 -154
- package/server/lib/video-variant.js +237 -237
- package/server/lib/workspace-path.js +33 -33
- package/server/ops/fix-sdk-musl.mjs +40 -40
- package/server/ops/install-macos-fonts.sh +114 -114
- package/server/ops/macos-fonts.conf +336 -336
- package/server/ops/sandbox-shim/bwrap +57 -57
- package/server/projects/assets-summary.js +119 -119
- package/server/projects/auto-name.js +53 -53
- package/server/projects/board-store.js +640 -640
- package/server/projects/move-entry.js +103 -103
- package/server/projects/store.js +270 -270
- package/server/projects/ui-config.js +54 -54
- package/server/projects/workspace-templates.js +53 -53
- package/server/projects/workspace.js +1025 -1025
- package/server/runtime/local-config.js +177 -177
- package/server/runtime/profile.js +72 -72
- package/server/services/rembg-service.py +334 -334
- package/server/shared/README.md +25 -25
- package/server/shared/deck.js +54 -54
- package/server/shared/time.js +49 -49
- package/server/style-pipeline/README.md +53 -53
- package/server/ws/broker.js +36 -36
- package/server/ws/browse-channel.js +177 -177
- package/server/ws/index.js +386 -386
- package/web/README.md +89 -89
- package/web/dist/assets/BrowserWindow-BYCgizHw.js +11 -0
- package/web/dist/assets/{DeckWindow-4G0xX7P3.js → DeckWindow-pNydEM4L.js} +1 -1
- package/web/dist/assets/{DocxWindow-BXQsoPkh.js → DocxWindow-PPgzh3Gq.js} +1 -1
- package/web/dist/assets/{SiteWindow-D6eS-2gM.js → SiteWindow-DM0LQPCO.js} +1 -1
- package/web/dist/assets/{index-Cbl3ATvp.js → index-BHTBJlpY.js} +32 -32
- package/web/dist/assets/{pending-edit-apply-DTjo2geW.js → pending-edit-apply-C0I13CbD.js} +1 -1
- package/web/dist/assets/{rotate-cw-LMT3x1Zj.js → rotate-cw-B1UQ8Hld.js} +1 -1
- package/web/dist/assets/{square-dashed-mouse-pointer-CBoAkfhi.js → square-dashed-mouse-pointer-8lrgqmfv.js} +1 -1
- package/web/dist/index.html +17 -17
- package/web/dist/assets/BrowserWindow-Dc7J7CYc.js +0 -11
|
@@ -1,134 +1,134 @@
|
|
|
1
|
-
# 构建道 —— 组件库与打包器站点的平台配方
|
|
2
|
-
|
|
3
|
-
手写道(一夹 html + css)解决八成站点。这份配方讲剩下两成:什么时候值得上
|
|
4
|
-
构建,上了之后怎么不跟平台打架。
|
|
5
|
-
|
|
6
|
-
## 什么时候上构建道
|
|
7
|
-
|
|
8
|
-
**真信号**(有一条就值得):
|
|
9
|
-
|
|
10
|
-
- 同一块 UI 结构在三处以上重复、而且还会继续长 —— 组件复用是唯一还不掉的债
|
|
11
|
-
- 交互核心有状态:筛选器 / 计算器 / 播放器 / 小编辑器。手写 DOM 操作超过
|
|
12
|
-
两百行,就该让框架管状态了
|
|
13
|
-
- 内容源是数据不是页面:几十篇 md、一份 JSON 目录 —— 页面应该被**生成**,
|
|
14
|
-
不该被逐页维护
|
|
15
|
-
- 要用 npm 独占的库(CDN 上没有,或 CDN 版残缺)
|
|
16
|
-
|
|
17
|
-
**假信号**(听着像,其实不是):
|
|
18
|
-
|
|
19
|
-
- 「显得正经 / 专业」—— 观感由排版和素材决定,不由构建工具决定
|
|
20
|
-
- 「以后可能要扩展」—— 到那天再迁。迁移的一次性成本低于工具链税的利息
|
|
21
|
-
- 「动效复杂」—— gsap / lenis 走 CDN 就够,动效从来不是上构建的理由
|
|
22
|
-
|
|
23
|
-
## 三条平台硬约束(违反 = 404 或感知失明)
|
|
24
|
-
|
|
25
|
-
1. **`base: './'`**。预览与导出都挂在 `…/artifact-file/<路径>` 深前缀下,打包器
|
|
26
|
-
默认产出的 `/assets/xx.js` 根路径会跳出前缀直接 404。vite 一行 `base: './'`
|
|
27
|
-
解决;选别的工具前先确认它能**全相对**输出(Astro / Next 在这点上很拧,
|
|
28
|
-
别硬掰)。
|
|
29
|
-
2. **页 = html 入口,router 不进站点**。`list_pages`、按页截图、按页刷新、整站
|
|
30
|
-
导出全按 html 文件寻址;SPA + 客户端路由让这些全部失明,深链接发布后照样
|
|
31
|
-
404。多页 = vite `rollupOptions.input` 多入口。例外:纯应用站(整站就是一个
|
|
32
|
-
工具)单页、无路由,随意。
|
|
33
|
-
3. **产物纯静态**照旧(SSR / 常驻进程不行)。`vite build` 落 `dist/`,系统自动
|
|
34
|
-
认作产物根。
|
|
35
|
-
|
|
36
|
-
## 起手:五个文件手写,不用脚手架
|
|
37
|
-
|
|
38
|
-
`npm create vite` 是交互式命令(会挂住回合),给的还是单页 App 模板 —— 跟
|
|
39
|
-
约束 2 打架。自己来,30 秒的事:
|
|
40
|
-
|
|
41
|
-
```bash
|
|
42
|
-
mkdir 站名 && cd 站名
|
|
43
|
-
npm i --no-audit --no-fund react react-dom
|
|
44
|
-
npm i -D --no-audit --no-fund vite @vitejs/plugin-react tailwindcss @tailwindcss/vite
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
版本让 npm 解到当前大版本,**别手填猜的版本号**(猜错一个 peer 链全断)。
|
|
48
|
-
发布不满一年的新锐库默认不用 —— 你对它的知识大概率是错版本的。
|
|
49
|
-
|
|
50
|
-
```jsonc
|
|
51
|
-
// package.json 里 build 必须写进 scripts ——
|
|
52
|
-
// 工程交付包带源不带依赖,接手的人靠 `npm i && npm run build` 续命
|
|
53
|
-
{ "scripts": { "build": "vite build" } }
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
```js
|
|
57
|
-
// vite.config.js
|
|
58
|
-
import { defineConfig } from 'vite'
|
|
59
|
-
import react from '@vitejs/plugin-react'
|
|
60
|
-
import tailwindcss from '@tailwindcss/vite'
|
|
61
|
-
|
|
62
|
-
export default defineConfig({
|
|
63
|
-
base: './', // 硬约束 1
|
|
64
|
-
plugins: [react(), tailwindcss()],
|
|
65
|
-
build: { rollupOptions: { input: ['index.html', 'about.html'] } }, // 每页一入口
|
|
66
|
-
})
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
其余两件:`index.html`(真内容写在里面,见下节)和 `src/`(每页一个小入口 js)。
|
|
70
|
-
|
|
71
|
-
## html 是骨架,React 是器官
|
|
72
|
-
|
|
73
|
-
平台的感知层读的是 html:`list_pages` 从产物 html 里抓 `<a>` 拼站点结构和断链
|
|
74
|
-
清单,Read 产物页看到的是标签正文。整页 JSX 渲染 = 产物 html 只剩一个
|
|
75
|
-
`<div id="root">` —— 结构失明、断链失明,发布后搜索引擎同样瞎。
|
|
76
|
-
|
|
77
|
-
所以:**内容仍写在真 html 里**(或由脚本生成真 html),React 只挂需要状态的
|
|
78
|
-
那一块:
|
|
79
|
-
|
|
80
|
-
```html
|
|
81
|
-
<section id="filter-app"></section> <!-- 只有这一块是 React 的 -->
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
每页一个小入口 js 挂自己的器官。纯应用站例外:整页 React,感知靠截图,
|
|
85
|
-
结构靠你自己心里有数。
|
|
86
|
-
|
|
87
|
-
## 组件库:抄进来,不是装进来
|
|
88
|
-
|
|
89
|
-
装一个 kit(MUI / AntD / Chakra)= 把整站气质外包给别人的默认值 —— 反默认
|
|
90
|
-
清单里每一条它都替你答了,答的全是均值;而且它跟你的排版系统(三个数、间距
|
|
91
|
-
刻度、灰梯度)各论各的。需要现成组件时用**抄**的:
|
|
92
|
-
|
|
93
|
-
- 行为复杂、样式想自己定的(弹层 / 下拉 / tabs / 无障碍):headless 一层
|
|
94
|
-
(radix 系),皮全自己画
|
|
95
|
-
- shadcn 式 copy-in:组件**源码落进工作区**才改得动气质;装成依赖的组件
|
|
96
|
-
你只能"配置"它
|
|
97
|
-
- 图表(echarts)、3D(three)这类**画布型**库不在此列 —— 它们不带 UI 气质,
|
|
98
|
-
正常装正常 import
|
|
99
|
-
|
|
100
|
-
## Tailwind 的立场(跟手写道不同,不矛盾)
|
|
101
|
-
|
|
102
|
-
手写道不推 utility,理由是**用户自己要改得动**(改行高不能改一百处)。构建道
|
|
103
|
-
上改样式的人是你,这条理由消失,utility 的密度优势成立。但气质旋钮必须还是
|
|
104
|
-
集中的:三个数(字距 / 行高 / 正文宽)、间距刻度、灰梯度、主色,全部进
|
|
105
|
-
`@theme`(Tailwind 4 的 CSS-first 配置),页面上只允许出现刻度里的值。
|
|
106
|
-
`tracking-[0.06em]` 这类任意值逃逸写法出现在正文上,= 排版系统破产的信号。
|
|
107
|
-
字体链 CJK 规矩照旧。
|
|
108
|
-
|
|
109
|
-
## 回合节奏(一核机器的现实)
|
|
110
|
-
|
|
111
|
-
- **凑一批改动跑一次 build**,不是每笔一 build。小工程一次 build 5~15 秒,
|
|
112
|
-
回合里最贵的不是它,是你为它排队的次数
|
|
113
|
-
- build 验收后才准截图:`npm run build && echo BUILD_OK` —— 没看到 BUILD_OK
|
|
114
|
-
就去修错,**别截图**。build 失败时 dist 里躺着上一版,截图会"看见"旧画面,
|
|
115
|
-
让你以为改动无效、往错误方向排查 —— 这是构建道最贵的幻觉
|
|
116
|
-
- **绝不起 dev server**:`npm run dev` 是常驻进程,会挂死你的命令回合;平台
|
|
117
|
-
预览也不看它 —— 预览只认产物根的静态文件。构建道的"热重载"就是
|
|
118
|
-
build + 按页刷新
|
|
119
|
-
- 每加一个包先问一句:CDN 一行、或手写三十行,是不是就够 —— node_modules
|
|
120
|
-
不进导出、不进发布,纯粹是工作区里的重量
|
|
121
|
-
|
|
122
|
-
## 素材与内容站
|
|
123
|
-
|
|
124
|
-
- 素材放 `public/assets/`(build 原样拷进 dist),页面里按手写道同样的相对
|
|
125
|
-
路径规矩引。生成图落地后要**再 build 一次**才出现在产物里 —— 跟改源同一
|
|
126
|
-
节拍,凑批处理
|
|
127
|
-
- 几十篇 md 的内容站:**自写 build 脚本优先**(node + marked,六十行的事)——
|
|
128
|
-
模板全权在你手里,相对路径天然合规。Astro / 11ty 也跑得通,但它们的链接
|
|
129
|
-
与资源默认根路径,你得逆着它们的世界观拧配置;不熟就别选贵的
|
|
130
|
-
|
|
131
|
-
## DirectEdit 回写(构建道上会致命,多提一次)
|
|
132
|
-
|
|
133
|
-
用户在预览里直接改的字落在**产物**上,下一次 build 会冲掉。收到构建型站点的
|
|
134
|
-
DirectEdit 变更:先把改动同步回源(JSX / md / 模板里对应那处),再 build。
|
|
1
|
+
# 构建道 —— 组件库与打包器站点的平台配方
|
|
2
|
+
|
|
3
|
+
手写道(一夹 html + css)解决八成站点。这份配方讲剩下两成:什么时候值得上
|
|
4
|
+
构建,上了之后怎么不跟平台打架。
|
|
5
|
+
|
|
6
|
+
## 什么时候上构建道
|
|
7
|
+
|
|
8
|
+
**真信号**(有一条就值得):
|
|
9
|
+
|
|
10
|
+
- 同一块 UI 结构在三处以上重复、而且还会继续长 —— 组件复用是唯一还不掉的债
|
|
11
|
+
- 交互核心有状态:筛选器 / 计算器 / 播放器 / 小编辑器。手写 DOM 操作超过
|
|
12
|
+
两百行,就该让框架管状态了
|
|
13
|
+
- 内容源是数据不是页面:几十篇 md、一份 JSON 目录 —— 页面应该被**生成**,
|
|
14
|
+
不该被逐页维护
|
|
15
|
+
- 要用 npm 独占的库(CDN 上没有,或 CDN 版残缺)
|
|
16
|
+
|
|
17
|
+
**假信号**(听着像,其实不是):
|
|
18
|
+
|
|
19
|
+
- 「显得正经 / 专业」—— 观感由排版和素材决定,不由构建工具决定
|
|
20
|
+
- 「以后可能要扩展」—— 到那天再迁。迁移的一次性成本低于工具链税的利息
|
|
21
|
+
- 「动效复杂」—— gsap / lenis 走 CDN 就够,动效从来不是上构建的理由
|
|
22
|
+
|
|
23
|
+
## 三条平台硬约束(违反 = 404 或感知失明)
|
|
24
|
+
|
|
25
|
+
1. **`base: './'`**。预览与导出都挂在 `…/artifact-file/<路径>` 深前缀下,打包器
|
|
26
|
+
默认产出的 `/assets/xx.js` 根路径会跳出前缀直接 404。vite 一行 `base: './'`
|
|
27
|
+
解决;选别的工具前先确认它能**全相对**输出(Astro / Next 在这点上很拧,
|
|
28
|
+
别硬掰)。
|
|
29
|
+
2. **页 = html 入口,router 不进站点**。`list_pages`、按页截图、按页刷新、整站
|
|
30
|
+
导出全按 html 文件寻址;SPA + 客户端路由让这些全部失明,深链接发布后照样
|
|
31
|
+
404。多页 = vite `rollupOptions.input` 多入口。例外:纯应用站(整站就是一个
|
|
32
|
+
工具)单页、无路由,随意。
|
|
33
|
+
3. **产物纯静态**照旧(SSR / 常驻进程不行)。`vite build` 落 `dist/`,系统自动
|
|
34
|
+
认作产物根。
|
|
35
|
+
|
|
36
|
+
## 起手:五个文件手写,不用脚手架
|
|
37
|
+
|
|
38
|
+
`npm create vite` 是交互式命令(会挂住回合),给的还是单页 App 模板 —— 跟
|
|
39
|
+
约束 2 打架。自己来,30 秒的事:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
mkdir 站名 && cd 站名
|
|
43
|
+
npm i --no-audit --no-fund react react-dom
|
|
44
|
+
npm i -D --no-audit --no-fund vite @vitejs/plugin-react tailwindcss @tailwindcss/vite
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
版本让 npm 解到当前大版本,**别手填猜的版本号**(猜错一个 peer 链全断)。
|
|
48
|
+
发布不满一年的新锐库默认不用 —— 你对它的知识大概率是错版本的。
|
|
49
|
+
|
|
50
|
+
```jsonc
|
|
51
|
+
// package.json 里 build 必须写进 scripts ——
|
|
52
|
+
// 工程交付包带源不带依赖,接手的人靠 `npm i && npm run build` 续命
|
|
53
|
+
{ "scripts": { "build": "vite build" } }
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
```js
|
|
57
|
+
// vite.config.js
|
|
58
|
+
import { defineConfig } from 'vite'
|
|
59
|
+
import react from '@vitejs/plugin-react'
|
|
60
|
+
import tailwindcss from '@tailwindcss/vite'
|
|
61
|
+
|
|
62
|
+
export default defineConfig({
|
|
63
|
+
base: './', // 硬约束 1
|
|
64
|
+
plugins: [react(), tailwindcss()],
|
|
65
|
+
build: { rollupOptions: { input: ['index.html', 'about.html'] } }, // 每页一入口
|
|
66
|
+
})
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
其余两件:`index.html`(真内容写在里面,见下节)和 `src/`(每页一个小入口 js)。
|
|
70
|
+
|
|
71
|
+
## html 是骨架,React 是器官
|
|
72
|
+
|
|
73
|
+
平台的感知层读的是 html:`list_pages` 从产物 html 里抓 `<a>` 拼站点结构和断链
|
|
74
|
+
清单,Read 产物页看到的是标签正文。整页 JSX 渲染 = 产物 html 只剩一个
|
|
75
|
+
`<div id="root">` —— 结构失明、断链失明,发布后搜索引擎同样瞎。
|
|
76
|
+
|
|
77
|
+
所以:**内容仍写在真 html 里**(或由脚本生成真 html),React 只挂需要状态的
|
|
78
|
+
那一块:
|
|
79
|
+
|
|
80
|
+
```html
|
|
81
|
+
<section id="filter-app"></section> <!-- 只有这一块是 React 的 -->
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
每页一个小入口 js 挂自己的器官。纯应用站例外:整页 React,感知靠截图,
|
|
85
|
+
结构靠你自己心里有数。
|
|
86
|
+
|
|
87
|
+
## 组件库:抄进来,不是装进来
|
|
88
|
+
|
|
89
|
+
装一个 kit(MUI / AntD / Chakra)= 把整站气质外包给别人的默认值 —— 反默认
|
|
90
|
+
清单里每一条它都替你答了,答的全是均值;而且它跟你的排版系统(三个数、间距
|
|
91
|
+
刻度、灰梯度)各论各的。需要现成组件时用**抄**的:
|
|
92
|
+
|
|
93
|
+
- 行为复杂、样式想自己定的(弹层 / 下拉 / tabs / 无障碍):headless 一层
|
|
94
|
+
(radix 系),皮全自己画
|
|
95
|
+
- shadcn 式 copy-in:组件**源码落进工作区**才改得动气质;装成依赖的组件
|
|
96
|
+
你只能"配置"它
|
|
97
|
+
- 图表(echarts)、3D(three)这类**画布型**库不在此列 —— 它们不带 UI 气质,
|
|
98
|
+
正常装正常 import
|
|
99
|
+
|
|
100
|
+
## Tailwind 的立场(跟手写道不同,不矛盾)
|
|
101
|
+
|
|
102
|
+
手写道不推 utility,理由是**用户自己要改得动**(改行高不能改一百处)。构建道
|
|
103
|
+
上改样式的人是你,这条理由消失,utility 的密度优势成立。但气质旋钮必须还是
|
|
104
|
+
集中的:三个数(字距 / 行高 / 正文宽)、间距刻度、灰梯度、主色,全部进
|
|
105
|
+
`@theme`(Tailwind 4 的 CSS-first 配置),页面上只允许出现刻度里的值。
|
|
106
|
+
`tracking-[0.06em]` 这类任意值逃逸写法出现在正文上,= 排版系统破产的信号。
|
|
107
|
+
字体链 CJK 规矩照旧。
|
|
108
|
+
|
|
109
|
+
## 回合节奏(一核机器的现实)
|
|
110
|
+
|
|
111
|
+
- **凑一批改动跑一次 build**,不是每笔一 build。小工程一次 build 5~15 秒,
|
|
112
|
+
回合里最贵的不是它,是你为它排队的次数
|
|
113
|
+
- build 验收后才准截图:`npm run build && echo BUILD_OK` —— 没看到 BUILD_OK
|
|
114
|
+
就去修错,**别截图**。build 失败时 dist 里躺着上一版,截图会"看见"旧画面,
|
|
115
|
+
让你以为改动无效、往错误方向排查 —— 这是构建道最贵的幻觉
|
|
116
|
+
- **绝不起 dev server**:`npm run dev` 是常驻进程,会挂死你的命令回合;平台
|
|
117
|
+
预览也不看它 —— 预览只认产物根的静态文件。构建道的"热重载"就是
|
|
118
|
+
build + 按页刷新
|
|
119
|
+
- 每加一个包先问一句:CDN 一行、或手写三十行,是不是就够 —— node_modules
|
|
120
|
+
不进导出、不进发布,纯粹是工作区里的重量
|
|
121
|
+
|
|
122
|
+
## 素材与内容站
|
|
123
|
+
|
|
124
|
+
- 素材放 `public/assets/`(build 原样拷进 dist),页面里按手写道同样的相对
|
|
125
|
+
路径规矩引。生成图落地后要**再 build 一次**才出现在产物里 —— 跟改源同一
|
|
126
|
+
节拍,凑批处理
|
|
127
|
+
- 几十篇 md 的内容站:**自写 build 脚本优先**(node + marked,六十行的事)——
|
|
128
|
+
模板全权在你手里,相对路径天然合规。Astro / 11ty 也跑得通,但它们的链接
|
|
129
|
+
与资源默认根路径,你得逆着它们的世界观拧配置;不熟就别选贵的
|
|
130
|
+
|
|
131
|
+
## DirectEdit 回写(构建道上会致命,多提一次)
|
|
132
|
+
|
|
133
|
+
用户在预览里直接改的字落在**产物**上,下一次 build 会冲掉。收到构建型站点的
|
|
134
|
+
DirectEdit 变更:先把改动同步回源(JSX / md / 模板里对应那处),再 build。
|
|
@@ -1,61 +1,61 @@
|
|
|
1
|
-
# 抠图叠层(贴纸感拼贴)
|
|
2
|
-
|
|
3
|
-
透明抠图当**版面元素**用,不是当配图。配图待在自己的框里;版面元素参与排版 ——
|
|
4
|
-
压线、越界、垫在文字后面。个人站 / 产品页 / 有吉祥物的品牌最吃这套。
|
|
5
|
-
|
|
6
|
-
## 管线
|
|
7
|
-
|
|
8
|
-
1. `generate_image` 出主体(prompt 里要求简洁背景、主体完整、边缘清晰 ——
|
|
9
|
-
纯色底的图抠得最干净)
|
|
10
|
-
2. `mcp__nodesign__remove_background({ inputPath })` → RGBA PNG
|
|
11
|
-
3. `cp` 进任务本地 `assets/`,站内相对路径引用
|
|
12
|
-
|
|
13
|
-
薄透元素(玻璃 / 烟雾 / 飘发 / 半透明纱)抠不干净是 ML 抠图的物理极限,
|
|
14
|
-
这类主体生图时就避开,或者接受边缘软。
|
|
15
|
-
|
|
16
|
-
## 三种叠法
|
|
17
|
-
|
|
18
|
-
**① 骑线**:主体跨在两个区块的分界上,把"分割"变成"衔接"。
|
|
19
|
-
|
|
20
|
-
```css
|
|
21
|
-
.divider-figure {
|
|
22
|
-
position: relative;
|
|
23
|
-
margin-top: -60px; /* 探进上一节 */
|
|
24
|
-
margin-bottom: -20px; /* 压住下一节开头 */
|
|
25
|
-
z-index: 2;
|
|
26
|
-
}
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
**② 探出边缘**:吉祥物 / 人物从正文容器边上探出来,打破盒子感。
|
|
30
|
-
|
|
31
|
-
```css
|
|
32
|
-
.peek {
|
|
33
|
-
position: absolute;
|
|
34
|
-
right: -48px; /* 一部分出界 */
|
|
35
|
-
bottom: 0;
|
|
36
|
-
width: 180px;
|
|
37
|
-
transform: rotate(3deg);
|
|
38
|
-
}
|
|
39
|
-
.text-block { position: relative; overflow: visible; }
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
**③ 散落**:小物件(星星 / 邮票 / 道具)随机感地撒在标题周围或节间空白。
|
|
43
|
-
每个带一点不同的旋转和尺寸,两三个就够,撒多了变星空背景。
|
|
44
|
-
|
|
45
|
-
## 让它像贴纸而不是浮着的 PNG
|
|
46
|
-
|
|
47
|
-
- **微旋转**:-3° ~ 3°,每张不同。0° 的抠图看着像素材库,歪一点才像人手贴的
|
|
48
|
-
- **阴影贴地**:`filter: drop-shadow(0 6px 12px rgba(0,0,0,.18))` ——
|
|
49
|
-
用 drop-shadow 不用 box-shadow(后者会给透明区画一个矩形影子)
|
|
50
|
-
- **白边贴纸风**(可选,适合手帐 / 复古气质):
|
|
51
|
-
`filter: drop-shadow(0 0 0 #fff) drop-shadow(0 0 1px #fff)` 叠几层出白描边,
|
|
52
|
-
或生图时直接要求 sticker style with white border
|
|
53
|
-
- **尺寸克制**:版面元素不是主图,探出的部分占正文宽 15~25% 就有效果
|
|
54
|
-
|
|
55
|
-
## 责任边界
|
|
56
|
-
|
|
57
|
-
- 叠层元素一律 `position: absolute` / 负 margin + `z-index`,**别让它参与文档流**,
|
|
58
|
-
不然改一段文字整页元素跟着跳
|
|
59
|
-
- 窄屏必须处理:探出屏幕外、盖住正文都是常见事故。`max-width: 860px` 断点里
|
|
60
|
-
要么缩小收回,要么 `display: none` —— 装饰元素在手机上消失是完全正当的
|
|
61
|
-
- `screenshot_canvas { device: 'mobile' }` 看一眼再算完成
|
|
1
|
+
# 抠图叠层(贴纸感拼贴)
|
|
2
|
+
|
|
3
|
+
透明抠图当**版面元素**用,不是当配图。配图待在自己的框里;版面元素参与排版 ——
|
|
4
|
+
压线、越界、垫在文字后面。个人站 / 产品页 / 有吉祥物的品牌最吃这套。
|
|
5
|
+
|
|
6
|
+
## 管线
|
|
7
|
+
|
|
8
|
+
1. `generate_image` 出主体(prompt 里要求简洁背景、主体完整、边缘清晰 ——
|
|
9
|
+
纯色底的图抠得最干净)
|
|
10
|
+
2. `mcp__nodesign__remove_background({ inputPath })` → RGBA PNG
|
|
11
|
+
3. `cp` 进任务本地 `assets/`,站内相对路径引用
|
|
12
|
+
|
|
13
|
+
薄透元素(玻璃 / 烟雾 / 飘发 / 半透明纱)抠不干净是 ML 抠图的物理极限,
|
|
14
|
+
这类主体生图时就避开,或者接受边缘软。
|
|
15
|
+
|
|
16
|
+
## 三种叠法
|
|
17
|
+
|
|
18
|
+
**① 骑线**:主体跨在两个区块的分界上,把"分割"变成"衔接"。
|
|
19
|
+
|
|
20
|
+
```css
|
|
21
|
+
.divider-figure {
|
|
22
|
+
position: relative;
|
|
23
|
+
margin-top: -60px; /* 探进上一节 */
|
|
24
|
+
margin-bottom: -20px; /* 压住下一节开头 */
|
|
25
|
+
z-index: 2;
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**② 探出边缘**:吉祥物 / 人物从正文容器边上探出来,打破盒子感。
|
|
30
|
+
|
|
31
|
+
```css
|
|
32
|
+
.peek {
|
|
33
|
+
position: absolute;
|
|
34
|
+
right: -48px; /* 一部分出界 */
|
|
35
|
+
bottom: 0;
|
|
36
|
+
width: 180px;
|
|
37
|
+
transform: rotate(3deg);
|
|
38
|
+
}
|
|
39
|
+
.text-block { position: relative; overflow: visible; }
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**③ 散落**:小物件(星星 / 邮票 / 道具)随机感地撒在标题周围或节间空白。
|
|
43
|
+
每个带一点不同的旋转和尺寸,两三个就够,撒多了变星空背景。
|
|
44
|
+
|
|
45
|
+
## 让它像贴纸而不是浮着的 PNG
|
|
46
|
+
|
|
47
|
+
- **微旋转**:-3° ~ 3°,每张不同。0° 的抠图看着像素材库,歪一点才像人手贴的
|
|
48
|
+
- **阴影贴地**:`filter: drop-shadow(0 6px 12px rgba(0,0,0,.18))` ——
|
|
49
|
+
用 drop-shadow 不用 box-shadow(后者会给透明区画一个矩形影子)
|
|
50
|
+
- **白边贴纸风**(可选,适合手帐 / 复古气质):
|
|
51
|
+
`filter: drop-shadow(0 0 0 #fff) drop-shadow(0 0 1px #fff)` 叠几层出白描边,
|
|
52
|
+
或生图时直接要求 sticker style with white border
|
|
53
|
+
- **尺寸克制**:版面元素不是主图,探出的部分占正文宽 15~25% 就有效果
|
|
54
|
+
|
|
55
|
+
## 责任边界
|
|
56
|
+
|
|
57
|
+
- 叠层元素一律 `position: absolute` / 负 margin + `z-index`,**别让它参与文档流**,
|
|
58
|
+
不然改一段文字整页元素跟着跳
|
|
59
|
+
- 窄屏必须处理:探出屏幕外、盖住正文都是常见事故。`max-width: 860px` 断点里
|
|
60
|
+
要么缩小收回,要么 `display: none` —— 装饰元素在手机上消失是完全正当的
|
|
61
|
+
- `screenshot_canvas { device: 'mobile' }` 看一眼再算完成
|