Skip to content

配置

ufjs 的配置分三处:

文件管什么
app.config.ts原生应用本身:版本、包名、权限、屏幕方向、小程序 appid
package.jsonfjs 字段构建行为:共享 chunk、宿主目录、性能预算、小程序页面与分包
页面的 <route>单个页面:标题、平台、转场、自定义 meta

app.config.ts

ts
import { defineConfig } from '@ufjs/cli/config';

export default defineConfig({
  version: '1.2.0+3',
  orientation: 'portrait',
  android: {
    applicationId: 'com.acme.demo',
    permissions: ['android.permission.INTERNET'],
  },
  ios: {
    bundleIdentifier: 'com.acme.demo',
    infoPlist: { NSCameraUsageDescription: '用于扫描二维码' },
  },
  wxmp: {
    appid: 'wx1234567890abcdef',
    renderer: 'skyline',
    setting: { minified: true },
  },
});
字段类型说明
versionstring写进宿主 pubspec,形如 1.2.0+3。决定 Android versionName / versionCode 和 iOS 版本号。默认 1.0.0+1
orientation'portrait' | 'landscape'锁定屏幕方向。不写则全方向
android.applicationIdstringAndroid 包名
android.permissionsstring[]完整权限名,写入 AndroidManifest.xml
ios.bundleIdentifierstringiOS bundle id
ios.infoPlistRecord<string, string | number | boolean | string[] | number[]>写入 Info.plist
wxmp.appidstring小程序 appid(wx + 16 位十六进制)。默认 touristappid
wxmp.renderer'webview' | 'skyline'小程序渲染器,默认 webview
wxmp.settingobject按键合并进 project.config.json 的 setting,你的值优先

fjs run / fjs host create 会同步这些配置到受管宿主;eject 之后宿主归你维护。

package.jsonfjs 字段

json
{
  "fjs": {
    "shared": ["pinia"],
    "flutterDir": "flutter",
    "performance": { "nodeBudget": 800 },
    "mp": {
      "appid": "wx1234567890abcdef",
      "shell": "@/Shell.vue",
      "exclude": ["example/webgl"],
      "excludeComponents": ["TabBar"],
      "subpackages": [
        { "root": "game", "pages": ["example/game/"], "public": ["sprites"] }
      ],
      "preloadRule": {
        "/example": { "network": "all", "packages": ["game"] }
      }
    }
  }
}
字段说明
shared分包构建时额外放进共享 chunk 的裸导入名。带模块级状态的库(pinia、vue-i18n)需要
flutterDir宿主目录。fjs host eject 会自动写入
performance.nodeBudget首帧节点数告警阈值,默认 500
packagesfjs add 装过的库(信息性,fjs doctor 读取)
mp.appid小程序 appid 兜底(优先级低于 app.config.tswxmp.appid
mp.shell小程序端的外壳组件,默认 src/Shell.vue
mp.exclude不进小程序的页面(路由路径或路径片段)
mp.excludeComponents小程序端不发射的本地组件(比如由原生 tabBar 接管时的自定义 TabBar)
mp.subpackages小程序分包:root 目录、pages 匹配片段、public 随包搬迁的 public 子目录
mp.preloadRule分包预下载,键是 fjs 路由路径

<route>

vue
<route>
{
  "title": "详情",
  "name": "detail",
  "path": "/detail/:id",
  "platforms": ["app", "web"],
  "tab": 0,
  "transition": "fjs-slide-up",
  "scroll": false,
  "group": "自定义字段"
}
</route>
字段说明
path覆盖由文件路径推导的路由
name覆盖路由名(默认由路径推导,如 user/[id].vueuser-id
platforms["app"] / ["web"] 限定平台,默认两端
tab数字:这是一个 tab 页,tab 间切换保活
transition这个页面的转场:fjs-page / fjs-slide / fjs-fade / fjs-slide-up / fjs-zoom / false
其它任意字段route.meta,比如 title、自定义的 scrollgroup

模块清单

模块自己的 package.json 里的 fjs 字段,见创建模块

createFjsApp 选项

ts
createFjsApp({
  routes,                  // 来自 'fjs/pages'
  plugins,                 // 来自 'fjs/plugins'
  shell: Shell,            // 每个页面的外壳组件
  transition: 'fjs-slide', // 或 false,或 (nav) => 名字 | false
  setup(app) {},           // 挂载前调用:Flutter 上每个页面一次,Web 上整个应用一次
  // 以下只在 Web 生效
  el: '#app',              // 挂载点
  history: 'hash',         // 'hash'(默认)| 'history'
  keepAlive: true,         // 缓存历史栈上的页面;数字 = 最多缓存几页;false = 总是重挂
}).mount();

pluginssetup 之前按顺序应用。

基于 MIT 协议发布