一. 新建项目
- 我这里选择的是
ts+less模板
二. typings 文件夹
-
使用微信小程序开发者工具创建的 Typescript 模版项目有一个
typings文件夹,里面放着微信小程序的类型声明文件,同时.tsconfig.json的compilerOptions.typeRoots字段被设置为./typings,即一律从./typings读取类型声明。 -
下方是小程序 ts 模版创建的
.tsconfig.json文件中的内容,各配置项目的意义和作用可参考 Typescript 的官方文档{ "compilerOptions": { "strictNullChecks": true, "noImplicitAny": true, "module": "CommonJS", "target": "ES2020", "allowJs": true, "allowSyntheticDefaultImports": true, "esModuleInterop": true, "experimentalDecorators": true, "noImplicitThis": true, "noImplicitReturns": true, "alwaysStrict": true, "noFallthroughCasesInSwitch": true, "noUnusedLocals": true, "noUnusedParameters": true, "strict": true, "strictPropertyInitialization": true, "lib": ["ES2020"], "typeRoots": [ "./typings" ] }, "include": [ "./**/*.ts" ], "exclude": [ "node_modules" ] } -
ts 默认从
node_modules/@types读取类型声明文件,当设置了typeRoots后就只有typeRoots指向的类型声明会被读取(即./typings文件夹下的类型),其他会被忽略。 -
./typings目录下的小程序类型声明可以手动更新。 -
令人困惑的是,用微信开发者工具创建的 Typescript 模版自动创建了一个
package.json文件,里面有一个名为miniprogram-api-typings的 devDependencies,微信官方工作人员建议:如果你是从工具的 ts 相关模板创建的项目,可以不用执行
npm install,工具会自动处理好小程序相关的声明文件。 -
换言之,如果你用
./typings,就不需要用miniprogram-api-typings,可以把miniprogram-api-typings从package.json删除。{ "name": "miniprogram-ts-less-quickstart", "version": "1.0.0", "description": "", "scripts": {}, "keywords": [], "author": "", "license": "", "dependencies": {}, "devDependencies": { "miniprogram-api-typings": "^2.8.3-1" } }
三. miniprogram-api-typings
-
如果你不想用
./typings,而是选择miniprogram-api-typings,又应该怎么做呢? -
首先要删除
typings文件夹,并删除 .tsconfig.json 的compilerOptions.typeRoots字段,接着参考miniprogram-api-typings使用文档,有两种使用方法:npm install @types/wechat-miniprogram@latest;npm install miniprogram-api-typings@latest,然后在compilerOptions.types设置["miniprogram-api-typings"]
miniprogram-api-typings在 npm 的版本号比@types/wechat-miniprogram更高,最近更新日期也更接近现在,所以用第二种方法应该更好一些。 -
使用微信开发者工具创建的 ts 模版在
app.ts等处使用了一个叫<IAppOption>的类型,改用 npm 安装类型声明而不是使用./typings下的声明后<IAppOption>会提示不存在,可把它删除。 -
使用微信开发者工具创建的 ts 模版有一个 ESLint 配置文件
.eslintrc.js,但里面并没有针对 Typescript 相关的规则,关于如何在 Typescript 项目下配置 ESLint,请参考微信小程序开发者工具配置 ESLint 的方法。
四. 引入vant-weapp
-
点击空白部分,按
ctrl+a后,再右键选择在外部终端中打开(根目录),在开发者工具内部的终端执行好像无法构建npm包)
-
安装@vant/weapp
# 通过 npm 安装 npm i @vant/weapp -S --production -
修改miniprogram/app.json
app.json 中的
"style": "v2"去除,小程序的新版基础组件强行加上了许多样式,难以覆盖,不关闭将造成部分组件样式混乱。 -
修改
project.config.json文件此时直接构建会报错:message: NPM packages not found. Please confirm npm packages which need to build are belong to
miniprogramRootdirectory. Or you may edit project.config.json'spackNpmManuallyandpackNpmRelationListappid: wxa1dec343634d1042 openid: o6zAJswaz4XneDw3ZSCUg4yoy3Ns ideVersion: 1.06.2407120 osType: win32-x64 time: 2025-02-11 10:36:02未找到 NPM 包。请确认需要构建的 npm 包属于 miniprogramRoot 目录。或者您可以编辑 project.config.json 的 packNpmManually 和 packNpmRelationList
- 配置
project.config.json的setting.packNpmManually为true,开启自定义 node_modules 和 miniprogram_npm 位置的构建 npm 方式 - 配置
project.config.json的setting.packNpmRelationList项,指定packageJsonPath和miniprogramNpmDistDir的位置"setting": { "packNpmManually": true, "packNpmRelationList": [ { "packageJsonPath": "./package.json", "miniprogramNpmDistDir": "./miniprogram/" } ], }-
packageJsonPath表示 node_modules 源对应的 package.json -
miniprogramNpmDistDir表示 node_modules 的构建结果目标位置
-
- 配置
-
构建npm
- 执行项目-》重新打开此项目(不要忘了)
- 然后再点击 工具 -> 构建 npm
注意: skyline渲染引擎不支持原生导航栏。微信官方链接
-
使用-引入组件
以 Button 组件为例,只需要在
app.json或index.json中配置 Button 对应的路径即可。// 通过 npm 安装 // app.json "usingComponents": { "van-button": "@vant/weapp/button/index" }
五. 解决引入vant后包太大
参考 小程序中使用npm安装vant组件实现按需引入减少代码包大小,避免触发用户隐私协议
- vant-tree-shaking使用方式
- 需要注意文件目录位置
//package.json
{
"name": "miniprogram-ts-less-quickstart",
"version": "1.0.0",
"description": "",
"scripts": {
"vant": "vant-tree-shaking --vantPath=miniprogram/miniprogram_npm/@vant/weapp"
},
"keywords": [],
"author": "",
"license": "",
"dependencies": {
"@vant/weapp": "^1.11.7"
},
"devDependencies": {
"vant-tree-shaking": "^1.0.4"
}
}
-
引入vant前

