@uni-helper/vite-plugin-uni-pages 0.0.2 → 0.0.4
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.Zh-CN.md +94 -0
- package/README.md +35 -9
- package/dist/config/index.cjs.map +1 -1
- package/dist/config/index.d.ts +2 -17
- package/dist/config/index.js.map +1 -1
- package/dist/index.cjs +85 -33
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +39 -14
- package/dist/index.js +84 -31
- package/dist/index.js.map +1 -1
- package/dist/types-7dcfd17b.d.ts +18 -0
- package/package.json +17 -5
package/README.Zh-CN.md
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# @uni-helper/vite-plugin-uni-pages
|
|
2
|
+
|
|
3
|
+
在 Vite 驱动的 uni-app 上使用基于文件的路由系统
|
|
4
|
+
|
|
5
|
+
[English](./README.md) | 简体中文
|
|
6
|
+
|
|
7
|
+
## 安装
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pnpm i -D @uni-helper/vite-plugin-uni-pages
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## 使用
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
// vite.config.ts
|
|
17
|
+
import { defineConfig } from "vite";
|
|
18
|
+
import Uni from "@dcloudio/vite-plugin-uni";
|
|
19
|
+
import UniPages from "@uni-helper/vite-plugin-uni-pages";
|
|
20
|
+
// It is recommended to put it in front of Uni
|
|
21
|
+
export default defineConfig({
|
|
22
|
+
plugins: [UniPages(), Uni()],
|
|
23
|
+
});
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
在 `pages.config.(ts|mts|cts|js|cjs|mjs|json)` 定义全局属性
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
// pages.config.ts
|
|
30
|
+
import { definePages } from "@uni-helper/vite-plugin-uni-pages/config";
|
|
31
|
+
|
|
32
|
+
export default definePages({
|
|
33
|
+
// You can also specify pages, and the content will be merged
|
|
34
|
+
pages: []
|
|
35
|
+
globalStyle: {
|
|
36
|
+
navigationBarTextStyle: "black",
|
|
37
|
+
navigationBarTitleText: "@uni-helper",
|
|
38
|
+
navigationBarBackgroundColor: "#F8F8F8",
|
|
39
|
+
backgroundColor: "#F8F8F8",
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
现在所有的 page 都会被自动发现!
|
|
45
|
+
|
|
46
|
+
你可以在页面中使用 route-block 来指定元数据
|
|
47
|
+
|
|
48
|
+
```vue
|
|
49
|
+
<!-- index.vue -->
|
|
50
|
+
<!-- use type to set index -->
|
|
51
|
+
<route lang="json" type="home">
|
|
52
|
+
{
|
|
53
|
+
"style": { "navigationBarTitleText": "@uni-helper" }
|
|
54
|
+
}
|
|
55
|
+
</route>
|
|
56
|
+
|
|
57
|
+
<!-- other.vue -->
|
|
58
|
+
<route lang="json">
|
|
59
|
+
{
|
|
60
|
+
"style": { "navigationBarTitleText": "@uni-helper" },
|
|
61
|
+
"any-meta-data": "hello"
|
|
62
|
+
}
|
|
63
|
+
</route>
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
导入虚拟模块即可访问所有页面的元数据
|
|
67
|
+
|
|
68
|
+
```ts
|
|
69
|
+
/// <reference types="@uni-helper/vite-plugin-uni-pages/client" />
|
|
70
|
+
import { pages } from "virtual:uni-pages";
|
|
71
|
+
console.log(pages);
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## 配置
|
|
75
|
+
|
|
76
|
+
查看 [types.ts](./src/types.ts)
|
|
77
|
+
|
|
78
|
+
## 钩子
|
|
79
|
+
|
|
80
|
+
你不能在 `pages.json` 中使用类似 `#ifdef H5`, 但是使用 [hooks](./src/types.ts) 可以改变 pagesMeta.
|
|
81
|
+
|
|
82
|
+
```ts
|
|
83
|
+
// vite.config.ts
|
|
84
|
+
UniPages({
|
|
85
|
+
onBeforeWriteFile(ctx) {
|
|
86
|
+
ctx.pagesMeta = ctx.pagesMeta?.filter((v) => !v.path.includes("test"));
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
...
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
这是条件编译的一个很好的替代方案, 你还可以在 `vite.config.ts` 中使用 `exclude` 来排除部分页面。
|
|
93
|
+
|
|
94
|
+
怎么做? 打印 `process.env` 然后找到 `UNI_*`, 我相信你已经会了
|
package/README.md
CHANGED
|
@@ -1,34 +1,36 @@
|
|
|
1
1
|
# @uni-helper/vite-plugin-uni-pages
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
File system-based routing for uni-app applications using Vite
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
English | [简体中文](./README.Zh-CN.md)
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
6
8
|
|
|
7
9
|
```bash
|
|
8
10
|
pnpm i -D @uni-helper/vite-plugin-uni-pages
|
|
9
11
|
```
|
|
10
12
|
|
|
11
|
-
##
|
|
13
|
+
## Usage
|
|
12
14
|
|
|
13
15
|
```ts
|
|
14
16
|
// vite.config.ts
|
|
15
17
|
import { defineConfig } from "vite";
|
|
16
18
|
import Uni from "@dcloudio/vite-plugin-uni";
|
|
17
19
|
import UniPages from "@uni-helper/vite-plugin-uni-pages";
|
|
18
|
-
//
|
|
20
|
+
// It is recommended to put it in front of Uni
|
|
19
21
|
export default defineConfig({
|
|
20
22
|
plugins: [UniPages(), Uni()],
|
|
21
23
|
});
|
|
22
24
|
```
|
|
23
25
|
|
|
24
|
-
|
|
26
|
+
Define global properties in `pages.config.(ts|mts|cts|js|cjs|mjs|json)`
|
|
25
27
|
|
|
26
28
|
```ts
|
|
27
29
|
// pages.config.ts
|
|
28
30
|
import { definePages } from "@uni-helper/vite-plugin-uni-pages/config";
|
|
29
31
|
|
|
30
32
|
export default definePages({
|
|
31
|
-
//
|
|
33
|
+
// You can also specify pages, and the content will be merged
|
|
32
34
|
pages: []
|
|
33
35
|
globalStyle: {
|
|
34
36
|
navigationBarTextStyle: "black",
|
|
@@ -39,12 +41,13 @@ export default definePages({
|
|
|
39
41
|
});
|
|
40
42
|
```
|
|
41
43
|
|
|
42
|
-
|
|
44
|
+
Now all pages will be found automatically!
|
|
43
45
|
|
|
44
|
-
|
|
46
|
+
You can use route-block in the page to specify metadata
|
|
45
47
|
|
|
46
48
|
```vue
|
|
47
49
|
<!-- index.vue -->
|
|
50
|
+
<!-- use type to set index -->
|
|
48
51
|
<route lang="json" type="home">
|
|
49
52
|
{
|
|
50
53
|
"style": { "navigationBarTitleText": "@uni-helper" }
|
|
@@ -60,13 +63,36 @@ export default definePages({
|
|
|
60
63
|
</route>
|
|
61
64
|
```
|
|
62
65
|
|
|
63
|
-
|
|
66
|
+
Import the virtual module to access the metadata of all pages
|
|
64
67
|
|
|
65
68
|
```ts
|
|
66
69
|
/// <reference types="@uni-helper/vite-plugin-uni-pages/client" />
|
|
67
70
|
import { pages } from "virtual:uni-pages";
|
|
71
|
+
console.log(pages);
|
|
68
72
|
```
|
|
69
73
|
|
|
74
|
+
## Configuration
|
|
75
|
+
|
|
76
|
+
see [types.ts](./src/types.ts)
|
|
77
|
+
|
|
78
|
+
## Hooks
|
|
79
|
+
|
|
80
|
+
You can not use like `#ifdef H5` in `pages.json`, but use [hooks](./src/types.ts) to change pagesMeta.
|
|
81
|
+
|
|
82
|
+
```ts
|
|
83
|
+
// vite.config.ts
|
|
84
|
+
UniPages({
|
|
85
|
+
onBeforeWriteFile(ctx) {
|
|
86
|
+
ctx.pagesMeta = ctx.pagesMeta?.filter((v) => !v.path.includes("test"));
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
...
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
This is a good alternative to conditional compilation, you can also use `exclude` in `vite.config.ts`
|
|
93
|
+
|
|
94
|
+
How? console the `process.env` and found `UNI_*`, you can do this!
|
|
95
|
+
|
|
70
96
|
## TODO
|
|
71
97
|
|
|
72
98
|
- [ ] only update the changed page
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/config/index.ts"],"sourcesContent":["import { UserPagesConfig } from \"./types\";\nexport
|
|
1
|
+
{"version":3,"sources":["../../src/config/index.ts"],"sourcesContent":["import { UserPagesConfig } from \"./types\";\nexport function definePages(config: UserPagesConfig) {\n return config;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACO,SAAS,YAAY,QAAyB;AACnD,SAAO;AACT;","names":[]}
|
package/dist/config/index.d.ts
CHANGED
|
@@ -1,20 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
pages: any;
|
|
3
|
-
globalStyle: any;
|
|
4
|
-
easycom: any;
|
|
5
|
-
tabBar: any;
|
|
6
|
-
condition: any;
|
|
7
|
-
subPackages: any;
|
|
8
|
-
preloadRule: any;
|
|
9
|
-
workers: any;
|
|
10
|
-
leftWindow: any;
|
|
11
|
-
topWindow: any;
|
|
12
|
-
rightWindow: any;
|
|
13
|
-
uniIdRouter: any;
|
|
14
|
-
}
|
|
15
|
-
interface UserPagesConfig extends Partial<PagesConfig> {
|
|
16
|
-
}
|
|
1
|
+
import { U as UserPagesConfig } from '../types-7dcfd17b.js';
|
|
17
2
|
|
|
18
3
|
declare function definePages(config: UserPagesConfig): UserPagesConfig;
|
|
19
4
|
|
|
20
|
-
export {
|
|
5
|
+
export { definePages };
|
package/dist/config/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/config/index.ts"],"sourcesContent":["import { UserPagesConfig } from \"./types\";\nexport
|
|
1
|
+
{"version":3,"sources":["../../src/config/index.ts"],"sourcesContent":["import { UserPagesConfig } from \"./types\";\nexport function definePages(config: UserPagesConfig) {\n return config;\n}\n"],"mappings":";AACO,SAAS,YAAY,QAAyB;AACnD,SAAO;AACT;","names":[]}
|
package/dist/index.cjs
CHANGED
|
@@ -27,8 +27,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
27
27
|
var src_exports = {};
|
|
28
28
|
__export(src_exports, {
|
|
29
29
|
VitePluginUniPages: () => VitePluginUniPages,
|
|
30
|
-
default: () => src_default
|
|
31
|
-
definePages: () => definePages
|
|
30
|
+
default: () => src_default
|
|
32
31
|
});
|
|
33
32
|
module.exports = __toCommonJS(src_exports);
|
|
34
33
|
var import_vite3 = require("vite");
|
|
@@ -36,11 +35,17 @@ var import_vite3 = require("vite");
|
|
|
36
35
|
// src/utils.ts
|
|
37
36
|
var import_path = require("path");
|
|
38
37
|
var import_vite = require("vite");
|
|
38
|
+
var import_consola = __toESM(require("consola"), 1);
|
|
39
39
|
var isPagePath = (path, options) => {
|
|
40
40
|
const dirPath = (0, import_path.resolve)(process.cwd(), options.pagesDir);
|
|
41
|
-
const filter = (0, import_vite.createFilter)(dirPath + "/**/*.(vue|nvue)");
|
|
41
|
+
const filter = (0, import_vite.createFilter)(dirPath + "/**/*.(vue|nvue)", options.exclude);
|
|
42
42
|
return filter(path);
|
|
43
43
|
};
|
|
44
|
+
var logger = import_consola.default.create({
|
|
45
|
+
defaults: {
|
|
46
|
+
tag: "vite-plugin-uni-pages"
|
|
47
|
+
}
|
|
48
|
+
});
|
|
44
49
|
|
|
45
50
|
// src/constant.ts
|
|
46
51
|
var virtualModuleId = "virtual:uni-pages";
|
|
@@ -66,17 +71,23 @@ var Context = class {
|
|
|
66
71
|
const { config } = await (0, import_unconfig.loadConfig)({
|
|
67
72
|
sources: [
|
|
68
73
|
{
|
|
69
|
-
files:
|
|
70
|
-
extensions: [this.options.extension]
|
|
74
|
+
files: "pages.config"
|
|
71
75
|
}
|
|
72
76
|
],
|
|
73
77
|
merge: false
|
|
74
78
|
});
|
|
79
|
+
if (!config) {
|
|
80
|
+
logger.error(
|
|
81
|
+
"Can't found pages.config, please create pages.config.(ts|mts|cts|js|cjs|mjs|json)"
|
|
82
|
+
);
|
|
83
|
+
process.exit(-1);
|
|
84
|
+
}
|
|
85
|
+
logger.debug("Loaded user pages config", config);
|
|
75
86
|
this.pagesConfig = config;
|
|
76
87
|
}
|
|
77
88
|
async scanPages() {
|
|
78
89
|
const files = await (0, import_fast_glob.default)("**/*.(vue|nvue)", {
|
|
79
|
-
ignore: ["node_modules", ".git", "**/__*__/*"],
|
|
90
|
+
ignore: ["node_modules", ".git", "**/__*__/*", ...this.options.exclude],
|
|
80
91
|
onlyFiles: true,
|
|
81
92
|
cwd: (0, import_path2.resolve)(process.cwd(), this.options.pagesDir)
|
|
82
93
|
});
|
|
@@ -92,6 +103,7 @@ var Context = class {
|
|
|
92
103
|
)
|
|
93
104
|
};
|
|
94
105
|
});
|
|
106
|
+
logger.debug("Scanned pages dir", this.pagesPathInfo);
|
|
95
107
|
}
|
|
96
108
|
async parsePage({ relative: relative2, absolute }) {
|
|
97
109
|
const code = await import_fs.default.promises.readFile(absolute, {
|
|
@@ -135,6 +147,7 @@ var Context = class {
|
|
|
135
147
|
const pages = Object.values((0, import_defu.defu)({}, pagesMeta, this.pagesConfig.pages));
|
|
136
148
|
pages.sort((a) => a.type === "home" ? -1 : 0);
|
|
137
149
|
this.pagesMeta = pages;
|
|
150
|
+
logger.debug("merged pages", this.pagesMeta);
|
|
138
151
|
}
|
|
139
152
|
async createOrUpdatePagesJSON() {
|
|
140
153
|
const outputName = "pages.json";
|
|
@@ -146,67 +159,107 @@ var Context = class {
|
|
|
146
159
|
encoding: "utf-8"
|
|
147
160
|
});
|
|
148
161
|
}
|
|
162
|
+
this.options.onBeforeLoadUserConfig(this);
|
|
149
163
|
await this.loadUserPagesConfig();
|
|
164
|
+
this.options.onAfterLoadUserConfig(this);
|
|
165
|
+
this.options.onBeforeScanPages(this);
|
|
150
166
|
await this.scanPages();
|
|
167
|
+
this.options.onAfterScanPages(this);
|
|
168
|
+
this.options.onBeforeMergePagesMeta(this);
|
|
151
169
|
await this.mergePagesMeta();
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
{
|
|
159
|
-
encoding: "utf-8"
|
|
160
|
-
}
|
|
161
|
-
);
|
|
170
|
+
this.options.onAfterMergePagesMeta(this);
|
|
171
|
+
this.options.onBeforeWriteFile(this);
|
|
172
|
+
import_fs.default.writeFileSync(resolvedOutput, this.pagesJson, {
|
|
173
|
+
encoding: "utf-8"
|
|
174
|
+
});
|
|
175
|
+
this.options.onAfterWriteFile(this);
|
|
162
176
|
}
|
|
163
177
|
async virtualModule() {
|
|
164
178
|
return `export const pages = ${JSON.stringify(this.pagesMeta)};`;
|
|
165
179
|
}
|
|
166
|
-
|
|
167
|
-
return (0,
|
|
168
|
-
|
|
169
|
-
|
|
180
|
+
async pagesConfigSourcePaths() {
|
|
181
|
+
return await (0, import_fast_glob.default)("pages.config.(ts|mts|cts|js|cjs|mjs|json)", {
|
|
182
|
+
deep: 0,
|
|
183
|
+
onlyFiles: true,
|
|
184
|
+
absolute: true
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
get pagesJson() {
|
|
188
|
+
return JSON.stringify({
|
|
189
|
+
...this.pagesConfig,
|
|
190
|
+
pages: this.pagesMeta
|
|
191
|
+
});
|
|
170
192
|
}
|
|
171
193
|
};
|
|
172
194
|
|
|
173
|
-
// src/config/index.ts
|
|
174
|
-
function definePages(config) {
|
|
175
|
-
return config;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
195
|
// src/index.ts
|
|
179
196
|
function resolveOptions(userOptions) {
|
|
180
197
|
return {
|
|
181
198
|
pagesDir: "src/pages",
|
|
182
199
|
outDir: "src",
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
200
|
+
exclude: [],
|
|
201
|
+
onBeforeLoadUserConfig: () => {
|
|
202
|
+
},
|
|
203
|
+
onAfterLoadUserConfig: () => {
|
|
204
|
+
},
|
|
205
|
+
onBeforeScanPages: () => {
|
|
206
|
+
},
|
|
207
|
+
onAfterScanPages: () => {
|
|
208
|
+
},
|
|
209
|
+
onBeforeMergePagesMeta: () => {
|
|
210
|
+
},
|
|
211
|
+
onAfterMergePagesMeta: () => {
|
|
212
|
+
},
|
|
213
|
+
onBeforeWriteFile: () => {
|
|
214
|
+
},
|
|
215
|
+
onAfterWriteFile: () => {
|
|
216
|
+
},
|
|
186
217
|
...userOptions
|
|
187
218
|
};
|
|
188
219
|
}
|
|
189
220
|
var VitePluginUniPages = async (userOptions = {}) => {
|
|
190
221
|
const options = resolveOptions(userOptions);
|
|
222
|
+
logger.debug("Create uni-pages context with", options);
|
|
191
223
|
const ctx = new Context(options);
|
|
192
224
|
return {
|
|
193
225
|
name: "vite-plugin-uni-pages",
|
|
194
226
|
enforce: "pre",
|
|
195
|
-
configureServer({ watcher }) {
|
|
196
|
-
|
|
227
|
+
async configureServer({ watcher, moduleGraph, ws }) {
|
|
228
|
+
const pagesConfigSourcePaths = await ctx.pagesConfigSourcePaths();
|
|
229
|
+
logger.debug("Add watcher", pagesConfigSourcePaths);
|
|
230
|
+
watcher.add(pagesConfigSourcePaths);
|
|
231
|
+
const reloadModule = (module2, path = "*") => {
|
|
232
|
+
if (module2) {
|
|
233
|
+
moduleGraph.invalidateModule(module2);
|
|
234
|
+
if (ws) {
|
|
235
|
+
ws.send({
|
|
236
|
+
path,
|
|
237
|
+
type: "full-reload"
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
const updateVirtualModule = () => {
|
|
243
|
+
logger.debug("Update virtualModule");
|
|
244
|
+
const module2 = moduleGraph.getModuleById(resolvedVirtualModuleId);
|
|
245
|
+
reloadModule(module2);
|
|
246
|
+
};
|
|
197
247
|
watcher.on("change", async (path) => {
|
|
198
|
-
if ((0, import_vite3.normalizePath)(path)
|
|
248
|
+
if (pagesConfigSourcePaths.includes((0, import_vite3.normalizePath)(path)) || isPagePath(path, options)) {
|
|
199
249
|
await ctx.createOrUpdatePagesJSON();
|
|
250
|
+
updateVirtualModule();
|
|
200
251
|
}
|
|
201
252
|
});
|
|
202
253
|
watcher.on("add", async (path) => {
|
|
203
254
|
if (isPagePath(path, options)) {
|
|
204
255
|
await ctx.createOrUpdatePagesJSON();
|
|
256
|
+
updateVirtualModule();
|
|
205
257
|
}
|
|
206
258
|
});
|
|
207
259
|
watcher.on("unlink", async (path) => {
|
|
208
260
|
if (isPagePath(path, options)) {
|
|
209
261
|
await ctx.createOrUpdatePagesJSON();
|
|
262
|
+
updateVirtualModule();
|
|
210
263
|
}
|
|
211
264
|
});
|
|
212
265
|
},
|
|
@@ -225,7 +278,6 @@ var VitePluginUniPages = async (userOptions = {}) => {
|
|
|
225
278
|
var src_default = VitePluginUniPages;
|
|
226
279
|
// Annotate the CommonJS export names for ESM import in node:
|
|
227
280
|
0 && (module.exports = {
|
|
228
|
-
VitePluginUniPages
|
|
229
|
-
definePages
|
|
281
|
+
VitePluginUniPages
|
|
230
282
|
});
|
|
231
283
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/constant.ts","../src/context/index.ts","../src/config/index.ts"],"sourcesContent":["import { normalizePath, Plugin } from \"vite\";\nimport { ResolvedOptions, UserOptions } from \"./types\";\nimport { isPagePath } from \"./utils\";\nimport { virtualModuleId, resolvedVirtualModuleId } from \"./constant\";\nimport { Context } from \"./context\";\n\nexport * from \"./config\";\n\nfunction resolveOptions(userOptions: UserOptions): ResolvedOptions {\n return {\n pagesDir: \"src/pages\",\n outDir: \"src\",\n entry: \"pages.config\",\n extension: \"ts\",\n middlewaresDir: \"src/middlewares\",\n ...userOptions,\n };\n}\n\nexport const VitePluginUniPages = async (\n userOptions: UserOptions = {}\n): Promise<Plugin> => {\n const options = resolveOptions(userOptions);\n const ctx = new Context(options);\n\n return {\n name: \"vite-plugin-uni-pages\",\n enforce: \"pre\",\n configureServer({ watcher }) {\n watcher.add(ctx.pagesConfigSourcePath);\n watcher.on(\"change\", async (path) => {\n if (\n normalizePath(path) === ctx.pagesConfigSourcePath ||\n isPagePath(path, options)\n ) {\n await ctx.createOrUpdatePagesJSON();\n }\n });\n watcher.on(\"add\", async (path) => {\n if (isPagePath(path, options)) {\n await ctx.createOrUpdatePagesJSON();\n }\n });\n watcher.on(\"unlink\", async (path) => {\n if (isPagePath(path, options)) {\n await ctx.createOrUpdatePagesJSON();\n }\n });\n },\n resolveId(id) {\n if (id === virtualModuleId) {\n return resolvedVirtualModuleId;\n }\n },\n\n load(id) {\n if (id === resolvedVirtualModuleId) {\n return ctx.virtualModule();\n }\n },\n };\n};\n\nexport default VitePluginUniPages;\n","import { resolve } from \"path\";\nimport { ResolvedOptions } from \"./types\";\nimport { createFilter } from \"vite\";\nexport const isPagePath = (path: string, options: ResolvedOptions) => {\n const dirPath = resolve(process.cwd(), options.pagesDir);\n const filter = createFilter(dirPath + \"/**/*.(vue|nvue)\");\n return filter(path);\n // if (path.startsWith(dirPath)) return true;\n // return false;\n};\n","export const virtualModuleId = \"virtual:uni-pages\";\nexport const resolvedVirtualModuleId = \"\\0\" + virtualModuleId;\n","import { extname, join, relative, resolve } from \"path\";\nimport { loadConfig } from \"unconfig\";\nimport { normalizePath } from \"vite\";\nimport { PagesConfig } from \"../config/types\";\nimport { PageMeta, PagePathInfo, ResolvedOptions } from \"../types\";\nimport fg from \"fast-glob\";\nimport { parse as JSONParse } from \"jsonc-parser\";\nimport { parse } from \"@vue/compiler-dom\";\nimport fs from \"fs\";\nimport { defu } from \"defu\";\n\nexport class Context {\n options: ResolvedOptions;\n pagesConfig!: PagesConfig;\n pagesPathInfo: PagePathInfo[] = [];\n pagesMeta: PageMeta[] = [];\n constructor(options: ResolvedOptions) {\n this.options = options;\n this.createOrUpdatePagesJSON();\n }\n\n async loadUserPagesConfig() {\n const { config } = await loadConfig({\n sources: [\n {\n files: this.options.entry,\n extensions: [this.options.extension],\n },\n ],\n merge: false,\n });\n this.pagesConfig = config as PagesConfig;\n }\n\n async scanPages() {\n const files = await fg(\"**/*.(vue|nvue)\", {\n ignore: [\"node_modules\", \".git\", \"**/__*__/*\"],\n onlyFiles: true,\n cwd: resolve(process.cwd(), this.options.pagesDir),\n });\n const basePath = relative(\n resolve(process.cwd(), this.options.outDir),\n this.options.pagesDir\n );\n this.pagesPathInfo = files.map((file) => {\n return {\n relative: normalizePath(join(basePath, file)),\n absolute: normalizePath(\n resolve(process.cwd(), this.options.pagesDir, file)\n ),\n };\n });\n }\n\n async parsePage({ relative, absolute }: PagePathInfo): Promise<PageMeta> {\n const code = await fs.promises.readFile(absolute, {\n encoding: \"utf-8\",\n });\n const t = parse(code);\n const path = relative.replace(extname(relative), \"\");\n let pageMeta: PageMeta = {\n path,\n type: \"page\",\n };\n t?.children.forEach((v) => {\n if (v.type !== 1) {\n return;\n }\n if (v.tag === \"route\") {\n v.props.forEach((prop) => {\n if (prop.type === 6 && prop.name === \"type\") {\n pageMeta.type = prop.value?.content ?? pageMeta.type;\n }\n });\n const astContent = v.children?.[0];\n if (astContent && astContent.type === 2) {\n const _pageMeta = JSONParse(astContent.content);\n Object.keys(_pageMeta).forEach((key) => {\n pageMeta[key] = _pageMeta[key];\n });\n // overwrite path\n pageMeta[\"path\"] = path;\n }\n }\n });\n return pageMeta;\n }\n\n async mergePagesMeta() {\n const pagesMeta = await Promise.all(\n this.pagesPathInfo?.map(async (page) => await this.parsePage(page))\n );\n const pages = Object.values(defu({}, pagesMeta, this.pagesConfig.pages));\n // @ts-ignore\n pages.sort((a) => (a.type === \"home\" ? -1 : 0));\n // @ts-ignore\n this.pagesMeta = pages;\n }\n\n async createOrUpdatePagesJSON() {\n const outputName = \"pages.json\";\n const resolvedOutput = normalizePath(\n resolve(process.cwd(), this.options.outDir, outputName)\n );\n\n // 如果不存在,先输出一个占位文件\n if (!fs.existsSync(resolvedOutput)) {\n fs.writeFileSync(resolvedOutput, `{\"pages\": [{\"path\": \"\"}]}`, {\n encoding: \"utf-8\",\n });\n }\n\n await this.loadUserPagesConfig();\n await this.scanPages();\n await this.mergePagesMeta();\n\n fs.writeFileSync(\n resolvedOutput,\n JSON.stringify({\n ...this.pagesConfig,\n pages: this.pagesMeta,\n }),\n {\n encoding: \"utf-8\",\n }\n );\n }\n\n async virtualModule() {\n return `export const pages = ${JSON.stringify(this.pagesMeta)};`;\n }\n\n get pagesConfigSourcePath() {\n return normalizePath(\n resolve(process.cwd(), `${this.options.entry}.${this.options.extension}`)\n );\n }\n}\n","import { UserPagesConfig } from \"./types\";\nexport * from \"./types\";\nexport function definePages(config: UserPagesConfig) {\n return config;\n}\n"],"mappings":"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","names":["import_vite","import_path","import_vite","fg","relative","fs","_a","JSONParse"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/constant.ts","../src/context/index.ts"],"sourcesContent":["import { ModuleNode, normalizePath, Plugin } from \"vite\";\nimport { ResolvedOptions, UserOptions } from \"./types\";\nimport { isPagePath, logger } from \"./utils\";\nimport { virtualModuleId, resolvedVirtualModuleId } from \"./constant\";\nimport { Context } from \"./context\";\n\nfunction resolveOptions(userOptions: UserOptions): ResolvedOptions {\n return {\n pagesDir: \"src/pages\",\n outDir: \"src\",\n exclude: [],\n onBeforeLoadUserConfig: () => {},\n onAfterLoadUserConfig: () => {},\n onBeforeScanPages: () => {},\n onAfterScanPages: () => {},\n onBeforeMergePagesMeta: () => {},\n onAfterMergePagesMeta: () => {},\n onBeforeWriteFile: () => {},\n onAfterWriteFile: () => {},\n ...userOptions,\n };\n}\n\nexport const VitePluginUniPages = async (\n userOptions: UserOptions = {}\n): Promise<Plugin> => {\n const options = resolveOptions(userOptions);\n logger.debug(\"Create uni-pages context with\", options);\n const ctx = new Context(options);\n return {\n name: \"vite-plugin-uni-pages\",\n enforce: \"pre\",\n async configureServer({ watcher, moduleGraph, ws }) {\n const pagesConfigSourcePaths = await ctx.pagesConfigSourcePaths();\n logger.debug(\"Add watcher\", pagesConfigSourcePaths);\n watcher.add(pagesConfigSourcePaths);\n\n const reloadModule = (module: ModuleNode | undefined, path = \"*\") => {\n if (module) {\n moduleGraph.invalidateModule(module);\n if (ws) {\n ws.send({\n path,\n type: \"full-reload\",\n });\n }\n }\n };\n const updateVirtualModule = () => {\n logger.debug(\"Update virtualModule\");\n const module = moduleGraph.getModuleById(resolvedVirtualModuleId);\n reloadModule(module);\n };\n\n watcher.on(\"change\", async (path) => {\n if (\n pagesConfigSourcePaths.includes(normalizePath(path)) ||\n isPagePath(path, options)\n ) {\n await ctx.createOrUpdatePagesJSON();\n updateVirtualModule();\n }\n });\n watcher.on(\"add\", async (path) => {\n if (isPagePath(path, options)) {\n await ctx.createOrUpdatePagesJSON();\n updateVirtualModule();\n }\n });\n watcher.on(\"unlink\", async (path) => {\n if (isPagePath(path, options)) {\n await ctx.createOrUpdatePagesJSON();\n updateVirtualModule();\n }\n });\n },\n resolveId(id) {\n if (id === virtualModuleId) {\n return resolvedVirtualModuleId;\n }\n },\n\n load(id) {\n if (id === resolvedVirtualModuleId) {\n return ctx.virtualModule();\n }\n },\n };\n};\n\nexport default VitePluginUniPages;\n","import { resolve } from \"path\";\nimport { ResolvedOptions } from \"./types\";\nimport { createFilter } from \"vite\";\nimport consola from \"consola\";\n\nexport const isPagePath = (path: string, options: ResolvedOptions) => {\n const dirPath = resolve(process.cwd(), options.pagesDir);\n const filter = createFilter(dirPath + \"/**/*.(vue|nvue)\", options.exclude);\n return filter(path);\n};\n\nexport const logger = consola.create({\n defaults: {\n tag: \"vite-plugin-uni-pages\",\n },\n});\n","export const virtualModuleId = \"virtual:uni-pages\";\nexport const resolvedVirtualModuleId = \"\\0\" + virtualModuleId;\n","import { extname, join, relative, resolve } from \"path\";\nimport { loadConfig } from \"unconfig\";\nimport { normalizePath } from \"vite\";\nimport { PagesConfig } from \"../config/types\";\nimport { PageMeta, PagePathInfo, ResolvedOptions } from \"../types\";\nimport fg from \"fast-glob\";\nimport { parse as JSONParse } from \"jsonc-parser\";\nimport { parse } from \"@vue/compiler-dom\";\nimport fs from \"fs\";\nimport { defu } from \"defu\";\nimport { logger } from \"../utils\";\nexport class Context {\n options: ResolvedOptions;\n pagesConfig!: PagesConfig;\n pagesPathInfo: PagePathInfo[] = [];\n pagesMeta: PageMeta[] = [];\n constructor(options: ResolvedOptions) {\n this.options = options;\n this.createOrUpdatePagesJSON();\n }\n\n async loadUserPagesConfig() {\n const { config } = await loadConfig({\n sources: [\n {\n files: \"pages.config\",\n },\n ],\n merge: false,\n });\n if (!config) {\n logger.error(\n \"Can't found pages.config, please create pages.config.(ts|mts|cts|js|cjs|mjs|json)\"\n );\n process.exit(-1);\n }\n logger.debug(\"Loaded user pages config\", config);\n this.pagesConfig = config as PagesConfig;\n }\n\n async scanPages() {\n const files = await fg(\"**/*.(vue|nvue)\", {\n ignore: [\"node_modules\", \".git\", \"**/__*__/*\", ...this.options.exclude],\n onlyFiles: true,\n cwd: resolve(process.cwd(), this.options.pagesDir),\n });\n const basePath = relative(\n resolve(process.cwd(), this.options.outDir),\n this.options.pagesDir\n );\n this.pagesPathInfo = files.map((file) => {\n return {\n relative: normalizePath(join(basePath, file)),\n absolute: normalizePath(\n resolve(process.cwd(), this.options.pagesDir, file)\n ),\n };\n });\n logger.debug(\"Scanned pages dir\", this.pagesPathInfo);\n }\n\n async parsePage({ relative, absolute }: PagePathInfo): Promise<PageMeta> {\n const code = await fs.promises.readFile(absolute, {\n encoding: \"utf-8\",\n });\n const t = parse(code);\n const path = relative.replace(extname(relative), \"\");\n let pageMeta: PageMeta = {\n path,\n type: \"page\",\n };\n t?.children.forEach((v) => {\n if (v.type !== 1) {\n return;\n }\n if (v.tag === \"route\") {\n v.props.forEach((prop) => {\n if (prop.type === 6 && prop.name === \"type\") {\n pageMeta.type = prop.value?.content ?? pageMeta.type;\n }\n });\n const astContent = v.children?.[0];\n if (astContent && astContent.type === 2) {\n const _pageMeta = JSONParse(astContent.content);\n Object.keys(_pageMeta).forEach((key) => {\n pageMeta[key] = _pageMeta[key];\n });\n // overwrite path\n pageMeta[\"path\"] = path;\n }\n }\n });\n return pageMeta;\n }\n\n async mergePagesMeta() {\n const pagesMeta = await Promise.all(\n this.pagesPathInfo?.map(async (page) => await this.parsePage(page))\n );\n const pages = Object.values(defu({}, pagesMeta, this.pagesConfig.pages));\n // @ts-ignore\n pages.sort((a) => (a.type === \"home\" ? -1 : 0));\n // @ts-ignore\n this.pagesMeta = pages;\n logger.debug(\"merged pages\", this.pagesMeta);\n }\n\n async createOrUpdatePagesJSON() {\n const outputName = \"pages.json\";\n const resolvedOutput = normalizePath(\n resolve(process.cwd(), this.options.outDir, outputName)\n );\n\n // 如果不存在,先输出一个占位文件\n if (!fs.existsSync(resolvedOutput)) {\n fs.writeFileSync(resolvedOutput, `{\"pages\": [{\"path\": \"\"}]}`, {\n encoding: \"utf-8\",\n });\n }\n\n this.options.onBeforeLoadUserConfig(this);\n await this.loadUserPagesConfig();\n this.options.onAfterLoadUserConfig(this);\n\n this.options.onBeforeScanPages(this);\n await this.scanPages();\n this.options.onAfterScanPages(this);\n\n this.options.onBeforeMergePagesMeta(this);\n await this.mergePagesMeta();\n this.options.onAfterMergePagesMeta(this);\n\n this.options.onBeforeWriteFile(this);\n fs.writeFileSync(resolvedOutput, this.pagesJson, {\n encoding: \"utf-8\",\n });\n this.options.onAfterWriteFile(this);\n }\n\n async virtualModule() {\n return `export const pages = ${JSON.stringify(this.pagesMeta)};`;\n }\n\n async pagesConfigSourcePaths() {\n return await fg(\"pages.config.(ts|mts|cts|js|cjs|mjs|json)\", {\n deep: 0,\n onlyFiles: true,\n absolute: true,\n });\n }\n\n get pagesJson() {\n return JSON.stringify({\n ...this.pagesConfig,\n pages: this.pagesMeta,\n });\n }\n}\n"],"mappings":"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","names":["import_vite","consola","import_path","import_vite","fg","relative","fs","_a","JSONParse","module"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
import { Plugin } from 'vite';
|
|
2
|
-
|
|
2
|
+
import { P as PagesConfig } from './types-7dcfd17b.js';
|
|
3
|
+
|
|
4
|
+
declare class Context {
|
|
5
|
+
options: ResolvedOptions;
|
|
6
|
+
pagesConfig: PagesConfig;
|
|
7
|
+
pagesPathInfo: PagePathInfo[];
|
|
8
|
+
pagesMeta: PageMeta[];
|
|
9
|
+
constructor(options: ResolvedOptions);
|
|
10
|
+
loadUserPagesConfig(): Promise<void>;
|
|
11
|
+
scanPages(): Promise<void>;
|
|
12
|
+
parsePage({ relative, absolute }: PagePathInfo): Promise<PageMeta>;
|
|
13
|
+
mergePagesMeta(): Promise<void>;
|
|
14
|
+
createOrUpdatePagesJSON(): Promise<void>;
|
|
15
|
+
virtualModule(): Promise<string>;
|
|
16
|
+
pagesConfigSourcePaths(): Promise<string[]>;
|
|
17
|
+
get pagesJson(): string;
|
|
18
|
+
}
|
|
3
19
|
|
|
4
20
|
interface Options {
|
|
5
21
|
/**
|
|
@@ -13,23 +29,32 @@ interface Options {
|
|
|
13
29
|
*/
|
|
14
30
|
outDir: string;
|
|
15
31
|
/**
|
|
16
|
-
*
|
|
17
|
-
* @default
|
|
32
|
+
* exclude page
|
|
33
|
+
* @default []
|
|
18
34
|
*/
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
*/
|
|
29
|
-
middlewaresDir: string;
|
|
35
|
+
exclude: string[];
|
|
36
|
+
onBeforeLoadUserConfig: (ctx: Context) => void;
|
|
37
|
+
onAfterLoadUserConfig: (ctx: Context) => void;
|
|
38
|
+
onBeforeScanPages: (ctx: Context) => void;
|
|
39
|
+
onAfterScanPages: (ctx: Context) => void;
|
|
40
|
+
onBeforeMergePagesMeta: (ctx: Context) => void;
|
|
41
|
+
onAfterMergePagesMeta: (ctx: Context) => void;
|
|
42
|
+
onBeforeWriteFile: (ctx: Context) => void;
|
|
43
|
+
onAfterWriteFile: (ctx: Context) => void;
|
|
30
44
|
}
|
|
31
45
|
interface UserOptions extends Partial<Options> {
|
|
32
46
|
}
|
|
47
|
+
interface ResolvedOptions extends Options {
|
|
48
|
+
}
|
|
49
|
+
interface PagePathInfo {
|
|
50
|
+
relative: string;
|
|
51
|
+
absolute: string;
|
|
52
|
+
}
|
|
53
|
+
interface PageMeta {
|
|
54
|
+
path: string;
|
|
55
|
+
type: string;
|
|
56
|
+
[x: string]: any;
|
|
57
|
+
}
|
|
33
58
|
|
|
34
59
|
declare const VitePluginUniPages: (userOptions?: UserOptions) => Promise<Plugin>;
|
|
35
60
|
|
package/dist/index.js
CHANGED
|
@@ -4,11 +4,17 @@ import { normalizePath as normalizePath2 } from "vite";
|
|
|
4
4
|
// src/utils.ts
|
|
5
5
|
import { resolve } from "path";
|
|
6
6
|
import { createFilter } from "vite";
|
|
7
|
+
import consola from "consola";
|
|
7
8
|
var isPagePath = (path, options) => {
|
|
8
9
|
const dirPath = resolve(process.cwd(), options.pagesDir);
|
|
9
|
-
const filter = createFilter(dirPath + "/**/*.(vue|nvue)");
|
|
10
|
+
const filter = createFilter(dirPath + "/**/*.(vue|nvue)", options.exclude);
|
|
10
11
|
return filter(path);
|
|
11
12
|
};
|
|
13
|
+
var logger = consola.create({
|
|
14
|
+
defaults: {
|
|
15
|
+
tag: "vite-plugin-uni-pages"
|
|
16
|
+
}
|
|
17
|
+
});
|
|
12
18
|
|
|
13
19
|
// src/constant.ts
|
|
14
20
|
var virtualModuleId = "virtual:uni-pages";
|
|
@@ -34,17 +40,23 @@ var Context = class {
|
|
|
34
40
|
const { config } = await loadConfig({
|
|
35
41
|
sources: [
|
|
36
42
|
{
|
|
37
|
-
files:
|
|
38
|
-
extensions: [this.options.extension]
|
|
43
|
+
files: "pages.config"
|
|
39
44
|
}
|
|
40
45
|
],
|
|
41
46
|
merge: false
|
|
42
47
|
});
|
|
48
|
+
if (!config) {
|
|
49
|
+
logger.error(
|
|
50
|
+
"Can't found pages.config, please create pages.config.(ts|mts|cts|js|cjs|mjs|json)"
|
|
51
|
+
);
|
|
52
|
+
process.exit(-1);
|
|
53
|
+
}
|
|
54
|
+
logger.debug("Loaded user pages config", config);
|
|
43
55
|
this.pagesConfig = config;
|
|
44
56
|
}
|
|
45
57
|
async scanPages() {
|
|
46
58
|
const files = await fg("**/*.(vue|nvue)", {
|
|
47
|
-
ignore: ["node_modules", ".git", "**/__*__/*"],
|
|
59
|
+
ignore: ["node_modules", ".git", "**/__*__/*", ...this.options.exclude],
|
|
48
60
|
onlyFiles: true,
|
|
49
61
|
cwd: resolve2(process.cwd(), this.options.pagesDir)
|
|
50
62
|
});
|
|
@@ -60,6 +72,7 @@ var Context = class {
|
|
|
60
72
|
)
|
|
61
73
|
};
|
|
62
74
|
});
|
|
75
|
+
logger.debug("Scanned pages dir", this.pagesPathInfo);
|
|
63
76
|
}
|
|
64
77
|
async parsePage({ relative: relative2, absolute }) {
|
|
65
78
|
const code = await fs.promises.readFile(absolute, {
|
|
@@ -103,6 +116,7 @@ var Context = class {
|
|
|
103
116
|
const pages = Object.values(defu({}, pagesMeta, this.pagesConfig.pages));
|
|
104
117
|
pages.sort((a) => a.type === "home" ? -1 : 0);
|
|
105
118
|
this.pagesMeta = pages;
|
|
119
|
+
logger.debug("merged pages", this.pagesMeta);
|
|
106
120
|
}
|
|
107
121
|
async createOrUpdatePagesJSON() {
|
|
108
122
|
const outputName = "pages.json";
|
|
@@ -114,67 +128,107 @@ var Context = class {
|
|
|
114
128
|
encoding: "utf-8"
|
|
115
129
|
});
|
|
116
130
|
}
|
|
131
|
+
this.options.onBeforeLoadUserConfig(this);
|
|
117
132
|
await this.loadUserPagesConfig();
|
|
133
|
+
this.options.onAfterLoadUserConfig(this);
|
|
134
|
+
this.options.onBeforeScanPages(this);
|
|
118
135
|
await this.scanPages();
|
|
136
|
+
this.options.onAfterScanPages(this);
|
|
137
|
+
this.options.onBeforeMergePagesMeta(this);
|
|
119
138
|
await this.mergePagesMeta();
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
{
|
|
127
|
-
encoding: "utf-8"
|
|
128
|
-
}
|
|
129
|
-
);
|
|
139
|
+
this.options.onAfterMergePagesMeta(this);
|
|
140
|
+
this.options.onBeforeWriteFile(this);
|
|
141
|
+
fs.writeFileSync(resolvedOutput, this.pagesJson, {
|
|
142
|
+
encoding: "utf-8"
|
|
143
|
+
});
|
|
144
|
+
this.options.onAfterWriteFile(this);
|
|
130
145
|
}
|
|
131
146
|
async virtualModule() {
|
|
132
147
|
return `export const pages = ${JSON.stringify(this.pagesMeta)};`;
|
|
133
148
|
}
|
|
134
|
-
|
|
135
|
-
return
|
|
136
|
-
|
|
137
|
-
|
|
149
|
+
async pagesConfigSourcePaths() {
|
|
150
|
+
return await fg("pages.config.(ts|mts|cts|js|cjs|mjs|json)", {
|
|
151
|
+
deep: 0,
|
|
152
|
+
onlyFiles: true,
|
|
153
|
+
absolute: true
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
get pagesJson() {
|
|
157
|
+
return JSON.stringify({
|
|
158
|
+
...this.pagesConfig,
|
|
159
|
+
pages: this.pagesMeta
|
|
160
|
+
});
|
|
138
161
|
}
|
|
139
162
|
};
|
|
140
163
|
|
|
141
|
-
// src/config/index.ts
|
|
142
|
-
function definePages(config) {
|
|
143
|
-
return config;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
164
|
// src/index.ts
|
|
147
165
|
function resolveOptions(userOptions) {
|
|
148
166
|
return {
|
|
149
167
|
pagesDir: "src/pages",
|
|
150
168
|
outDir: "src",
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
169
|
+
exclude: [],
|
|
170
|
+
onBeforeLoadUserConfig: () => {
|
|
171
|
+
},
|
|
172
|
+
onAfterLoadUserConfig: () => {
|
|
173
|
+
},
|
|
174
|
+
onBeforeScanPages: () => {
|
|
175
|
+
},
|
|
176
|
+
onAfterScanPages: () => {
|
|
177
|
+
},
|
|
178
|
+
onBeforeMergePagesMeta: () => {
|
|
179
|
+
},
|
|
180
|
+
onAfterMergePagesMeta: () => {
|
|
181
|
+
},
|
|
182
|
+
onBeforeWriteFile: () => {
|
|
183
|
+
},
|
|
184
|
+
onAfterWriteFile: () => {
|
|
185
|
+
},
|
|
154
186
|
...userOptions
|
|
155
187
|
};
|
|
156
188
|
}
|
|
157
189
|
var VitePluginUniPages = async (userOptions = {}) => {
|
|
158
190
|
const options = resolveOptions(userOptions);
|
|
191
|
+
logger.debug("Create uni-pages context with", options);
|
|
159
192
|
const ctx = new Context(options);
|
|
160
193
|
return {
|
|
161
194
|
name: "vite-plugin-uni-pages",
|
|
162
195
|
enforce: "pre",
|
|
163
|
-
configureServer({ watcher }) {
|
|
164
|
-
|
|
196
|
+
async configureServer({ watcher, moduleGraph, ws }) {
|
|
197
|
+
const pagesConfigSourcePaths = await ctx.pagesConfigSourcePaths();
|
|
198
|
+
logger.debug("Add watcher", pagesConfigSourcePaths);
|
|
199
|
+
watcher.add(pagesConfigSourcePaths);
|
|
200
|
+
const reloadModule = (module, path = "*") => {
|
|
201
|
+
if (module) {
|
|
202
|
+
moduleGraph.invalidateModule(module);
|
|
203
|
+
if (ws) {
|
|
204
|
+
ws.send({
|
|
205
|
+
path,
|
|
206
|
+
type: "full-reload"
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
const updateVirtualModule = () => {
|
|
212
|
+
logger.debug("Update virtualModule");
|
|
213
|
+
const module = moduleGraph.getModuleById(resolvedVirtualModuleId);
|
|
214
|
+
reloadModule(module);
|
|
215
|
+
};
|
|
165
216
|
watcher.on("change", async (path) => {
|
|
166
|
-
if (normalizePath2(path)
|
|
217
|
+
if (pagesConfigSourcePaths.includes(normalizePath2(path)) || isPagePath(path, options)) {
|
|
167
218
|
await ctx.createOrUpdatePagesJSON();
|
|
219
|
+
updateVirtualModule();
|
|
168
220
|
}
|
|
169
221
|
});
|
|
170
222
|
watcher.on("add", async (path) => {
|
|
171
223
|
if (isPagePath(path, options)) {
|
|
172
224
|
await ctx.createOrUpdatePagesJSON();
|
|
225
|
+
updateVirtualModule();
|
|
173
226
|
}
|
|
174
227
|
});
|
|
175
228
|
watcher.on("unlink", async (path) => {
|
|
176
229
|
if (isPagePath(path, options)) {
|
|
177
230
|
await ctx.createOrUpdatePagesJSON();
|
|
231
|
+
updateVirtualModule();
|
|
178
232
|
}
|
|
179
233
|
});
|
|
180
234
|
},
|
|
@@ -193,7 +247,6 @@ var VitePluginUniPages = async (userOptions = {}) => {
|
|
|
193
247
|
var src_default = VitePluginUniPages;
|
|
194
248
|
export {
|
|
195
249
|
VitePluginUniPages,
|
|
196
|
-
src_default as default
|
|
197
|
-
definePages
|
|
250
|
+
src_default as default
|
|
198
251
|
};
|
|
199
252
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/constant.ts","../src/context/index.ts","../src/config/index.ts"],"sourcesContent":["import { normalizePath, Plugin } from \"vite\";\nimport { ResolvedOptions, UserOptions } from \"./types\";\nimport { isPagePath } from \"./utils\";\nimport { virtualModuleId, resolvedVirtualModuleId } from \"./constant\";\nimport { Context } from \"./context\";\n\nexport * from \"./config\";\n\nfunction resolveOptions(userOptions: UserOptions): ResolvedOptions {\n return {\n pagesDir: \"src/pages\",\n outDir: \"src\",\n entry: \"pages.config\",\n extension: \"ts\",\n middlewaresDir: \"src/middlewares\",\n ...userOptions,\n };\n}\n\nexport const VitePluginUniPages = async (\n userOptions: UserOptions = {}\n): Promise<Plugin> => {\n const options = resolveOptions(userOptions);\n const ctx = new Context(options);\n\n return {\n name: \"vite-plugin-uni-pages\",\n enforce: \"pre\",\n configureServer({ watcher }) {\n watcher.add(ctx.pagesConfigSourcePath);\n watcher.on(\"change\", async (path) => {\n if (\n normalizePath(path) === ctx.pagesConfigSourcePath ||\n isPagePath(path, options)\n ) {\n await ctx.createOrUpdatePagesJSON();\n }\n });\n watcher.on(\"add\", async (path) => {\n if (isPagePath(path, options)) {\n await ctx.createOrUpdatePagesJSON();\n }\n });\n watcher.on(\"unlink\", async (path) => {\n if (isPagePath(path, options)) {\n await ctx.createOrUpdatePagesJSON();\n }\n });\n },\n resolveId(id) {\n if (id === virtualModuleId) {\n return resolvedVirtualModuleId;\n }\n },\n\n load(id) {\n if (id === resolvedVirtualModuleId) {\n return ctx.virtualModule();\n }\n },\n };\n};\n\nexport default VitePluginUniPages;\n","import { resolve } from \"path\";\nimport { ResolvedOptions } from \"./types\";\nimport { createFilter } from \"vite\";\nexport const isPagePath = (path: string, options: ResolvedOptions) => {\n const dirPath = resolve(process.cwd(), options.pagesDir);\n const filter = createFilter(dirPath + \"/**/*.(vue|nvue)\");\n return filter(path);\n // if (path.startsWith(dirPath)) return true;\n // return false;\n};\n","export const virtualModuleId = \"virtual:uni-pages\";\nexport const resolvedVirtualModuleId = \"\\0\" + virtualModuleId;\n","import { extname, join, relative, resolve } from \"path\";\nimport { loadConfig } from \"unconfig\";\nimport { normalizePath } from \"vite\";\nimport { PagesConfig } from \"../config/types\";\nimport { PageMeta, PagePathInfo, ResolvedOptions } from \"../types\";\nimport fg from \"fast-glob\";\nimport { parse as JSONParse } from \"jsonc-parser\";\nimport { parse } from \"@vue/compiler-dom\";\nimport fs from \"fs\";\nimport { defu } from \"defu\";\n\nexport class Context {\n options: ResolvedOptions;\n pagesConfig!: PagesConfig;\n pagesPathInfo: PagePathInfo[] = [];\n pagesMeta: PageMeta[] = [];\n constructor(options: ResolvedOptions) {\n this.options = options;\n this.createOrUpdatePagesJSON();\n }\n\n async loadUserPagesConfig() {\n const { config } = await loadConfig({\n sources: [\n {\n files: this.options.entry,\n extensions: [this.options.extension],\n },\n ],\n merge: false,\n });\n this.pagesConfig = config as PagesConfig;\n }\n\n async scanPages() {\n const files = await fg(\"**/*.(vue|nvue)\", {\n ignore: [\"node_modules\", \".git\", \"**/__*__/*\"],\n onlyFiles: true,\n cwd: resolve(process.cwd(), this.options.pagesDir),\n });\n const basePath = relative(\n resolve(process.cwd(), this.options.outDir),\n this.options.pagesDir\n );\n this.pagesPathInfo = files.map((file) => {\n return {\n relative: normalizePath(join(basePath, file)),\n absolute: normalizePath(\n resolve(process.cwd(), this.options.pagesDir, file)\n ),\n };\n });\n }\n\n async parsePage({ relative, absolute }: PagePathInfo): Promise<PageMeta> {\n const code = await fs.promises.readFile(absolute, {\n encoding: \"utf-8\",\n });\n const t = parse(code);\n const path = relative.replace(extname(relative), \"\");\n let pageMeta: PageMeta = {\n path,\n type: \"page\",\n };\n t?.children.forEach((v) => {\n if (v.type !== 1) {\n return;\n }\n if (v.tag === \"route\") {\n v.props.forEach((prop) => {\n if (prop.type === 6 && prop.name === \"type\") {\n pageMeta.type = prop.value?.content ?? pageMeta.type;\n }\n });\n const astContent = v.children?.[0];\n if (astContent && astContent.type === 2) {\n const _pageMeta = JSONParse(astContent.content);\n Object.keys(_pageMeta).forEach((key) => {\n pageMeta[key] = _pageMeta[key];\n });\n // overwrite path\n pageMeta[\"path\"] = path;\n }\n }\n });\n return pageMeta;\n }\n\n async mergePagesMeta() {\n const pagesMeta = await Promise.all(\n this.pagesPathInfo?.map(async (page) => await this.parsePage(page))\n );\n const pages = Object.values(defu({}, pagesMeta, this.pagesConfig.pages));\n // @ts-ignore\n pages.sort((a) => (a.type === \"home\" ? -1 : 0));\n // @ts-ignore\n this.pagesMeta = pages;\n }\n\n async createOrUpdatePagesJSON() {\n const outputName = \"pages.json\";\n const resolvedOutput = normalizePath(\n resolve(process.cwd(), this.options.outDir, outputName)\n );\n\n // 如果不存在,先输出一个占位文件\n if (!fs.existsSync(resolvedOutput)) {\n fs.writeFileSync(resolvedOutput, `{\"pages\": [{\"path\": \"\"}]}`, {\n encoding: \"utf-8\",\n });\n }\n\n await this.loadUserPagesConfig();\n await this.scanPages();\n await this.mergePagesMeta();\n\n fs.writeFileSync(\n resolvedOutput,\n JSON.stringify({\n ...this.pagesConfig,\n pages: this.pagesMeta,\n }),\n {\n encoding: \"utf-8\",\n }\n );\n }\n\n async virtualModule() {\n return `export const pages = ${JSON.stringify(this.pagesMeta)};`;\n }\n\n get pagesConfigSourcePath() {\n return normalizePath(\n resolve(process.cwd(), `${this.options.entry}.${this.options.extension}`)\n );\n }\n}\n","import { UserPagesConfig } from \"./types\";\nexport * from \"./types\";\nexport function definePages(config: UserPagesConfig) {\n return config;\n}\n"],"mappings":"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","names":["normalizePath","resolve","relative","_a","normalizePath"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/constant.ts","../src/context/index.ts"],"sourcesContent":["import { ModuleNode, normalizePath, Plugin } from \"vite\";\nimport { ResolvedOptions, UserOptions } from \"./types\";\nimport { isPagePath, logger } from \"./utils\";\nimport { virtualModuleId, resolvedVirtualModuleId } from \"./constant\";\nimport { Context } from \"./context\";\n\nfunction resolveOptions(userOptions: UserOptions): ResolvedOptions {\n return {\n pagesDir: \"src/pages\",\n outDir: \"src\",\n exclude: [],\n onBeforeLoadUserConfig: () => {},\n onAfterLoadUserConfig: () => {},\n onBeforeScanPages: () => {},\n onAfterScanPages: () => {},\n onBeforeMergePagesMeta: () => {},\n onAfterMergePagesMeta: () => {},\n onBeforeWriteFile: () => {},\n onAfterWriteFile: () => {},\n ...userOptions,\n };\n}\n\nexport const VitePluginUniPages = async (\n userOptions: UserOptions = {}\n): Promise<Plugin> => {\n const options = resolveOptions(userOptions);\n logger.debug(\"Create uni-pages context with\", options);\n const ctx = new Context(options);\n return {\n name: \"vite-plugin-uni-pages\",\n enforce: \"pre\",\n async configureServer({ watcher, moduleGraph, ws }) {\n const pagesConfigSourcePaths = await ctx.pagesConfigSourcePaths();\n logger.debug(\"Add watcher\", pagesConfigSourcePaths);\n watcher.add(pagesConfigSourcePaths);\n\n const reloadModule = (module: ModuleNode | undefined, path = \"*\") => {\n if (module) {\n moduleGraph.invalidateModule(module);\n if (ws) {\n ws.send({\n path,\n type: \"full-reload\",\n });\n }\n }\n };\n const updateVirtualModule = () => {\n logger.debug(\"Update virtualModule\");\n const module = moduleGraph.getModuleById(resolvedVirtualModuleId);\n reloadModule(module);\n };\n\n watcher.on(\"change\", async (path) => {\n if (\n pagesConfigSourcePaths.includes(normalizePath(path)) ||\n isPagePath(path, options)\n ) {\n await ctx.createOrUpdatePagesJSON();\n updateVirtualModule();\n }\n });\n watcher.on(\"add\", async (path) => {\n if (isPagePath(path, options)) {\n await ctx.createOrUpdatePagesJSON();\n updateVirtualModule();\n }\n });\n watcher.on(\"unlink\", async (path) => {\n if (isPagePath(path, options)) {\n await ctx.createOrUpdatePagesJSON();\n updateVirtualModule();\n }\n });\n },\n resolveId(id) {\n if (id === virtualModuleId) {\n return resolvedVirtualModuleId;\n }\n },\n\n load(id) {\n if (id === resolvedVirtualModuleId) {\n return ctx.virtualModule();\n }\n },\n };\n};\n\nexport default VitePluginUniPages;\n","import { resolve } from \"path\";\nimport { ResolvedOptions } from \"./types\";\nimport { createFilter } from \"vite\";\nimport consola from \"consola\";\n\nexport const isPagePath = (path: string, options: ResolvedOptions) => {\n const dirPath = resolve(process.cwd(), options.pagesDir);\n const filter = createFilter(dirPath + \"/**/*.(vue|nvue)\", options.exclude);\n return filter(path);\n};\n\nexport const logger = consola.create({\n defaults: {\n tag: \"vite-plugin-uni-pages\",\n },\n});\n","export const virtualModuleId = \"virtual:uni-pages\";\nexport const resolvedVirtualModuleId = \"\\0\" + virtualModuleId;\n","import { extname, join, relative, resolve } from \"path\";\nimport { loadConfig } from \"unconfig\";\nimport { normalizePath } from \"vite\";\nimport { PagesConfig } from \"../config/types\";\nimport { PageMeta, PagePathInfo, ResolvedOptions } from \"../types\";\nimport fg from \"fast-glob\";\nimport { parse as JSONParse } from \"jsonc-parser\";\nimport { parse } from \"@vue/compiler-dom\";\nimport fs from \"fs\";\nimport { defu } from \"defu\";\nimport { logger } from \"../utils\";\nexport class Context {\n options: ResolvedOptions;\n pagesConfig!: PagesConfig;\n pagesPathInfo: PagePathInfo[] = [];\n pagesMeta: PageMeta[] = [];\n constructor(options: ResolvedOptions) {\n this.options = options;\n this.createOrUpdatePagesJSON();\n }\n\n async loadUserPagesConfig() {\n const { config } = await loadConfig({\n sources: [\n {\n files: \"pages.config\",\n },\n ],\n merge: false,\n });\n if (!config) {\n logger.error(\n \"Can't found pages.config, please create pages.config.(ts|mts|cts|js|cjs|mjs|json)\"\n );\n process.exit(-1);\n }\n logger.debug(\"Loaded user pages config\", config);\n this.pagesConfig = config as PagesConfig;\n }\n\n async scanPages() {\n const files = await fg(\"**/*.(vue|nvue)\", {\n ignore: [\"node_modules\", \".git\", \"**/__*__/*\", ...this.options.exclude],\n onlyFiles: true,\n cwd: resolve(process.cwd(), this.options.pagesDir),\n });\n const basePath = relative(\n resolve(process.cwd(), this.options.outDir),\n this.options.pagesDir\n );\n this.pagesPathInfo = files.map((file) => {\n return {\n relative: normalizePath(join(basePath, file)),\n absolute: normalizePath(\n resolve(process.cwd(), this.options.pagesDir, file)\n ),\n };\n });\n logger.debug(\"Scanned pages dir\", this.pagesPathInfo);\n }\n\n async parsePage({ relative, absolute }: PagePathInfo): Promise<PageMeta> {\n const code = await fs.promises.readFile(absolute, {\n encoding: \"utf-8\",\n });\n const t = parse(code);\n const path = relative.replace(extname(relative), \"\");\n let pageMeta: PageMeta = {\n path,\n type: \"page\",\n };\n t?.children.forEach((v) => {\n if (v.type !== 1) {\n return;\n }\n if (v.tag === \"route\") {\n v.props.forEach((prop) => {\n if (prop.type === 6 && prop.name === \"type\") {\n pageMeta.type = prop.value?.content ?? pageMeta.type;\n }\n });\n const astContent = v.children?.[0];\n if (astContent && astContent.type === 2) {\n const _pageMeta = JSONParse(astContent.content);\n Object.keys(_pageMeta).forEach((key) => {\n pageMeta[key] = _pageMeta[key];\n });\n // overwrite path\n pageMeta[\"path\"] = path;\n }\n }\n });\n return pageMeta;\n }\n\n async mergePagesMeta() {\n const pagesMeta = await Promise.all(\n this.pagesPathInfo?.map(async (page) => await this.parsePage(page))\n );\n const pages = Object.values(defu({}, pagesMeta, this.pagesConfig.pages));\n // @ts-ignore\n pages.sort((a) => (a.type === \"home\" ? -1 : 0));\n // @ts-ignore\n this.pagesMeta = pages;\n logger.debug(\"merged pages\", this.pagesMeta);\n }\n\n async createOrUpdatePagesJSON() {\n const outputName = \"pages.json\";\n const resolvedOutput = normalizePath(\n resolve(process.cwd(), this.options.outDir, outputName)\n );\n\n // 如果不存在,先输出一个占位文件\n if (!fs.existsSync(resolvedOutput)) {\n fs.writeFileSync(resolvedOutput, `{\"pages\": [{\"path\": \"\"}]}`, {\n encoding: \"utf-8\",\n });\n }\n\n this.options.onBeforeLoadUserConfig(this);\n await this.loadUserPagesConfig();\n this.options.onAfterLoadUserConfig(this);\n\n this.options.onBeforeScanPages(this);\n await this.scanPages();\n this.options.onAfterScanPages(this);\n\n this.options.onBeforeMergePagesMeta(this);\n await this.mergePagesMeta();\n this.options.onAfterMergePagesMeta(this);\n\n this.options.onBeforeWriteFile(this);\n fs.writeFileSync(resolvedOutput, this.pagesJson, {\n encoding: \"utf-8\",\n });\n this.options.onAfterWriteFile(this);\n }\n\n async virtualModule() {\n return `export const pages = ${JSON.stringify(this.pagesMeta)};`;\n }\n\n async pagesConfigSourcePaths() {\n return await fg(\"pages.config.(ts|mts|cts|js|cjs|mjs|json)\", {\n deep: 0,\n onlyFiles: true,\n absolute: true,\n });\n }\n\n get pagesJson() {\n return JSON.stringify({\n ...this.pagesConfig,\n pages: this.pagesMeta,\n });\n }\n}\n"],"mappings":"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","names":["normalizePath","resolve","resolve","relative","_a","normalizePath"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
interface PagesConfig {
|
|
2
|
+
pages: any;
|
|
3
|
+
globalStyle: any;
|
|
4
|
+
easycom: any;
|
|
5
|
+
tabBar: any;
|
|
6
|
+
condition: any;
|
|
7
|
+
subPackages: any;
|
|
8
|
+
preloadRule: any;
|
|
9
|
+
workers: any;
|
|
10
|
+
leftWindow: any;
|
|
11
|
+
topWindow: any;
|
|
12
|
+
rightWindow: any;
|
|
13
|
+
uniIdRouter: any;
|
|
14
|
+
}
|
|
15
|
+
interface UserPagesConfig extends Partial<PagesConfig> {
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export { PagesConfig as P, UserPagesConfig as U };
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uni-helper/vite-plugin-uni-pages",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
5
|
-
"packageManager": "pnpm@7.
|
|
4
|
+
"version": "0.0.4",
|
|
5
|
+
"packageManager": "pnpm@7.16.0",
|
|
6
6
|
"description": "File system based routing for uni-app applications using Vite",
|
|
7
7
|
"author": "KeJun",
|
|
8
8
|
"license": "MIT",
|
|
@@ -32,6 +32,16 @@
|
|
|
32
32
|
"main": "./dist/index.mjs",
|
|
33
33
|
"module": "./dist/index.js",
|
|
34
34
|
"types": "./dist/index.d.ts",
|
|
35
|
+
"typesVersions": {
|
|
36
|
+
"*": {
|
|
37
|
+
"*": [
|
|
38
|
+
"./dist/index.d.ts"
|
|
39
|
+
],
|
|
40
|
+
"config": [
|
|
41
|
+
"./dist/config/index.d.ts"
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
},
|
|
35
45
|
"files": [
|
|
36
46
|
"dist",
|
|
37
47
|
"client.d.ts"
|
|
@@ -48,12 +58,14 @@
|
|
|
48
58
|
"@types/node": "^18.11.9",
|
|
49
59
|
"bumpp": "^8.2.1",
|
|
50
60
|
"tsup": "^6.5.0",
|
|
51
|
-
"typescript": "^4.
|
|
52
|
-
"vite": "^3.2.
|
|
61
|
+
"typescript": "^4.9.3",
|
|
62
|
+
"vite": "^3.2.4"
|
|
53
63
|
},
|
|
54
64
|
"dependencies": {
|
|
55
65
|
"@vue/compiler-dom": "^3.2.45",
|
|
56
|
-
"
|
|
66
|
+
"colorette": "^2.0.19",
|
|
67
|
+
"consola": "^2.15.3",
|
|
68
|
+
"defu": "^6.1.1",
|
|
57
69
|
"fast-glob": "^3.2.12",
|
|
58
70
|
"jsonc-parser": "^3.2.0",
|
|
59
71
|
"unconfig": "^0.3.7"
|