@proteus-vue/create-proteus 0.3.0-beta.32 → 0.3.0-beta.33

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@proteus-vue/create-proteus",
3
- "version": "0.3.0-beta.32",
3
+ "version": "0.3.0-beta.33",
4
4
  "description": "Proteus 脚手架:npm create @proteus-vue/proteus my-app —— 一键生成 Web + 微信小程序(Skyline)双端工程",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -10,6 +10,15 @@
10
10
  "dev:mp": "proteus dev --target skyline",
11
11
  "build:mp": "proteus build --target skyline",
12
12
  "debug:mp": "PROTEUS_DEBUG=1 proteus build --target skyline",
13
+ "dev:android": "proteus dev --target android",
14
+ "build:android": "proteus build --target android",
15
+ "package:android": "proteus build --target android --package",
16
+ "dev:ios": "proteus dev --target ios",
17
+ "build:ios": "proteus build --target ios",
18
+ "package:ios": "proteus build --target ios --package",
19
+ "dev:harmony": "proteus dev --target harmony",
20
+ "build:harmony": "proteus build --target harmony",
21
+ "package:harmony": "proteus build --target harmony --package",
13
22
  "proteus": "proteus"
14
23
  },
15
24
  "dependencies": {
@@ -9,6 +9,9 @@ const config: ProteusConfig = {
9
9
  mp: {
10
10
  appid: 'wx0000000000', // 替换为真实 AppID
11
11
  renderer: 'skyline',
12
+ // ★全局样式(设计令牌 + 页面基线):小程序端 → app.wxss;Web 端在 src/main.ts import;
13
+ // App 端构建期折进节点样式(一份文件、四端一致——详见 src/styles/global.css)
14
+ globalStyle: 'src/styles/global.css',
12
15
  // ★底线循环 ①③:规则覆盖(改这里立即改变编译行为)
13
16
  rules: {
14
17
  disabled: [],
@@ -1,5 +1,7 @@
1
1
  // src/main.ts —— Web 端入口(Web 原生、零转换:标准 Vue SPA)
2
2
  import { createApp } from 'vue'
3
3
  import App from './App.vue'
4
+ // 全局样式(与小程序端 app.wxss / App 端编译期折叠**同一份**——proteus.config 的 globalStyle)
5
+ import './styles/global.css'
4
6
 
5
7
  createApp(App).mount('#app')
@@ -1,4 +1,10 @@
1
- <!-- src/pages/index.vue —— 首页(路由页面:编译期由 gen-routes 扫描注册) -->
1
+ <!-- src/pages/index.vue —— 首页(路由页面:编译期由 gen-routes 扫描注册,写入 router/auto-routes.ts)
2
+
3
+ 设计基准:与仓库 css-conformance(全端对齐验收项目)同一套写法——
4
+ · 原始标签(div / h1 / p / button),不依赖内置组件;
5
+ · 跨端一致性靠:静态 class(编译期折叠到各端节点)+ 设计令牌
6
+ (src/styles/global.css 的 :root,App 端编译期展开)+ 满宽页根。
7
+ » 本文件就是「一份标准 Vue 源码 → 多端真实渲染」的最小样例,可直接改成你的页面。 -->
2
8
  <route>
3
9
  {
4
10
  "meta": {
@@ -7,27 +13,178 @@
7
13
  }
8
14
  }
9
15
  </route>
16
+
10
17
  <script setup lang="ts">
11
18
  import { ref } from 'vue'
12
19
 
20
+ // 唯一的动态状态:交互演示的计数。
21
+ // ★四端一致:点击实时更新(App 端走内联动作 → 运行期 handler;方法引用 @click="fn" 在 App 端不产出事件)。
13
22
  const count = ref(0)
14
-
15
- function handleTap() {
16
- count.value++
17
- }
18
23
  </script>
19
24
 
20
25
  <template>
21
- <div class="home">
22
- <h1>Hello Proteus</h1>
23
- <p class="tapped-count">tapped {{ count }} times</p>
24
- <button @click="handleTap">tap</button>
26
+ <div class="page">
27
+ <!-- ① 品牌区 -->
28
+ <div class="hero">
29
+ <div class="badge">PROTEUS</div>
30
+ <h1 class="hero-title">一次编写,多端运行</h1>
31
+ <p class="hero-sub">一份标准 Vue 源码,编译到小程序与 App 全端。</p>
32
+ </div>
33
+
34
+ <!-- ② 关键数字 -->
35
+ <div class="stats">
36
+ <div class="stat">
37
+ <div class="stat-value">5</div>
38
+ <div class="stat-label">目标端</div>
39
+ </div>
40
+ <div class="stat">
41
+ <div class="stat-value">1</div>
42
+ <div class="stat-label">份源码</div>
43
+ </div>
44
+ <div class="stat">
45
+ <div class="stat-value">0</div>
46
+ <div class="stat-label">条件编译</div>
47
+ </div>
48
+ </div>
49
+
50
+ <!-- ③ 交互演示(验证响应式多端一致) -->
51
+ <h2 class="section-title">交互演示</h2>
52
+ <div class="card">
53
+ <p class="card-desc">点一下,计数实时更新 —— 同一份逻辑在 Web / 小程序 / App 表现一致。</p>
54
+ <button class="btn" @click="count++">点我 +1</button>
55
+ <div class="counter">已点击 {{ count }} 次</div>
56
+ </div>
57
+
58
+ <!-- ④ 下一步 -->
59
+ <h2 class="section-title">下一步</h2>
60
+ <div class="card step">
61
+ <div class="step-title">配置目标端</div>
62
+ <p class="step-desc">在 proteus.config.ts 里设置小程序 AppID 与 App 包名。</p>
63
+ </div>
64
+ <div class="card step">
65
+ <div class="step-title">换成你的界面</div>
66
+ <p class="step-desc">本页就是普通 Vue SFC —— 直接改 template 与 style 即可。</p>
67
+ </div>
68
+ <div class="card step">
69
+ <div class="step-title">构建到各端</div>
70
+ <p class="step-desc">npm run build:mp / build:android / build:ios / build:harmony。</p>
71
+ </div>
25
72
  </div>
26
73
  </template>
27
74
 
28
75
  <style>
29
- .home {
76
+ /* 页面级样式:静态 class + 设计令牌(var(--x) 指向 global.css 的 :root)。
77
+ 编译期折叠到各端节点(App 端 var() 展开为具体值)——四端一致。
78
+ 不使用 :hover / 伪类等 App 端尚不支持的选择器。
79
+ ↓↓↓ 换成你的品牌色 / 主题:改 src/styles/global.css 的 :root 即可。 */
80
+
81
+ .hero {
82
+ display: flex;
83
+ flex-direction: column;
84
+ align-items: flex-start;
85
+ padding: 8px 0 4px;
86
+ }
87
+
88
+ .badge {
89
+ display: block;
90
+ font-size: 11px;
91
+ font-weight: 700;
92
+ letter-spacing: 1px;
93
+ color: var(--brand);
94
+ background-color: var(--brand-soft);
95
+ border-radius: 6px;
96
+ padding: 4px 8px;
97
+ }
98
+
99
+ .hero-title {
100
+ display: block;
101
+ font-size: 28px;
102
+ font-weight: 800;
103
+ line-height: 1.3;
104
+ color: var(--text);
105
+ margin: 14px 0 0;
106
+ }
107
+
108
+ .hero-sub {
109
+ display: block;
110
+ font-size: 14px;
111
+ line-height: 1.6;
112
+ color: var(--text-2);
113
+ margin: 8px 0 0;
114
+ }
115
+
116
+ .stats {
117
+ display: flex;
118
+ flex-direction: row;
119
+ gap: 12px;
120
+ margin-top: 20px;
121
+ }
122
+
123
+ .stat {
124
+ flex: 1;
125
+ background-color: var(--surface);
126
+ border: 1px solid var(--line);
127
+ border-radius: 14px;
128
+ padding: 16px 8px;
129
+ }
130
+
131
+ .stat-value {
132
+ display: block;
133
+ font-size: 24px;
134
+ font-weight: 800;
135
+ color: var(--brand);
136
+ text-align: center;
137
+ }
138
+
139
+ .stat-label {
140
+ display: block;
141
+ font-size: 12px;
142
+ color: var(--text-3);
143
+ text-align: center;
144
+ margin-top: 4px;
145
+ }
146
+
147
+ .card-desc {
148
+ font-size: 13px;
149
+ line-height: 1.6;
150
+ color: var(--text-2);
151
+ margin: 0 0 12px;
152
+ }
153
+
154
+ .btn {
155
+ display: block;
156
+ font-size: 16px;
157
+ font-weight: 600;
158
+ color: #ffffff;
159
+ background-color: var(--brand);
160
+ border-radius: 12px;
161
+ padding: 13px 20px;
30
162
  text-align: center;
31
- padding: 48px 0;
163
+ width: 100%;
164
+ }
165
+
166
+ .counter {
167
+ font-size: 13px;
168
+ color: var(--text-3);
169
+ text-align: center;
170
+ margin-top: 12px;
171
+ }
172
+
173
+ .step {
174
+ margin-bottom: 10px;
175
+ }
176
+
177
+ .step-title {
178
+ display: block;
179
+ font-size: 14px;
180
+ font-weight: 600;
181
+ color: var(--text);
182
+ }
183
+
184
+ .step-desc {
185
+ font-size: 13px;
186
+ line-height: 1.6;
187
+ color: var(--text-2);
188
+ margin: 4px 0 0;
32
189
  }
33
190
  </style>
@@ -0,0 +1,57 @@
1
+ /* src/styles/global.css —— 全局样式(设计令牌 + 页面骨架)
2
+ ═══════════════════════════════════════════════════════════════════════════════
3
+ 【四端消费同一份】
4
+ · Web —— src/main.ts 里 `import './styles/global.css'`
5
+ · 小程序 —— proteus.config.ts 的 targets.mp.globalStyle(→ app.wxss)
6
+ · App —— 构建期把这里的 `:root` 令牌与 `.class` 规则**折进**各节点样式
7
+ (App 端无运行时 CSS 引擎,`var()` 在编译期展开为具体值)
8
+ ⇒ 一份文件、四端一致,无需为任何端分叉。
9
+
10
+ 本写法(`:root` 令牌 + 静态 class + var())与仓库 css-conformance(全端对齐验收项目)
11
+ 同一套,已在四端验证。改主题:只改下面 :root 的值。
12
+ ═══════════════════════════════════════════════════════════════════════════════ */
13
+
14
+ /* 根重置:浏览器 body 默认 margin 8px 会让灰底四周露白(App / 小程序无此概念)——统一清零。 */
15
+ html,
16
+ body {
17
+ margin: 0;
18
+ padding: 0;
19
+ }
20
+
21
+ /* 设计令牌(全局主题变量)——改这里即可全局换肤 */
22
+ :root {
23
+ --brand: #4f46e5;
24
+ --brand-soft: #ede9fe;
25
+ --bg: #f5f6f8;
26
+ --surface: #ffffff;
27
+ --line: #e6e8ec;
28
+ --text: #16181d;
29
+ --text-2: #5b616e;
30
+ --text-3: #8b909c;
31
+ }
32
+
33
+ /* 页面骨架:满宽 + 安全区避让(App 端状态栏/手势条由 --pf-inset-* 提供,Web/小程序取 0)。 */
34
+ .page {
35
+ width: 100%;
36
+ min-height: 100vh;
37
+ box-sizing: border-box;
38
+ background-color: var(--bg);
39
+ padding: calc(var(--pf-inset-top, 0px) + 20px) 16px calc(var(--pf-inset-bottom, 0px) + 40px);
40
+ }
41
+
42
+ /* 卡片:真实业务里最常见的容器形态(列表项 / 面板 / 区块) */
43
+ .card {
44
+ background-color: var(--surface);
45
+ border: 1px solid var(--line);
46
+ border-radius: 14px;
47
+ padding: 16px;
48
+ }
49
+
50
+ /* 区块小标题 */
51
+ .section-title {
52
+ display: block;
53
+ font-size: 15px;
54
+ font-weight: 700;
55
+ color: var(--text);
56
+ margin: 24px 0 12px;
57
+ }