uni-helper / vite-plugin-uni-pages

为 Vite 下的 uni-app 提供基于文件系统的路由
https://uni-helper.js.org/vite-plugin-uni-pages
MIT License
104 stars 15 forks source link

自动生成的page.json,无法将更多自定义的配置项载入 #144

Open Vanisper opened 6 months ago

Vanisper commented 6 months ago

描述问题

image

如上图所示,微信小程序darkmode的适配需要在page.json中开启darkmode,但是我在 接口定义PagesConfig 中没有找到相关定义;

但是发现此字段是允许 [x: string]: any 的,于是就自行添加了此配置,但是发现并没有出现在自动生成的 page.json 中。


期望:

希望能支持自定义加入额外自定义配置项,或者将 darkmode 配置项加入到 接口定义PagesConfig 中,且能够如愿出现在page.json中。

复现

// page.config.ts
import { defineUniPages } from "@uni-helper/vite-plugin-uni-pages"

export default defineUniPages({
    // more
    // ...
    darkmode: true,
    // more
    // ...
})

以上 darkmode: true 为需要额外加入到page.json配置项,但是没有如愿加入。

系统信息

System:
    OS: Windows 10 10.0.19044
    CPU: (32) x64 AMD Ryzen 9 7950X 16-Core Processor
    Memory: 43.60 GB / 63.21 GB
  Binaries:
    Node: 18.18.2 - D:\Environment\NodeJs\node.EXE
    Yarn: 1.22.21 - D:\Environment\NodeJs\yarn.CMD
    npm: 10.2.5 - D:\Environment\NodeJs\npm.CMD
    pnpm: 8.14.0 - D:\Environment\NodeJs\pnpm.CMD
  Browsers:
    Edge: Chromium (122.0.2365.80)
    Internet Explorer: 11.0.19041.3636

使用的包管理器

pnpm

核对

KeJunMao commented 6 months ago

https://github.com/uni-helper/vitesse-uni-app/blob/main/manifest.config.ts#L60

有没有可能,darkmode 是这样开启的?

Vanisper commented 6 months ago

是的 大佬说的没错 是我疏忽了

后面发现了此问题的原因: 以上问题的出现是因为项目特殊原因,每次启动前都会吧manifest.json的文件内容清空,这就导致了 vite-plugin-uni-manifest 插件没有及时生成 manifest.json 文件的时候 vite-plugin-uni-pages 插件就产生效力了,导致读取不到 manifest.json 的内容;

尝试过在 vite.config.ts 中将 vite-plugin-uni-manifest 插件的顺序提到最前面,也是如此(我理想中该插件提到最前面的时候,能先生成manifest.json,然后 vite-plugin-uni-pages 产生效力的时候就能有内容可读取,但是并没有如我想象中那样);

基于以上,我想我的问题有两个办法可以解决:

  1. 由于项目的特殊性,需要执行一次 echo {}> src/manifest.json ,我需要做的就是判断此文件存在时不做此操作即可(因为我只需要项目开始之初创建此文件即可,所以做的 echo {}> src/manifest.json 操作只需一次即可,但是由于本人没做判断,导致每次dev的时候都做了此操作,所以就出现了每次都会清空一次 manifest.json 文件的结果);
  2. 本插件可以实现热更新,因为当前根据本人的使用判断,本插件仅仅只读取了一次 manifest.json ,解决我上面的问题可能需要本插件实现对该文件的监听,并且实现热更新(此条仅做建议,同时我发现 vite-plugin-uni-manifest 插件并没有实现对manifest.config.ts文件的热更新监听,可能对开发有一点点体验上的影响)。

解决办法1:最终将 echo {}> src/manifest.json 操作改为了:

{
    "scripts": {
        "reset:manifest": "node -e \"var fs = require('fs'); if (!fs.existsSync('src/manifest.json')) fs.writeFileSync('src/manifest.json', '{}');\"",
    },
}