create-rue 0.0.1
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/LICENSE +539 -0
- package/README.md +22 -0
- package/bundle.js +2862 -0
- package/package.json +58 -0
- package/template/base/.editorconfig +6 -0
- package/template/base/.gitattributes +1 -0
- package/template/base/.oxfmtrc.json +5 -0
- package/template/base/.oxlintrc.json +11 -0
- package/template/base/app/app.tsx +12 -0
- package/template/base/app/main.ts +2 -0
- package/template/base/app/pages/Ecosystem.tsx +47 -0
- package/template/base/app/pages/Guide.tsx +49 -0
- package/template/base/app/pages/Home.tsx +85 -0
- package/template/base/app/pages/Packages.tsx +52 -0
- package/template/base/app/pages/components/Layout.tsx +67 -0
- package/template/base/app/router.ts +14 -0
- package/template/base/index.html +16 -0
- package/template/base/package-lock.json +2425 -0
- package/template/base/package.json +37 -0
- package/template/base/pnpm-lock.yaml +1513 -0
- package/template/base/style.css +433 -0
- package/template/base/tailwind.config.ts +7 -0
- package/template/base/tsconfig.json +22 -0
- package/template/base/vite.config.ts +18 -0
package/package.json
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "create-rue",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "🛠️ The recommended way to start a Vite-powered Rue project",
|
|
5
|
+
"keywords": [],
|
|
6
|
+
"homepage": "https://github.com/hunzhiwange/create-rue#readme",
|
|
7
|
+
"bugs": {
|
|
8
|
+
"url": "https://github.com/hunzhiwange/create-rue/issues"
|
|
9
|
+
},
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"author": "XiangminLiu <xiangminliu1990@gmail.com>",
|
|
12
|
+
"repository": {
|
|
13
|
+
"type": "git",
|
|
14
|
+
"url": "git+https://github.com/hunzhiwange/create-rue.git"
|
|
15
|
+
},
|
|
16
|
+
"bin": {
|
|
17
|
+
"create-rue": "bundle.js"
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"bundle.js",
|
|
21
|
+
"template",
|
|
22
|
+
"!template/**/node_modules/.bin/*"
|
|
23
|
+
],
|
|
24
|
+
"type": "module",
|
|
25
|
+
"publishConfig": {
|
|
26
|
+
"access": "public"
|
|
27
|
+
},
|
|
28
|
+
"scripts": {
|
|
29
|
+
"prepare": "vp config",
|
|
30
|
+
"format": "vp fmt",
|
|
31
|
+
"format-check": "vp fmt --check",
|
|
32
|
+
"lint": "vp lint . --fix",
|
|
33
|
+
"build": "rolldown -c rolldown.config.ts",
|
|
34
|
+
"snapshot": "zx ./scripts/snapshot.mjs",
|
|
35
|
+
"pretest": "pnpm run build && pnpm run snapshot",
|
|
36
|
+
"test": "zx ./scripts/test.mjs",
|
|
37
|
+
"test:unit": "vp test",
|
|
38
|
+
"preversion": "git fetch && git status -uno | grep -q 'Your branch is up to date'",
|
|
39
|
+
"postversion": "zx ./scripts/postversion.mjs",
|
|
40
|
+
"prepublishOnly": "pnpm run build"
|
|
41
|
+
},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@clack/prompts": "^1.2.0",
|
|
44
|
+
"@tsconfig/node24": "^24.0.4",
|
|
45
|
+
"@types/node": "^24.12.2",
|
|
46
|
+
"ejs": "^3.1.10",
|
|
47
|
+
"picocolors": "^1.1.1",
|
|
48
|
+
"rolldown": "1.0.0-rc.16",
|
|
49
|
+
"rollup-plugin-license": "^3.7.1",
|
|
50
|
+
"vite-plus": "catalog:",
|
|
51
|
+
"vitest": "catalog:",
|
|
52
|
+
"zx": "^8.8.5"
|
|
53
|
+
},
|
|
54
|
+
"engines": {
|
|
55
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
56
|
+
},
|
|
57
|
+
"packageManager": "pnpm@10.33.0"
|
|
58
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
* text=auto eol=lf
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type FC, useApp } from '@rue-js/rue'
|
|
2
|
+
import { RouterView } from '@rue-js/router'
|
|
3
|
+
import router from './router'
|
|
4
|
+
import SiteLayout from './pages/components/Layout'
|
|
5
|
+
|
|
6
|
+
const RootApp: FC = () => (
|
|
7
|
+
<SiteLayout>
|
|
8
|
+
<RouterView />
|
|
9
|
+
</SiteLayout>
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
useApp(RootApp).use(router).mount('#app')
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { type FC } from '@rue-js/rue'
|
|
2
|
+
|
|
3
|
+
const ecosystemItems = [
|
|
4
|
+
{
|
|
5
|
+
title: '官网入口',
|
|
6
|
+
desc: '用最小 Rue 应用结构承载内容页面,便于继续往文档站或产品站扩展。',
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
title: '路由层',
|
|
10
|
+
desc: '通过 hash history 直接适配静态站点部署,不要求服务端额外做重写配置。',
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
title: '构建层',
|
|
14
|
+
desc: '依赖 Vite 与官方插件完成编译,生产构建方式和外部用户保持一致。',
|
|
15
|
+
},
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
const Ecosystem: FC = () => (
|
|
19
|
+
<div className="page-stack">
|
|
20
|
+
<section className="content-card">
|
|
21
|
+
<p className="section-tag">生态能力</p>
|
|
22
|
+
<h1>从应用迁移到官网的结构拆分</h1>
|
|
23
|
+
<p>迁移后的站点把入口、路由、布局和内容页解耦,后续扩展成完整官网时会更容易维护。</p>
|
|
24
|
+
</section>
|
|
25
|
+
|
|
26
|
+
<section className="grid-cards">
|
|
27
|
+
{ecosystemItems.map(item => (
|
|
28
|
+
<article key={item.title} className="info-card">
|
|
29
|
+
<h2>{item.title}</h2>
|
|
30
|
+
<p>{item.desc}</p>
|
|
31
|
+
</article>
|
|
32
|
+
))}
|
|
33
|
+
</section>
|
|
34
|
+
|
|
35
|
+
<section className="content-card">
|
|
36
|
+
<h2>适合继续扩展的方向</h2>
|
|
37
|
+
<ul className="bullet-list">
|
|
38
|
+
<li>补充文档页与 API 页</li>
|
|
39
|
+
<li>接入组件示例与代码演示</li>
|
|
40
|
+
<li>增加下载、版本、生态导航</li>
|
|
41
|
+
<li>对接真实官网视觉资源</li>
|
|
42
|
+
</ul>
|
|
43
|
+
</section>
|
|
44
|
+
</div>
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
export default Ecosystem
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type FC } from '@rue-js/rue'
|
|
2
|
+
|
|
3
|
+
const steps = [
|
|
4
|
+
'安装 @rue-js/rue、@rue-js/router 与 @rue-js/vite-plugin-rue。',
|
|
5
|
+
'在 vite.config.ts 中注册 rue() 插件。',
|
|
6
|
+
'在 tsconfig.json 中设置 jsx 为 preserve,jsxImportSource 为 @rue-js/rue。',
|
|
7
|
+
'在 app/app.tsx 中创建根组件并通过 useApp 挂载到 #app。',
|
|
8
|
+
]
|
|
9
|
+
|
|
10
|
+
const Guide: FC = () => (
|
|
11
|
+
<div className="page-stack">
|
|
12
|
+
<section className="content-card">
|
|
13
|
+
<p className="section-tag">快速上手</p>
|
|
14
|
+
<h1>独立官网项目的最小接入方式</h1>
|
|
15
|
+
<p>
|
|
16
|
+
这个迁移版本采用真实发布包依赖,避免继续引用 monorepo 中的本地开发路径,能更准确反映外部用户的接入体验。
|
|
17
|
+
</p>
|
|
18
|
+
</section>
|
|
19
|
+
|
|
20
|
+
<section className="content-card">
|
|
21
|
+
<h2>接入步骤</h2>
|
|
22
|
+
<div className="step-list">
|
|
23
|
+
{steps.map((step, index) => (
|
|
24
|
+
<div key={step} className="step-item">
|
|
25
|
+
<span className="step-index">0{index + 1}</span>
|
|
26
|
+
<p>{step}</p>
|
|
27
|
+
</div>
|
|
28
|
+
))}
|
|
29
|
+
</div>
|
|
30
|
+
</section>
|
|
31
|
+
|
|
32
|
+
<section className="content-card">
|
|
33
|
+
<h2>配置示例</h2>
|
|
34
|
+
<pre className="code-block">{`import { defineConfig } from 'vite'
|
|
35
|
+
import VitePluginRue from '@rue-js/vite-plugin-rue'
|
|
36
|
+
|
|
37
|
+
export default defineConfig({
|
|
38
|
+
plugins: [
|
|
39
|
+
VitePluginRue({
|
|
40
|
+
include: ['/app/'],
|
|
41
|
+
debug: true,
|
|
42
|
+
}),
|
|
43
|
+
],
|
|
44
|
+
})`}</pre>
|
|
45
|
+
</section>
|
|
46
|
+
</div>
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
export default Guide
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { type FC } from '@rue-js/rue'
|
|
2
|
+
import { RouterLink } from '@rue-js/router'
|
|
3
|
+
|
|
4
|
+
const highlights = [
|
|
5
|
+
{
|
|
6
|
+
title: '原生 TSX 开发',
|
|
7
|
+
desc: '直接用发布到 npm 的 Rue 包构建应用,不依赖本地 workspace 或开发态别名。',
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
title: 'Vapor Native DOM',
|
|
11
|
+
desc: '保留 Rue 的细粒度更新模型,适合做展示站、文档站与交互型官网。',
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
title: '最小接入面',
|
|
15
|
+
desc: '官网项目只保留 Vite、Rue、Router 与官方插件,部署更直接。',
|
|
16
|
+
},
|
|
17
|
+
]
|
|
18
|
+
|
|
19
|
+
const packages = [
|
|
20
|
+
'@rue-js/rue',
|
|
21
|
+
'@rue-js/router',
|
|
22
|
+
'@rue-js/vite-plugin-rue',
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
const Home: FC = () => (
|
|
26
|
+
<div className="page-stack">
|
|
27
|
+
<section className="hero-card">
|
|
28
|
+
<div className="hero-copy">
|
|
29
|
+
<p className="eyebrow">已迁移为独立官网应用</p>
|
|
30
|
+
<h1>Rue.js 官网入口已改为直接消费 npm 发布包</h1>
|
|
31
|
+
<p className="hero-text">
|
|
32
|
+
当前站点不再依赖 monorepo 内部开发版本,而是按真实用户使用方式接入 Rue,适合直接部署与对外展示。
|
|
33
|
+
</p>
|
|
34
|
+
<div className="hero-actions">
|
|
35
|
+
<RouterLink to="/guide" className="button primary">
|
|
36
|
+
查看接入方式
|
|
37
|
+
</RouterLink>
|
|
38
|
+
<RouterLink to="/packages" className="button secondary">
|
|
39
|
+
查看包清单
|
|
40
|
+
</RouterLink>
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
<div className="hero-panel">
|
|
44
|
+
<div className="panel-title">入口结构</div>
|
|
45
|
+
<pre className="code-block">{`app/
|
|
46
|
+
├─ main.ts
|
|
47
|
+
├─ app.tsx
|
|
48
|
+
├─ router.ts
|
|
49
|
+
└─ pages/
|
|
50
|
+
|
|
51
|
+
useApp(RootApp)
|
|
52
|
+
.use(router)
|
|
53
|
+
.mount('#app')`}</pre>
|
|
54
|
+
</div>
|
|
55
|
+
</section>
|
|
56
|
+
|
|
57
|
+
<section className="grid-cards">
|
|
58
|
+
{highlights.map(item => (
|
|
59
|
+
<article key={item.title} className="info-card">
|
|
60
|
+
<h2>{item.title}</h2>
|
|
61
|
+
<p>{item.desc}</p>
|
|
62
|
+
</article>
|
|
63
|
+
))}
|
|
64
|
+
</section>
|
|
65
|
+
|
|
66
|
+
<section className="split-card">
|
|
67
|
+
<div>
|
|
68
|
+
<p className="section-tag">官网目标</p>
|
|
69
|
+
<h2>把原来的应用入口整理成一个可独立构建的官方站点</h2>
|
|
70
|
+
<p>
|
|
71
|
+
这里保留了 Rue 应用的基础结构:应用入口、路由、布局与页面拆分;同时移除了依赖本地源码映射与开发期工作区包的部分。
|
|
72
|
+
</p>
|
|
73
|
+
</div>
|
|
74
|
+
<div className="package-list">
|
|
75
|
+
{packages.map(name => (
|
|
76
|
+
<span key={name} className="package-pill">
|
|
77
|
+
{name}
|
|
78
|
+
</span>
|
|
79
|
+
))}
|
|
80
|
+
</div>
|
|
81
|
+
</section>
|
|
82
|
+
</div>
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
export default Home
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { type FC } from '@rue-js/rue'
|
|
2
|
+
|
|
3
|
+
const packageRows = [
|
|
4
|
+
{
|
|
5
|
+
name: '@rue-js/rue',
|
|
6
|
+
role: '核心运行时与 TSX API',
|
|
7
|
+
detail: '提供 FC、useApp 以及响应式能力,是官网应用的主入口依赖。',
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
name: '@rue-js/router',
|
|
11
|
+
role: '前端路由',
|
|
12
|
+
detail: '提供 RouterView、RouterLink 与 createRouter,用于承载官网页面切换。',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
name: '@rue-js/vite-plugin-rue',
|
|
16
|
+
role: 'Vite 集成插件',
|
|
17
|
+
detail: '处理 Rue 的编译接入,让 TSX 在独立 Vite 项目中正常工作。',
|
|
18
|
+
},
|
|
19
|
+
]
|
|
20
|
+
|
|
21
|
+
const Packages: FC = () => (
|
|
22
|
+
<div className="page-stack">
|
|
23
|
+
<section className="content-card">
|
|
24
|
+
<p className="section-tag">Packages</p>
|
|
25
|
+
<h1>当前官网使用的 npm 包</h1>
|
|
26
|
+
<p>现在的站点只保留正式发布包依赖,便于版本管理、构建复现与生产部署。</p>
|
|
27
|
+
</section>
|
|
28
|
+
|
|
29
|
+
<section className="table-card">
|
|
30
|
+
<div className="table-head">
|
|
31
|
+
<span>包名</span>
|
|
32
|
+
<span>职责</span>
|
|
33
|
+
<span>说明</span>
|
|
34
|
+
</div>
|
|
35
|
+
{packageRows.map(row => (
|
|
36
|
+
<div key={row.name} className="table-row">
|
|
37
|
+
<span className="cell-name">{row.name}</span>
|
|
38
|
+
<span>{row.role}</span>
|
|
39
|
+
<span>{row.detail}</span>
|
|
40
|
+
</div>
|
|
41
|
+
))}
|
|
42
|
+
</section>
|
|
43
|
+
|
|
44
|
+
<section className="content-card">
|
|
45
|
+
<h2>安装命令</h2>
|
|
46
|
+
<pre className="code-block">{`npm install @rue-js/rue @rue-js/router
|
|
47
|
+
npm install -D vite typescript @rue-js/vite-plugin-rue`}</pre>
|
|
48
|
+
</section>
|
|
49
|
+
</div>
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
export default Packages
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { type FC } from '@rue-js/rue'
|
|
2
|
+
import { RouterLink, useRoute } from '@rue-js/router'
|
|
3
|
+
|
|
4
|
+
const navItems = [
|
|
5
|
+
{ to: '/', label: '首页' },
|
|
6
|
+
{ to: '/guide', label: '快速上手' },
|
|
7
|
+
{ to: '/packages', label: '包与集成' },
|
|
8
|
+
{ to: '/ecosystem', label: '生态能力' },
|
|
9
|
+
]
|
|
10
|
+
|
|
11
|
+
const Header: FC = () => {
|
|
12
|
+
const route = useRoute()
|
|
13
|
+
const currentPath = route.get()?.path || '/'
|
|
14
|
+
|
|
15
|
+
return (
|
|
16
|
+
<header className="site-header">
|
|
17
|
+
<div className="shell header-inner">
|
|
18
|
+
<RouterLink to="/" className="brand">
|
|
19
|
+
<span className="brand-mark">R</span>
|
|
20
|
+
<span className="brand-copy">
|
|
21
|
+
<span className="brand-title">Rue.js</span>
|
|
22
|
+
<span className="brand-subtitle">The Vapor Native DOM Framework</span>
|
|
23
|
+
</span>
|
|
24
|
+
</RouterLink>
|
|
25
|
+
<nav className="main-nav">
|
|
26
|
+
{navItems.map(item => (
|
|
27
|
+
<RouterLink
|
|
28
|
+
key={item.to}
|
|
29
|
+
to={item.to}
|
|
30
|
+
className={`nav-link ${currentPath === item.to ? 'is-active' : ''}`}
|
|
31
|
+
>
|
|
32
|
+
{item.label}
|
|
33
|
+
</RouterLink>
|
|
34
|
+
))}
|
|
35
|
+
</nav>
|
|
36
|
+
</div>
|
|
37
|
+
</header>
|
|
38
|
+
)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const Footer: FC = () => (
|
|
42
|
+
<footer className="site-footer">
|
|
43
|
+
<div className="shell footer-inner">
|
|
44
|
+
<div>
|
|
45
|
+
<div className="footer-title">Rue.js</div>
|
|
46
|
+
<p className="footer-copy">已切换为基于 npm 已发布包的官网入口,可直接部署静态站点。</p>
|
|
47
|
+
</div>
|
|
48
|
+
<div className="footer-meta">
|
|
49
|
+
<span>@rue-js/rue</span>
|
|
50
|
+
<span>@rue-js/router</span>
|
|
51
|
+
<span>@rue-js/vite-plugin-rue</span>
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
</footer>
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
const SiteLayout: FC = props => (
|
|
58
|
+
<div className="site-frame">
|
|
59
|
+
<Header />
|
|
60
|
+
<main className="site-main">
|
|
61
|
+
<div className="shell">{props.children}</div>
|
|
62
|
+
</main>
|
|
63
|
+
<Footer />
|
|
64
|
+
</div>
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
export default SiteLayout
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { useComponent } from '@rue-js/rue'
|
|
2
|
+
import { createRouter, createWebHashHistory } from '@rue-js/router'
|
|
3
|
+
|
|
4
|
+
const routes = [
|
|
5
|
+
{ path: '/', component: useComponent(() => import('./pages/Home')) },
|
|
6
|
+
{ path: '/guide', component: useComponent(() => import('./pages/Guide')) },
|
|
7
|
+
{ path: '/packages', component: useComponent(() => import('./pages/Packages')) },
|
|
8
|
+
{ path: '/ecosystem', component: useComponent(() => import('./pages/Ecosystem')) },
|
|
9
|
+
]
|
|
10
|
+
|
|
11
|
+
export default createRouter({
|
|
12
|
+
history: createWebHashHistory(),
|
|
13
|
+
routes,
|
|
14
|
+
})
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="zh-CN">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<meta
|
|
7
|
+
name="description"
|
|
8
|
+
content="Rue.js 官网,使用已发布的 npm 包构建,提供框架介绍、接入方式与生态概览。"
|
|
9
|
+
/>
|
|
10
|
+
<title>Rue.js 官网</title>
|
|
11
|
+
</head>
|
|
12
|
+
<body>
|
|
13
|
+
<div id="app"></div>
|
|
14
|
+
<script type="module" src="/app/main.ts"></script>
|
|
15
|
+
</body>
|
|
16
|
+
</html>
|