You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

3.1 KiB

AGENTS.md

Project

WeChat Mini Program (微信小程序) — school campus app. Source root is src/ (set via miniprogramRoot in project.config.json).

Commands

  • Lint: pnpm run lint:fix (eslint only; no separate typecheck or test commands exist)
  • npm build: Must use WeChat DevTools → "Build npm" menu. Output goes to src/miniprogram_npm/ (gitignored). Do not edit miniprogram_npm/ manually.
  • JSX compile: pnpm run beforeCompile — Babel-transforms .jsx files under src/pages/ using @babel/plugin-transform-react-jsx (automatic runtime). WeChat DevTools runs this automatically via project.config.json scripts before compile/preview/upload. No .jsx files currently exist, but the pipeline is wired.

Architecture

  • Custom Page wrapper (src/utils/page.ts): The global Page constructor is replaced in app.ts onLaunch. Every page automatically gets navbar setup, image params, scroll-based nav background, and a default onShareAppMessage. When adding page lifecycle hooks, be aware these wrappers run before your own handlers.
  • wx.ajax: Custom property added to wx in app.ts onLaunch. It is a curried version of src/api/request.ts with the base URL baked in. Use wx.ajax(...) for network requests — do not call request directly from pages.
  • Login flow: Managed in App via globalData.loginState / globalData.initLoginInfo. Pages call getApp().waitLogin() before making authenticated requests.
  • Custom tabbar: app.json has "custom": true; the tabbar UI is implemented in components.

Path Aliases

  • @/*src/* (configured in both tsconfig.json paths and app.json resolveAlias)

Style & Lint

  • ESLint: @antfu/eslint-config + eslint-config-prettier (stylistic rules off). Globals wx, App, Page, Component, getApp, getCurrentPages, requirePlugin, requireMiniProgram are declared.
  • Prettier: no semicolons, single quotes, trailing commas, printWidth 120. Uses html parser for .wxml, css for .wxss, babel for .wxs.
  • TypeScript: strict mode (but noImplicitAny: false), target ES5, CommonJS modules. Typings in typings/index.d.ts declare IAppOption, IAgaxParams, and extend WechatMiniprogram.Wx with ajax.

File Structure

Each page/component follows the standard miniprogram quad: .ts, .wxml, .scss, .json.

src/
  app.ts / app.json / app.scss   # App entry
  api/request.ts                  # HTTP request wrapper
  utils/
    page.ts                       # Custom Page wrapper (global)
    util.ts                       # Helpers
    dayjs/                        # Manually bundled dayjs plugins (not from npm)
  pages/{name}/index.{ts,wxml,scss,json}
  components/{name}/index.{ts,wxml,scss,json}

Gotchas

  • src/utils/dayjs/ contains hand-copied dayjs locale/plugin files, not npm imports. Do not replace with npm imports without testing.
  • src/miniprogram_npm/ is build output — never edit directly.
  • The beforeCompile Babel step only processes src/pages/**/*.jsx. If you add JSX outside pages/, the script won't catch it.
  • No test framework is configured.