项目和构建
项目
create 生成的是 TypeScript 项目:
day-progress/
├── manifest.json 清单:标识符、名称、类型、尺寸、权限、选项
├── src/
│ ├── index.ts 入口
│ └── progress.ts 用 import 拆分模块
├── tsconfig.json 编辑器补全和类型检查(npx tsc)
├── types/ 运行时 API 的类型声明
├── package.json 可选,用 npm 安装依赖
└── assets/… 可选,图片等资源manifest.json 的字段见清单。
在编辑器里获得补全:create 会把类型声明复制到项目的 types/ 下,tsconfig.json 已经包含它,并关掉了 DOM 和 Node.js 的类型("lib": ["es2022"]、"types": []),避免和运行时的声明冲突。升级 SDK 后可以用新版本的 types/desktop-engine.d.ts 替换项目里的这份。
构建
运行时只有 CommonJS 的 require(),dev、build 和 pack 会先用 esbuild 把 src/index.ts 连同 import 的文件和 node_modules 里的包打成一个 index.js,在 dist/package/ 里组装出应用导入的小程序包:
dist/package/
├── manifest.json
├── index.js 打包后的入口,在 JavaScriptCore 中以全局脚本执行
└── assets/… 除 src/、types/、tsconfig.json 和 npm 文件以外的文件原样放进包里dev、build 和 pack 组装包时,名字以点开头的隐藏文件和文件夹(.env、.npmrc、.git…)在哪一层都不会放进包里:安装了这个包的人都能看到包里的内容。API 密钥和令牌也不要写在其它文件里。
node_modules 文件夹和 .zip 文件也不会放进包里。dist/、types/ 和 tsconfig.json 只在项目根目录下才排除,更深的层级(比如 assets/types/)里同名的是包自己的文件。符号链接按它指向的文件或文件夹放进包里(应用不安装符号链接);指向不存在的文件、或指向包含它自己的文件夹时,构建会停下来报错。
- 目标是 macOS 12 的 JavaScriptCore(相当于 Safari 15),更新的语法会被转换。
- 只能用不依赖 DOM 和 Node.js 的包;运行时有
performance.now(),库如果还用到window、document等全局对象,要先自己补上。three.js 和 PixiJS 可以直接用,见用 WebGL 或渲染引擎绘制。 - esbuild 只转换 TypeScript、不检查类型,类型错误由编辑器或
npx tsc发现。 --minify压缩打包结果,适合带着大型库的项目。- 入口也可以是
src/index.js(或.tsx、.mjs);有src/时项目根目录不能再有index.js。 - 不想构建也可以:没有
src/的项目原样打包,根目录的index.js就是入口,其他文件用require()引用。
各个命令的参数见命令行。
