laybot-vite-dev 0.1.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 +159 -0
- package/dist/index.js +1 -0
- package/package.json +25 -0
package/README.md
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# laybot-vite-dev
|
|
2
|
+
|
|
3
|
+
Vite 开发服务器适配插件,用于 **LarryMS MPA(多页)+ runtime loader(`larryms.use`)** 的开发模式。
|
|
4
|
+
|
|
5
|
+
它解决的核心问题是:LarryMS 在浏览器里按 **固定 URL 前缀**请求资源(如 `/assets/**`、`/laybot/**`、`/static/**`),但在 Vite dev 下源码实际位于 `src/**`。本插件会在 dev server 中间件层做 URL 重写,使 **开发环境访问路径与生产环境一致**,且不会破坏 Vite HMR WebSocket。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 特性
|
|
10
|
+
|
|
11
|
+
- **MPA HTML 路由映射**
|
|
12
|
+
- `/`、`/index.html` → `src/views/index.html`
|
|
13
|
+
- `/xxx.html` → `src/views/xxx.html`
|
|
14
|
+
- **统一业务根目录 `/assets/`**
|
|
15
|
+
- `/assets/**` → `/src/**`(去掉 `assets` 前缀)
|
|
16
|
+
- 推荐 LarryMS MPA 项目统一把业务模块/资源发布在生产环境的 `dist/assets/**`
|
|
17
|
+
- **框架运行时 `/laybot/` 映射**
|
|
18
|
+
- `/laybot/**` → `/src/laybot/**`
|
|
19
|
+
- **静态资源 `/static/` 映射**
|
|
20
|
+
- `/static/**` → `/src/static/**`
|
|
21
|
+
- **兼容旧写法 `/app/`**
|
|
22
|
+
- `/app/**` → `/src/app/**`(可用于过渡期或老项目)
|
|
23
|
+
- **不会破坏 Vite HMR**
|
|
24
|
+
- 自动放行 WebSocket upgrade 与 Vite 内部路径(`/@vite`、`/@id`、`/@fs`、`/__vite`…)
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 适用场景
|
|
29
|
+
|
|
30
|
+
- 你使用 LarryMS(`larryms.define/larryms.use`)做模块加载
|
|
31
|
+
- 项目是 MPA:每个页面一个 `.html`,不走 Vue/React SPA 路由
|
|
32
|
+
- 构建产物约定:
|
|
33
|
+
- `dist/index.html`、`dist/login.html`(或更多页面)
|
|
34
|
+
- `dist/assets/**`(业务模块与资源)
|
|
35
|
+
- `dist/laybot/**`(框架运行时)
|
|
36
|
+
- `dist/static/**`(静态资源)
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 安装
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
npm i -D laybot-vite-dev
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
> 如果你使用 pnpm/yarn 也可对应安装。
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 使用
|
|
51
|
+
|
|
52
|
+
在项目的 `vite.config.js` 中引入并加入 plugins:
|
|
53
|
+
|
|
54
|
+
```js
|
|
55
|
+
import { defineConfig } from 'vite'
|
|
56
|
+
import laybotViteDev from 'laybot-vite-dev'
|
|
57
|
+
|
|
58
|
+
export default defineConfig({
|
|
59
|
+
server: { port: 5173 },
|
|
60
|
+
plugins: [
|
|
61
|
+
laybotViteDev({
|
|
62
|
+
debug: false
|
|
63
|
+
})
|
|
64
|
+
]
|
|
65
|
+
})
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
然后访问:
|
|
69
|
+
|
|
70
|
+
- http://localhost:5173/ → `src/views/index.html`
|
|
71
|
+
- http://localhost:5173/login.html → `src/views/login.html`
|
|
72
|
+
|
|
73
|
+
页面里引用的生产路径在 dev 下仍然可用,例如:
|
|
74
|
+
|
|
75
|
+
```html
|
|
76
|
+
<link rel="stylesheet" href="/laybot/css/larryms.css" />
|
|
77
|
+
<link rel="stylesheet" href="/static/css/admin.dark.css" />
|
|
78
|
+
<script src="/laybot/larryms.js"></script>
|
|
79
|
+
<script src="/assets/app/laybot.js"></script>
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## 约定与规范(重要)
|
|
85
|
+
|
|
86
|
+
### 1)业务模块统一发布到 `/assets/`
|
|
87
|
+
LarryMS MPA 建议约定:生产环境业务模块都在 `/assets/` 下。
|
|
88
|
+
|
|
89
|
+
- 好处:URL 语义统一、构建结构稳定、文档清晰、CDN 缓存策略统一
|
|
90
|
+
- 你的源码可以自由组织(`src/app`、`src/biz`、`src/features`…),最终只要构建输出到 `dist/assets/**` 即可
|
|
91
|
+
|
|
92
|
+
### 2)框架运行时固定 `/laybot/`
|
|
93
|
+
- `larryms.js` 与框架 css/font/images 固定在 `dist/laybot/**`
|
|
94
|
+
- 业务项目无需理解其内部结构,只要按固定 URL 引用即可
|
|
95
|
+
|
|
96
|
+
### 3)静态资源固定 `/static/`
|
|
97
|
+
- 例如主题 css、svg、音频等放在 `dist/static/**`
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## 配置项
|
|
102
|
+
|
|
103
|
+
```js
|
|
104
|
+
laybotViteDev({
|
|
105
|
+
viewsDir: '/src/views', // 默认:/src/views
|
|
106
|
+
assetsPrefix: '/assets/', // 默认:/assets/
|
|
107
|
+
laybotPrefix: '/laybot/', // 默认:/laybot/
|
|
108
|
+
staticPrefix: '/static/', // 默认:/static/
|
|
109
|
+
appPrefix: '/app/', // 默认:/app/(兼容用)
|
|
110
|
+
debug: false // 默认 false;true 时打印 rewrite 前后关系
|
|
111
|
+
})
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### debug
|
|
115
|
+
开启后会输出每次重写的映射结果,便于定位 404:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
[laybot-vite-dev] /static/css/admin.dark.css => /src/static/css/admin.dark.css
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## 常见问题
|
|
124
|
+
|
|
125
|
+
### 1)`[vite] failed to connect to websocket`
|
|
126
|
+
原因:你在 Vite dev 中间件里重写了 WebSocket upgrade 请求(HMR 握手),导致连接失败。
|
|
127
|
+
|
|
128
|
+
本插件已内置放行:
|
|
129
|
+
- `upgrade: websocket`
|
|
130
|
+
- `/@vite`、`/@id`、`/@fs`、`/__vite` 等 Vite 内部路径
|
|
131
|
+
|
|
132
|
+
若你自行添加了其它中间件,请确保它们不会重写 WebSocket 请求。
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
### 2)`/laybot/larryms.js 404` 或 `/static/... 404`
|
|
137
|
+
请确认文件存在于源码目录:
|
|
138
|
+
|
|
139
|
+
- `src/laybot/larryms.js`
|
|
140
|
+
- `src/laybot/css/larryms.css`
|
|
141
|
+
- `src/static/css/...`
|
|
142
|
+
- `src/app/laybot.js`
|
|
143
|
+
|
|
144
|
+
并确认插件已加入 Vite plugins 列表且 dev server 已重启。
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
### 3)为什么插件要强制统一 `/assets/`?
|
|
149
|
+
因为 LarryMS 的 runtime loader 会动态加载业务模块。如果允许业务模块在 dev/prod 中出现多套 URL 体系(例如 dev 用 `/api/*.js`,prod 用 `/assets/*.js`),很容易出现:
|
|
150
|
+
- 某个页面忘了更新路径导致 404
|
|
151
|
+
- devRewrite 规则越来越多、越来越难维护
|
|
152
|
+
- MPA 页面之间初始化逻辑分裂
|
|
153
|
+
|
|
154
|
+
统一 `/assets/` 可以让开发环境与生产环境保持一致,减少路径问题。
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## License
|
|
159
|
+
MIT (建议你根据实际发布策略修改许可证说明)
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function c(u={}){let i={viewsDir:u.viewsDir||"/src/views",debug:u.debug===!0,assetsPrefix:u.assetsPrefix||"/assets/",laybotPrefix:u.laybotPrefix||"/laybot/",staticPrefix:u.staticPrefix||"/static/",appPrefix:u.appPrefix||"/app/"},l=(...f)=>i.debug&&console.log("[laybot-vite-dev]",...f);return{name:"laybot-vite-dev",enforce:"pre",configureServer(f){f.middlewares.use((r,o,e)=>{let a=r.url||"/",[t,s=""]=a.split("?");if((r.headers.upgrade||"").toLowerCase()==="websocket"||t.startsWith("/@vite")||t.startsWith("/@id")||t.startsWith("/@fs")||t.startsWith("/__vite")||t==="/favicon.ico")return e();if(t==="/"||t==="/index.html")return r.url=`${i.viewsDir}/index.html`+(s?`?${s}`:""),l(a,"=>",r.url),e();if(/\.html$/i.test(t)&&!t.startsWith(i.viewsDir+"/"))return r.url=`${i.viewsDir}${t}`+(s?`?${s}`:""),l(a,"=>",r.url),e();if(t.startsWith(i.assetsPrefix))return r.url="/src"+t.slice(i.assetsPrefix.length-1)+(s?`?${s}`:""),l(a,"=>",r.url),e();if(t.startsWith(i.laybotPrefix))return r.url="/src"+t+(s?`?${s}`:""),l(a,"=>",r.url),e();if(t.startsWith(i.staticPrefix))return r.url="/src"+t+(s?`?${s}`:""),l(a,"=>",r.url),e();if(t.startsWith(i.appPrefix))return r.url="/src"+t+(s?`?${s}`:""),l(a,"=>",r.url),e();e()})}}}export{c as default};
|
package/package.json
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "laybot-vite-dev",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Vite dev rewrite plugin for LayBot/LarryMS MPA runtime loader",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": "./dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": ["dist", "README.md", "LICENSE"],
|
|
11
|
+
"keywords": ["vite", "plugin", "mpa", "larryms", "laybot"],
|
|
12
|
+
"author": "larry",
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"peerDependencies": {
|
|
15
|
+
"vite": ">=5"
|
|
16
|
+
},
|
|
17
|
+
"devDependencies": {
|
|
18
|
+
"esbuild": "^0.25.0",
|
|
19
|
+
"fs-extra": "^11.3.0"
|
|
20
|
+
},
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "node scripts/build.mjs",
|
|
23
|
+
"prepublishOnly": "npm run build"
|
|
24
|
+
}
|
|
25
|
+
}
|