• home > webfront > AppDev > taro >

    taro自学笔记:从零开始搞多小程序开发

    Author:zhoulujun Date:

    taro-ui TypeError: Super expression must either be null or a function


    跨平台开发

    为了更好的实现跨平台开发,Taro 中提供了如下的解决方案

    内置环境变量 process.env.TARO_ENV

    用于判断当前编译类型,目前有 weapp / swan / alipay / h5 / rn / tt / qq / quickapp 八个取值,可以通过这个变量来书写对应一些不同环境下的代码,在编译时会将不属于当前编译类型的代码去掉,只保留当前编译类型下的代码,例如想在微信小程序和 H5 端分别引用不同资源

    if (process.env.TARO_ENV === 'weapp') {
      require('path/to/weapp/name')
    } else if (process.env.TARO_ENV === 'h5') {
      require('path/to/h5/name')
    }
    render () {
      return (
        <View>
          {process.env.TARO_ENV === 'weapp' && <ScrollViewWeapp />}
          {process.env.TARO_ENV === 'h5' && <ScrollViewH5 />}
        </View>
      )
    }


    app.js 中使用不同的 pages

    根据不同环境返回不同的 pages,可以这么写

    let pages = []
    if (process.env.TARO_ENV === 'weapp') {
      pages = [
        '/pages/index/index'
      ]
    }
    if (process.env.TARO_ENV === 'swan') {
      pages = [
        '/pages/indexswan/indexswan'
      ]
    }
    export default {
      pages
    }


    多端组件

    开发者可以通过将文件修改成 原文件名 + 端类型 的命名形式,不同端的文件代码对外保持统一接口,而引用的时候仍然是 import 原文件名的文件,Taro 在编译时,会跟根据需要编译平台类型,将加载的文件变更为带有对应端类型文件名的文件,从而达到不同的端加载对应文件的目的。

    假如有一个 Test 组件存在微信小程序、百度小程序和 H5 三个不同版本,那么就可以像如下组织代码

    • test.js 文件,这是 Test 组件默认的形式,编译到微信小程序、百度小程序和 H5 三端之外的端使用的版本

    • test.h5.js 文件,这是 Test 组件的 H5 版本

    • test.weapp.js 文件,这是 Test 组件的 微信小程序 版本

    • test.swan.js 文件,这是 Test 组件的 百度小程序 版本

    • test.qq.js 文件,这是 Test 组件的 QQ 小程序 版本

    • test.quickapp.js 文件,这是 Test 组件的 快应用 版本

    四个文件,对外暴露的是统一的接口,它们接受一致的参数,只是内部有针对各自平台的代码实现

    import Test from '../../components/test'
    <Test argA={1} argA={2} />


    多端脚本逻辑

    例如微信小程序上使用 Taro.setNavigationBarTitle 来设置页面标题,H5 使用 document.title,那么可以封装一个 setTitle 方法来抹平两个平台的差异。

    //set_title.h5.js
    export default function setTitle (title) {
      document.title = title
    }
    // set_title.weapp.js
    import Taro from '@tarojs/taro'
    export default function setTitle (title) {
      Taro.setNavigationBarTitle({
        title
      })
    }
    // 调用的时候,如下使用
    import setTitle from '../utils/set_title'
    setTitle('页面标题')


    多端同步调试

    ,可以在 dist 目录下创建一个与编译的目标平台名同名的目录,并将结果放在这个目录下,例如编译到微信小程序,最终结果是在 dist/weapp 目录下,这样做的好处是,各个平台使用独立的目录互不影响,从而达到多端同步调试的目的,在 config/index.js 配置如下:

    outputRoot: `dist/${process.env.TARO_ENV}`


    从旧版本迁移到 Taro Next

    Taro Next 大部分用法还是和旧版本一样的。更新到 Taro Next 首先需要更新项目依赖:

    # 更新 CLI
    $ npm i -g @tarojs/cli@next
    # 在项目目录更新项目依赖
    $ npm i @tarojs/runtime@next @tarojs/mini-runner@next @tarojs/components@next @tarojs/taro@next
    $ npm i react @tarojs/react@next # 如果使用 React
    $ npm i nervjs # 如果使用 Nerv
    # CLI 命令和以前一模一样
    $ taro build --type weapp --watch


    区别

    类组件 ——属于框架本身的 API 从框架自己的包中引入,其它的 API 仍然从 @tarojs/taro 引入。

    • 旧:import Taro, { Component } from '@tarojs/taro'

    • 新:import React, { Component }  from 'react' // Component 是来自于 React 的 API


    问题

    taro-ui报错

    1、taro-ui TypeError: Super expression must either be null or a function

    "@tarojs/taro": "3.3.9",就会报这个错误

    npm i —save taro-ui,会安装2.3.0,就报这个错

    使用

    npm i —save taro-ui@next,安装 "taro-ui": "^3.0.0-alpha.10",就不报错了

    而且使用2.3.0,按需引入scss,也报错

    具体如下:https://github.com/NervJS/taro-ui/issues/1185#issuecomment-937624436


    eslint报错

    Error: Failed to load plugin '@typescript-eslint/eslint-plugin' declared in '--config » eslint-config-taro/react#overrides[0]': Cannot find module '@typescript-eslint/eslint-plugin' Require stack:

    搜索了一下,网上都说,安装这个两个包:

     "@typescript-eslint/eslint-plugin": "^5.0.0",

    "@typescript-eslint/parser": "^5.0.0",

    实际并没有卵用

    解决问题是:降级eslint,从eslint6.8.0,降级到6.1.0

    https://github.com/webpack-contrib/eslint-loader/issues/287#issuecomment-547864352


    微信小程序中使view占满整个屏幕高度的实现方法

    微信小程序中使view占满整个屏幕高度的实现方法 https://blog.csdn.net/houruoyu3/article/details/108363254


    @tarojs/taro": "3.3.9对echarts 周边生态不兼容

    就是taro-echarts不兼容最新版本的。各种头疼

    "techarts": "^3.0.3" 对于demo的版本是

    "@tarojs/cli": "3.0.7",
    "@tarojs/components": "3.0.7",
    "@tarojs/react": "3.0.7",
    "@tarojs/runtime": "3.0.7",
    "@tarojs/taro": "3.0.7",

    现在最新的版本是

    "@babel/runtime": "^7.7.7",
    "@tarojs/components": "3.3.9",
    "@tarojs/react": "3.3.9",
    "@tarojs/runtime": "3.3.9",
    "@tarojs/taro": "3.3.9",

    最的新版本,techarts 图表不展示

    换成 echarts-for-taro3 还是报错


    taro3.0.7与3.3.9最新版的坑爹之处

    在3.0.7 ,如要想运行h5成功,则需要在组件中导入React (react实际没有用,而eslint报错)

    import React, { Component } from "react";

    在最新版本的3.3.9,则不需要

    import { Component } from "react";




    转载本站文章《taro自学笔记:从零开始搞多小程序开发》,
    请注明出处:https://www.zhoulujun.cn/html/webfront/AppDev/taro/8686.html