zoukankan      html  css  js  c++  java
  • 为 Taro 的小程序 TS 模板加点料

    为 Taro 的小程序 TS 模板加点料

    Taro 初始化后提供的项目骨架比较简单,需要进行一些二次加工~

    项目地址:https://github.com/WozHuang/try/tree/master/taro/ts-template

    运行环境

    这里选择的是 Sass + Mobx + Typescript 的模板

    添加 alias

    参考 Taro 编译详情配置

    1. config/index.js 中添加 alias 的配置
      alias: {
        '@': path.resolve(__dirname, '..', 'src'),
      }
    
    1. tsconfig.json 添加 paths 规则
      "paths": {
        "@/*": ["src/*"]
      }
    

    配置 eslint 校验

    1. 添加 .eslintignore 文件忽略部分无关的内容
    config/*
    dist/*
    
    1. 配置 eslint 规则

    这里直接选用 alloyTeam 推荐的规则,安装 eslint-config-alloy

    npm install --save-dev eslint-config-alloy
    

    PS:如果提示找不到规则就需要升级所有 eslint 的相关依赖,相关 issue

    npm install --save-dev eslint@latest typescript@latest @typescript-eslint/parser@latest @typescript-eslint/eslint-plugin@latest eslint-plugin-react@latest eslint-config-alloy@latest
    
    1. 修改 eslintrc 文件

    添加 extends

      extends: [
          'alloy',
          'alloy/react',
          'alloy/typescript',
      ],
    
    1. 添加 .prettierrc.js 文件,直接复制 eslint-config-alloy 的内容

    2. (可选)修改配置文件成你喜欢的规则,并处理 taro 初始化提供的项目文件中的 eslint 错误

    3. 安装 prettier 并在 package.json 中添加脚本方便处理 eslint

    npm install -D prettier
    
        "fix": "eslint --fix src/ --ext .tsx --ext .ts",
        "prettier": "prettier --write src/**/*.{ts,tsx}"
    

    mobx 数据持久化

    1. taro 提供的 mobx 模板是没有使用装饰器的,需要修改成装饰器的形式方便使用

    2. 安装 mobx-persist

    npm install mobx-persist
    
    1. 添加符合 mobx-persist 要求的 storage
    const storage = {
      getItem(key) {
        return Taro.getStorage({ key }).then((res) => res.data);
      },
      setItem(key, data) {
        return Taro.setStorage({ key, data });
      },
    };
    
    1. 在 store 初始化完成后使用 mobx-persist 提供的 hydrate 持久化
    import { create } from 'mobx-persist';
    const hydrate = create({
      storage,
      debounce: 20,
      jsonify: false,
    });
    hydrate('persistKey', store);
    
    1. 在需要持久化的成员变量上加上 @persist 装饰器但是不知道为什么 string 和 number 类型会有问题,另外三种类型(object, list, map)都可以正常使用,估计是 @tarojs/mobx 这个库的某些实现和 mobx-react 不一样导致的问题
    export default class Store {
      @observable
      @persist('object')
      data = {
        counter: 0,
      };
    }
    

    封装缓存、网络请求功能

    src/utils 目录

    sessionStorage

    • 支持设置过期时间

    request

    • 支持前端缓存和设置缓存过期时间
    • 可控制是否自动对错误响应做提示,默认自动提示

    添加枚举类型

    src/consts

    • 支持基本的 label、value 对应的枚举
    • 支持扩展枚举成员变量和方法

    TODO

    • husky + lint-stage + prettier 做提交前预处理
    • 优化 API 和 Store 的加载方式,使用 require.ensure 做自动加载,并额外生成 types 目录
  • 相关阅读:
    JS 做的鼠标放大镜(初级)
    用JS做关灯游戏(初级)
    JS 做时钟
    Magic Powder
    (记忆化搜索)Jury Compromise (poj 1015)
    (求凹包) Bicycle Race (CF 659D) 简单题
    Phalanx (hdu 2859)
    第十四个目标 (fzu)
    (树形dp)鸡毛信问题 (fzu 1227)
    (最大m子段和) Max Sum Plus Plus (Hdu 1024)
  • 原文地址:https://www.cnblogs.com/wozho/p/12589611.html
Copyright © 2011-2022 走看看