使用前,我希望你对虎牙小程序开发流程有所了解。
安装hyext脚手架
$ npm i @hyext/cli -g
然后初始化项目
$ hyext init <project-name>
开发者可以使用react开发小程序,虎牙小程序技术栈跨终端的实现方式:app端基于react-native,web端基于react-native-web, 开发者只需要开发维护一套代码,小程序就可以在app端和web端运行,但是要兼容两端的差异,所以会受到以下约束。
hycss会受到rn端的约束,这些属性css版本是可用的,但其之外的css是不能用的,另外建议开发者使用flex进行布局,rn端完美兼容flex,开发者无需关心适配屏幕的问题,builder已经帮你们处理这些问题,开发者只需关心设计稿(宽度为750px)的尺寸去写样式就ok啦。
builder已经抹平了web和app的SDK差异,直接访问global.hyExt即可。
app.js文件
import React, { Component } from 'react';
import { Text, View } from '@hyext/hy-ui';
import 'app.hycss'
export default class App extends Component {
render() {
return (
<View className={"hello_world_wrapper"}>
<Text className={"hello_world"}>Hello World!</Text>
</View>
)
}
}
app.hycss文件
.hello_world_wrapper {
width: 300px;
height: 300px;
}
.hello_world {
font-size: 60px;
}
/* 如果不想样式单位自适应 去掉px即可 */
.hello_world {
font-size: 60;
}
为了尽可能规避代码层面上的各种问题,我们提供了一套lint配置, 可以帮助开发者减少bugs和消除开发中遇到的疑惑。
project.config.json文件下
{
"builder": {
"config": {
"enableLint": {
"eslint": true, // true, 开启js的语法检查
"stylelint": true// true, 开启css样式检查
},
}
}
eslint提供js层面上得语法检查,包含eslint最基本的语法检查和虎牙小程序提供的语法检查。
stylelint提供样式层面上得语法检查,包含hycss和js所用到的css样式的语法检查。
构建器(builder-beyond)会根据你的enableLint配置做如下操作:
第一步,产出对应lint平台的最基本的配置文件(假如之前没有任何的lint配置文件
),配置了eslint
,会生成.eslintrc
、.eslintignore
文件,配置了stylelint
,会生成.stylelintignore
、.stylelint
文件。
// .eslintrc内容
{
"parser": "babel-eslint",
"plugins": [
"hyext-builder-beyond"
],
"extends": [
"plugin:hyext-builder-beyond/all"
],
"env": {
"browser": true,
"es6": true
}
}
// .eslintignore内容
node_modules
// .stylelint内容
{
"extends": [
"stylelint-config-hyext"
],
"rules": {}
}
// .stylelintignore内容
node_modules
第二步,往package.json
中的scripts
注入对应lint的执行脚本(如果发现有同名的脚本命令,则不会被修改
),
这样lint的语法检查就可以摆脱构建器的束缚,单独执行,
如果你想构建器不需要语法检查,在配置中设对应项为false
即可。
// package.json
{
"scripts": {
"stylelint": "stylelint '**/*.hycss'",
"eslint": "eslint --ext .js ."
},
}
// project.config.json 可停止构建时检查
{
"builder": {
"config": {
"enableLint": {
"eslint": false,
"stylelint": false
},
}
}
第三步,安装lint相关的依赖包。
如果你觉得构建器提供的基础配置无法满足你的需求,你可以添加额外的lint插件;
如果你不想用基础配置中的某一条rule, 可以在相应的配置文件中禁用该规则;
以上配置可查看eslint、stylelint的官方文档指导。
eslint和stylelint在主流的IDE(Vscode, WebStorm等)中都有相应的插件可供开发者使用(十分好用)。
请先装react-developer-tools, 以下是调试方法,我们用图片解释。
Name | Type | Required | Default | Description |
---|---|---|---|---|
webSDKVersion | string | false | '1.4.0' | web端SDK版本号 |
webTitle | string | false | '虎牙小程序' | PC主播端小程序标题 |
designWidth | number | false | 750 | 设计稿宽度,默认750px(不建议修改) |
buildConfig | object | false | 在Entry List中介绍 | 构建配置,告诉平台,你的小程序可运行在哪个端 |
useCssLoader | boolean | true | false | 使用hycss |
https | boolean | false | true | 本地开发是否开启https |
host | boolean | false | 'localhost' | 本地开发的域名 |
compileNodeModules | array | false | undefined | 需要web构建器编译的npm包名队列, 例如:['react-native-smart-tip'] |
enableLint | object | false | void | 开启eslint语法检测,前面Lint部分有说 |
enableVW | boolean | false | false | 开启样式转换,px转vw |
Name | ExtType | Platform | Entry | Runtime |
---|---|---|---|---|
web观众端 | web_video_com | web | index.js | H5 |
pc主播端 | pc_anchor_panel | pc | index_streamer.js | H5 |
Name | ExtType | Platform | Entry | Runtime |
---|---|---|---|---|
app观众端 | app_panel | app | index.js | React Native |
主播端-助手app | zs_anchor_panel | app | index_streamer.js | React Native |
// builder内置的entry
const DEFAULT_BUILD_CONFIG = {
H5: [
// web观众端
{
entry: 'index.js',
extType: 'web_video_com',
platform: 'web'
},
],
RN: [
// app观众端
{
entry: 'index.js',
extType: 'app_panel',
platform: 'app'
}
]
}
// 想构建那个端的小程序都可以通过自定义entrys去实现,例如以下例子
{
"builder": {
"config": {
"webSDKVersion": "1.1.0",
"webTitle": "example",
"useCssLoader": true,
"buildConfig":{
"H5": [
{
"entry": "index.js",
"extType": "web_video_com",
"platform": "web"
}
],
"RN": [
{
"entry": "index.js",
"extType": "app_panel",
"platform": "app"
},
// 新增一个主播助手App端入口
{
"entry": "index_streamer.js",
"extType": "zs_anchor_panel",
"platform": "app"
}
]
}
},
"name": "@hyext/builder-beyond"
}
}
直接通过global对象访问
Name | Type | Description |
---|---|---|
global.__device | object | 设备信息 { width: number(屏幕宽度), height: number(屏幕高度) } |
global.__os | string | 操作系统名称,共三种类型:'web'、'ios'、'android' |
// app.js
render() {
return (
<View className="container">
<ScrollView className="scroller">
你的页面
</ScrollView>
</View>
)
}
/*
* app.hycss
*/
.container {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
.scroller {
flex: 1;
}