-
引入vant后

-
优化后

六. 引入Unocss
我这里使用 unocss-preset-weapp 预设
//注意文件目录package.json
"scripts": {
"unocss": "unocss miniprogram/pages/**/*.wxml -c unocss.config.js --watch -o miniprogram/unocss.less",
"unocss:build": "unocss miniprogram/pages/**/*.wxml -c unocss.config.js -o miniprogram/unocss.less"
},
//app.less
@import './unocss.less';
结果
将unocss和vant合成一条命令
"build": "npm run unocss:build && npm run vant"
//package.json
"scripts": {
"unocss": "unocss miniprogram/pages/**/*.wxml -c unocss.config.js --watch -o miniprogram/unocss.less",
"unocss:build": "unocss miniprogram/pages/**/*.wxml -c unocss.config.js -o miniprogram/unocss.less",
"vant": "vant-tree-shaking --vantPath=miniprogram/miniprogram_npm/@vant/weapp",
"build": "npm run unocss:build && npm run vant"
},
七. 封装请求
八. 路径别名
1. tsconfig.json里有如下配置
{
"compilerOptions": {
"baseUrl": ".", // 用于设置解析非相对模块名称的基本目录,相对模块不会受到baseUrl的影响
"paths": {
"@/*": ["miniprogram/*"]
}
}
}
app.json里设置路径别名
{
"resolveAlias": {
"@/*": "/*"
}
}
- 使用
import { $get } from '@/utils/request';
八. 新建页面
-
选中pages,点击上面新建文件夹按钮,新建index(输入文件夹名)文件夹

-
右键刚才新建的文件夹
index,选择新建page,输入index(页面名称),最好和index文件夹同名
-
此时在
app.json文件里就会生成刚刚新建的页面

