侧边栏壁纸
  • 累计撰写 6 篇文章
  • 累计创建 4 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

hola学习

Administrator
2022-12-03 / 0 评论 / 0 点赞 / 2083 阅读 / 0 字

Hola学习总结


1.Hola是什么?

Hola 是一个开放式跨端跨框架解决方案,支持使用 Vue 框架来开发 微信小程序 / H5 / GMU 小程序 / 支付宝小程序 / GMU App 等应用。

对于使用者来说,可以一套代码适配多端(Web、快应用、微信小程序等)。


2. 快速上手

#1.安装cli
npm install -g lighting
#2.安装hola插件
light plugin -a hola
#3.查看插件列表
light plugin -l
#4.创建一个项目
light create -t hola -n myApp
#5.执行编译
npm script
npm run dev:weapp
npm run build:weapp
#or
light release --type weapp --watch

执行编译微信小程序后,并用微信开发者工具打开后,如下图所示。

image-20220919100008193

这里需要注意的是,通过hola创建的默认文件project.config.json只能用于微信小程序。其基本配置如下:

image-20220919100906093


gmu小程序配置

image-20220919101220470


3.页面配置


可以通过多种形式对小程序页面进行配置。如下:

  1. 页面目录index.config.js

​ 对窗口的配置,会覆盖app.config.jswindow中相同的配置项。

image-20220919110044168


  1. 在页面目录index.vue中配置

​ 需要注意的是,使用 definePageConfig 定义的页面配置对象 不能使用变量 。如果在vue文件中进行了配置,就不用在index.config.js来进行配置了。

<template>
<view className='index'/>
</template>

<script>
definePageConfig({
navigationBarTitleText:'首页'
})

export default{}
</script>

4.设置配置同时编译和打开开发者工具


#设置同时打开微信和支付宝开发者工具
light config set <weapp.|alipay> <tool-path>
#编译指令命令
light release --type weapp --open

设置成功,如下图所示。

image-20220919133247327


执行编译成功如下图所示。

同时打开开发者


5.跨平台开发

  1. 内置环境变量

内置环境变量process.env.TARO_ENV,用于帮助用户做一些特殊情况处理

个人感觉,有点类似Node中的process.env(Node.js中的一个环境对象)。在编译阶段,会移除不属于当前编译类型的代码,只保留当前编译类型下的代码

主要作用如下:

  • 可以在不同端引用不同资源
  • 可以在不同端的页面加载所需的组件
  • 设置多端的不同路由规则

注意:不要解构环境变量。


  1. 统一接口的多端文件

开发者可以通过使用 统一接口的多端文件 ,来解决跨端差异。

假设多端对Test组件都存在差异, 代码定义形式如下:

├── test.js                Test 组件默认的形式,编译到微信小程序、支付宝小程序和 H5 之外的端使用的版本
├── test.weapp.js          Test 组件的微信小程序版本
├── test.alipay.js         Test 组件的支付宝小程序版本
├── test.gmump.js          Test 组件的gmu小程序版本
├── test.gmuapp.js         Test 组件的gmuapp版本
└── test.h5.js             Test 组件的 H5 版本

使用形式,对于使用者来说,正常引用Test即可。


6. GMU调试


#1.安装hola插件
yarn add @holajs/plugin-platform-gmump
#2.进入到gmuapp文件目录
cd ./dist/gmuapp
#3.添加debug命令
light release -wb --debug

debug命令完成后,自动打开浏览器,如下图。

image-20220919173720344

7.组件库


Hola 以 微信小程序组件库 为标准,结合 vue 语法规范,定制了一套自己的组件库规范。


7.1 视图容器

主要对viewscrollviewswiper三种视图容器进行了细致的学习。


视图
<template>
  <view class="page-body">
    <view class="page-section">
      <view class="page-section-title">
        <text>Vertical Scroll 纵向滚动</text>
      </view>
      <view class="page-section-spacing">
        <scroll-view
          :scroll-y="true"
          style="height: 300rpx"
          @scrolltoupper="upper"
          @scrolltolower="lower"
          @scroll="scroll"
          :scroll-into-view="toView"
          :scroll-top="scrollTop"
        >
          <view id="demo1" class="scroll-view-item demo-text-1">1</view>
          <view id="demo2" class="scroll-view-item demo-text-2">2</view>
          <view id="demo3" class="scroll-view-item demo-text-3">3</view>
        </scroll-view>
      </view>
    </view>

    <view class="components-page">
      <text>flex-direction: row 横向布局</text>
      <view class="flex-wrp flex-wrp-row" hover-class="hover">
        <view class="flex-item demo-text-1" :hover-stop-propagation="true" />
        <view
          class="flex-item demo-text-2"
          hover-start-time="1000"
          hover-class="hover"
        />
        <view
          class="flex-item demo-text-3"
          hover-stayTime="1000"
          hover-class="hover"
        />
      </view>
    </view>

    <view class="swiper">
      <swiper
        class="test-h"
        indicator-color="#999"
        indicator-active-color="#333"
        :vertical="true"
        :circular="true"
        :indicator-dots="true"
        :autoplay="true"
      >
        <block v-for="(item, index) in background" :key="item">
          <swiper-item>
            <view :class="background[index]">
              {{ index }}
            </view>
          </swiper-item>
        </block>
      </swiper>
    </view>
  </view>
