uniapp3: 小程序开发
小程序开发框架笔记
期望的 cheatsheet
功能 | 描述 |
---|---|
uniapp3 |
|
sass |
|
pinia-state-tree 核心状态管理 |
|
uni-ui | 一套扩展组件
|
sourceMap | 便于调试 |
local | storage: 本地存储 |
代码格式化 | prettier/editorconfig |
API 管理 | http-schema(interceptors) |
下拉刷新? | http://www.mescroll.com/uni.html |
事件 |
|
错误处理 |
|
工具 |
|
rpx 支持 |
|
技术选型
个人不推荐,迫于“形式”,还是使用了这个框架。
别人的感受
吐槽的还是很恐怖的,不过,仔细研究可以一试。
- https://www.zhihu.com/question/444976489/answer/2699176139
- https://www.zhihu.com/question/493930892/answer/2757385902
- https://zhuanlan.zhihu.com/p/466975045
新建项目 + vscode开发
- 新建 vite + vue3 项目
- 使用 vscode 开发
- 删除不需要的任务(我们只开发 mp-wechat)
新建 vite + vue3 项目,为什么不用 ts,因为我对
uniapp
没有信心
# uniapp3<有坑,放心>
npx degit dcloudio/uni-preset-vue#vite uniapp-notes
# 有文件,可以覆盖现有文件
npx degit dcloudio/uni-preset-vue#vite . --force
# uniapp2
vue create -p dcloudio/uni-preset-vue .
清理一些用不到的包,最终的 package.json 如下
{
"name": "uni-preset-vue",
"version": "0.0.0",
"scripts": {
"dev:mp-weixin": "uni -p mp-weixin",
"build:mp-weixin": "uni build -p mp-weixin"
},
"dependencies": {
"@dcloudio/uni-components": "3.0.0-3071120230427001",
"@dcloudio/uni-mp-weixin": "3.0.0-3071120230427001",
"vue": "^3.2.45",
"vue-i18n": "^9.1.9"
},
"devDependencies": {
"@dcloudio/types": "^3.3.2",
"@dcloudio/uni-automator": "3.0.0-3071120230427001",
"@dcloudio/uni-cli-shared": "3.0.0-3071120230427001",
"@dcloudio/uni-stacktracey": "3.0.0-3071120230427001",
"@dcloudio/vite-plugin-uni": "3.0.0-3071120230427001",
"vite": "4.1.4"
}
}
sass支持
这个使用下来,基本没有什么坑,直接可以使用。
yarn add --dev sass
@ 路径支持
好像默认是支持的,所以,跳过。
export default defineConfig({
resolve: {
alias: {
"@": "/src",
},
},
plugins: [
uni(),
],
});
遇到的坑
问题 | 原因/解决方案 |
---|---|
无法使用 terminal |
解决: 在软件左侧目录树内 右键目录,选择 打开文件所在目录。 跳出访达后 重新点内置终端即可跳出正常命令行。 |
common_vendor.src_default is not a function |
参考: |
easycom 找不到组件 |
解决方案:
参考: https://ask.dcloud.net.cn/question/127894 https://blog.csdn.net/jiudenggushijingguo/article/details/115492830 |
soureMap 开启 |
参考 |
pinia只能使用固定版本 |
参考 |
process 不存在 |
|
vue2 vs vue3
- https://www.jianshu.com/p/87801d7b5858
- https://juejin.cn/post/7232164444985442364
- https://juejin.cn/post/7234702012012265531
- https://zh.uniapp.dcloud.io/tutorial/migration-to-vue3.html
发布 uniapp 插件
localStorage
# 方式一:
nx.$storage = new nx.WeappStorage('a7');
nx.defineProperty(nx, "$local", {
set: function (inObj) {
nx.$storage.sets(inObj);
},
get: function () {
return nx.$storage.gets();
},
});
# 方式二:
nx.$lcoal = new nx.WeappStorage('a7');
stores
在 uniapp3 中用到这此用法,备注一下。
const moduleFiles = import.meta.glob("./modules/*.js", { eager: true });
const stores = {};
for (const path in moduleFiles) {
const name = path.replace(/^\.\/modules\/(.*)\.\w+$/, "$1");
const useStoreFn = moduleFiles[path].default;
stores[name] = useStoreFn;
}
rpx 支持
- https://www.jianshu.com/p/710ad5d407c4
- https://github.com/Genuifx/postcss-pxtorpx-pro
- https://segmentfault.com/a/1190000041809605
vite.config.js 安装
postcss-pxtorpx-pro
并配置rpx
插件。内置 postcss.config.js 并不生效,需要写在 vite.config.js 里
import { defineConfig } from 'vite'
import uni from '@dcloudio/vite-plugin-uni'
import { resolve } from 'path'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [uni()],
css: {
postcss: {
plugins: [
require('postcss-pxtorpx-pro')({
// 转化的单位
unit: 'rpx',
// 单位精度
unitPrecision: 5,
// 不需要处理的css选择器
selectorBlackList: [],
// 不需要转化的css属性
propBlackList: [],
// 直接修改px,还是新加一条css规则
replace: true,
// 是否匹配媒介查询的px
mediaQuery: false,
// 需要转化的最小的pixel值,低于该值的px单位不做转化
minPixelValue: 2,
// 不处理的文件
exclude: /node_modules|components/gi,
// 转化函数
// 视口375px
transform: (x) => 2 * x
})
]
}
}
})
最新的教程
参考
- https://uniapp.dcloud.net.cn/api/request/request.html#request
- https://uniapp.dcloud.net.cn/quickstart-cli.html
- https://www.zhihu.com/question/444976489/answer/2699176139
- https://confluence.alo7.cn/pages/viewpage.action?pageId=21813085
- https://todoit.tech/blog/minapp-with-webpack.html#微信小程序官方对-npm-的支持程度
- https://juejin.cn/post/7126424305713283103