在Taro3+Vue3+NutUI3开发的实践发现及坑点

这是个人的第一篇小程序文章,使用Taro3+Vue3+NutUI3🤠开发实践中发现及坑点,希望能帮助到大家。

Taro入门 环境准备及项目初始化

自己使用的开发工具和环境

  • Nodejs V16.18.1
  • VS Code
  • 微信开发者工具

安装及使用@taro/cli

安装

js 复制代码
npm install -g @tarojs/cl

安装成功后可以使用taro -v检查是否安装成功及版本

初始化taro项目

js 复制代码
taro init yourAppName

具体可以看Taro官网 \[\](安装及使用 | Taro 文档)

启动项目

可以调试启动的方式

下面是我自己启动taro的方式

js 复制代码
npm run dev:weapp

启动完毕后,自动生成dist目录

使用微信开发者工具导入dist目录

自己在初始化项目中遇到的坑

NutUI库坑

NutUI3(NutUI - 移动端 Vue2、Vue3、小程序 组件库 (jd.com))

自己在创建基于vue3创建taro项目的时候,选择gitee下载好默认模板后,我需要使用NutUI库,需要按需引入,全局样式一直搞不好,组件库不能正常使用,以及小程序一直启动不开

解决:

我就在taro官网上示例仓库:taro 3.5 以上版本 + vue3 taro3-nutui 下载来就是这样的目录,我使用的是NutUI3

自己在使用NutUI4,趟过Icon图表的坑

npm 安装依赖包的坑

我那时候刚刚玩taro的时候,去安装pinia或vuex,一直安装不上,说什么那那的配置不行,

解决

如果不能正常npm的话,可以使用 npm --force ***,继续强制安装

js 复制代码
npm i --force pinia

scoped 属性来限定样式作用域,组件样式全部隔离,出不来

chatGPT的解释:

分享自己的发现

对了,我在刷文章的时候发现了两个的实践

统一全局样式

js 复制代码
/* utils/_scheme.js */ 
$f1: 80px; // 阿拉伯数字信息,如:金额、时间等 
$f2: 40px; // 页面大标题,如:结果、控状态等信息单一页面 
$f3: 36px; // 大按钮字体 
$f4: 34px; // 首要层级信息,基准的,可以是连续的,如:列表标题、消息气泡 
$f5: 28px; // 次要描述信息,服务于首要信息并与之关联,如:列表摘要 
$f6: 26px; // 辅助信息,需弱化的内容,如:链接、小按钮 
$f7: 22px; // 说明文本,如:版权信息等不需要用户关注的信息 
$f8: 18px; // 十分小

$color-primary: #ff9800; // 品牌颜色
$color-secondary: lighten($color-primary, 10%);
$color-tertiary: lighten($color-primary, 20%);

$color-line: #ececec; // 分割线颜色
$color-bg: #ebebeb; // 背景色

$color-text-primary: #000000; // 主内容
$color-text-long: #353535; // 大段说明的主要内容
$color-text-secondary: #888888; // 次要内容
$color-text-placeholder: #b2b2b2; // 缺省值

$color-link-normal: #576b96; // 链接用色
$color-link-press: lighten($color-link-normal, 10%);
$color-link-disable: lighten($color-link-normal, 20%);

具体的可以按照自己项目中需求来配

对了,Taro 中的 px 其实指的就是 rpx;如果你想要真实的 px,可以大写 PX

API统一管理request.ts封装

js 复制代码
import Taro from '@tarojs/taro'
import Fly from 'flyio/dist/npm/wx'
import config from '../config'
import helper from './helper'

// 创建一个 Fly 实例
const request = new Fly()
request.config.baseURL = BASE_URL

// 创建一个用于锁定请求队列的 Fly 实例
const newRequest = new Fly()

// 请求拦截器
request.interceptors.request.use(async conf => {
  const { url, method } = conf
  const allowedPostUrls = [
    '/login',
    '/users',
    '/email',
  ]
  const isExcept = allowedPostUrls.some(v => url.includes(v))
  if (method !== 'GET' && !isExcept) {
    try {
      await helper.checkPermission() // 检查用户权限
    } catch (e) {
      throw e
    }
  }

  return conf
})

// 响应拦截器
request.interceptors.response.use(
  (response: any) => response,
  async (err: any) => {
    try {
      if (err.status === 0) { // 网络问题
        throw new Error(Taro.T._('Server not responding'))
      }

      const { status } = err.response
      if (status === 401 || status === 403) { // 用户没有权限,需要重新登录
        request.lock() // 锁定请求队列,避免重复请求
        const { errMsg, code } = await Taro.login() // 重新登录
        if (code) {
          const res = await newRequest.post('/login', { code }) // 使用新实例完成登录
          const { data } = res.data
          const { sessionId, userInfo } = data
          Taro.setStorageSync('sessionId', sessionId) // 储存新 session
          if (userInfo) {
            Taro.setStorageSync('userInfo', userInfo) // 更新用户信息
          }
          request.unlock() // 解锁请求队列
          err.request.headers['Session-Id'] = sessionId // 在请求头加上新 session
          return await request.request(err.request) // 重新完成请求
        } else {
          request.unlock()
          throw new Error(Taro.T._('Unable to get login status'), errMsg)
        }
      }
    } catch (e) {
      Taro.showToast({ title: e.message, icon: 'none' })
      throw e
    }
  },
)

export default request;

总结

今天的发现就到这里了,后续在使用taro中还有什么坑点和实践发现,还会发现哦

相关推荐
里欧跑得慢17 分钟前
Flutter 像素级还原:设计稿到代码的视觉无损转换技巧
前端·css·flutter·web
里欧跑得慢32 分钟前
Flutter 三方库 function_tree — 鸿蒙应用开发中的动态数学公式解析与计算神器,实现鸿蒙深度适配下的复杂函数逻辑运行时求值实战(适配鸿蒙 HarmonyOS Next ohos)
android·前端·安全·flutter·华为·harmonyos
苏灿烤鱼1 小时前
没有机密文件,也没有付费数据,在浏览器里造一颗"间谍卫星"
前端·javascript·github
泯泷1 小时前
手搓JSVM第 5 篇:写第一个编译器:从 AST 生成 IR
前端·javascript·算法
泯泷2 小时前
手搓JSVM第 7 篇:控制流:if、while 与 jump
前端·javascript·算法
泯泷2 小时前
手搓JSVM第 6 篇:把 IR 编成字节码:emit 与 label fixup
前端·javascript·算法
泯泷2 小时前
手搓JSVM第 3 篇:从栈式 VM 到寄存器式 VM:为什么我们选择寄存器
前端·javascript·算法
泯泷2 小时前
第 4 篇:让 VM 支持变量:Slot、Environment 与 TDZ
前端·javascript·算法
粥里有勺糖4 小时前
视野修炼-技术周刊第131期 | Bun 与 pnpm Rust 化
前端·github·agent
Coodor4 小时前
如何在web浏览器使用js操作CPU卡
开发语言·前端·javascript·cpu卡