</template>

<script>
// import { method } from "lodash";

const order = ["demo1", "demo2", "demo3"];
export default {
  name: "detail",
  data() {
    const background = ["demo-text-1", "demo-text-2", "demo-text-3"];
    return {
      background,
      scrollTop: 0,
      toView: "demo2",
    };
  },
  methods: {
    upper(e) {
      console.log("upper", e);
    },
    lower(e) {
      console.log("lower", e);
    },
    scroll(e) {
      console.log("scroll", e);
    },
  },
};
</script>

<style>
.flex-wrp {
  display: flex;
}
.flex-wrp-column {
  flex-direction: column;
}
.flex-wrp-row {
  flex-direction: row;
  padding: 20px;
  background: #f1f1f1;
}
.flex-item {
  width: 180px;
  height: 90px;
}
.demo-text-1 {
  background: #ccc;
}
.demo-text-2 {
  background: #999;
}
.demo-text-3 {
  background: #666;
}
.hover {
  background: #000;
}

.scroll-view-item {
  height: 300rpx;
}
</style>

7.2 基础内容

主要对icontextprogress三种基础内容进行了学习。


基础内容
7.3 表单组件

主要对textareabuttonformcheckboxpicker进行了细致学习。


form-comp

其中,form可以使用内置的behaviors,支持以下三种内置

  • wx://form-field

    使自定义组件有类似于表单控件的行为。 form 组件可以识别这些自定义组件,并在 submit 事件中返回组件的字段名及其对应字段值。这将为它添加以下namevalue两个属性。

  • wx://form-field-group

  • wx://form-field-button


微信小程序中的behaviors类似Vue中的mixins。每个 behavior 可以包含一组属性、数据、生命周期函数和方法。组件引用它时,它的属性数据方法会被合并到组件中。每个组件可以引用多个 behavior,behavior 也可以引用其它 behavior。

image-20220921135928438
//wxml
<form bindsubmit="formSubmit">
  <text>表单</text>
  <custom-form-field name="custom-name"></custom-form-field>
  <button form-type="submit">提交</button>
</form>

image-20220921144221713


8.媒体组件


因现在很多在线媒体受到限制(比如很多音乐网站禁止使用外链),所以仅对imagevideo进行着重学习。


media

9.多端处理的历史发展

Taro为例,重点对编译时和运行时进行学习。


当一门语言的能力不足,而用户的运行环境又不支持其它选择的时候,这门语言就会沦为 “编译目标” 语言

引用自 https://mp.weixin.qq.com/s?__biz=MzU3NDkzMTI3MA==&mid=2247483770&idx=1&sn=ba2cdea5256e1c4e7bb513aa4c837834


早版本的Taro的思想是“重编译时,轻运行时”,并且和React强绑定。其中,编译时是通过Babel完成。简要过程如下:

image-20220921172153488


后面,Taro团队在考虑提升“运行时”的作用,创建了taro-runtime包,从而达到了实现框架更大的灵活性和更好的适配性的目的。具体来说,该团队在包中实现了一套高效、精简版的DOM/BOM API,通过 Webpack 的 ProvidePlugin 插件,注入到小程序的逻辑层,如下图所示。

image-20220921171356554

现在版本的Taro的本质可以看作是将React/Vue运行在小程序上。


学会的一些小技巧

在很多命令行语句中,如果不明白命令的作用,可以-h一下,即可查看帮助,类似linux shell命令,如:

image-20220920091401025
一些心得

个人感觉,多端框架很多工作其实是在做一些polyfill的事情,如抹平不同小程序的api差异,生命周期的“对齐”。在今后的工作过程中,应具备“与时俱进”的意识,提高对小程序领域发展的敏感性。在优先学习深入“技术栈”的前提,也要扩展一下“广度”,如一些工具链的使用、工程化思想。

0
博主关闭了所有页面的评论