简介

Mor (发音为 /mɔːr/,类似 more) 是饿了么开发的一款基于小程序 DSL 的,可扩展的多端研发框架。

使用 MorJS,我们只需书写一套(微信或支付宝)小程序,就可以通过 MorJS 的转端编译能力,将源码分别编译出可以发布在不同端(微信/支付宝/百度/字节/钉钉/快手/QQ/淘宝/H5)的产物。MorJS 还支持小程序、小程序插件、小程序分包之间的形态转换,同时也配备了从源码到构建产物全阶段的插件体系,满足各类功能扩展,提升开发体验和开发效率。

示例

以下是饿了么-美食外卖频道在微信、支付宝、抖音小程序及 H5 中的表现:

为什么要做 MorJS?

目前各大平台都相继推出了自己的小程序,饿了么 C 端业务需要在不同平台小程序进行投放,这些项目大多是以支付宝或微信原生 DSL 编写,面对业务渠道的不断增加,我们尝试了多种方法来兼容多端适配,但由于不同平台间小程序代码写法、能力支持的差异性逐步变大,过去的方案无法满足新业务的需求,我们需要一套跨端研发框架能解决以下诉求:

原生 DSL 支持,方便现有小程序 DSL 编写的存量业务使用;

降低性能开销,尽可能轻运行时,减少编译构建的时长;

便捷的使用,一键转换为支持各小程序平台使用的产物;

拓展的功能,提供针对大型复杂小程序的解耦方案;

灵活的配置,能够简单的增加修改多套不同端的项目配置;

产物优化能力,压缩构建产物体积,减少小程序包大小;

在明确这几点后,我们调研了业界所有主流技术框架,发现并没有能完全满足我们需求的方案,所以我们决定自研 MorJS。

如何使用?

MorJS 是基于小程序原生 DSL 进行扩展的,只要你掌握微信或支付宝任意一种小程序,那你就几乎掌握了 MorJS。

MorJS 提供了官方脚手架工具用于创建新项目,同时也支持已有小程序引入相关依赖接入 MorJS。

开始一个新项目

MorJS 项目示例:https://github.com/eleme/morjs/tree/main/examples

创建项目,选定项目目录,在目录终端执行以下任一命令:

$ npm init mor # npm 创建项目
$ yarn create mor # yarn 创建项目
$ pnpm create mor # pnpm 创建项目

选择对应的工程类型,按照提示完成初始化操作

 请选择工程类型 › 小程序
 请选择源码类型 › 微信小程序 DSL
 是否使用 Typescript … 否 / 是
 请选择 CSS 预处理器 › less
 请输入 小程序 的名称 … myapp
 请输入 小程序 的描述 … my first app
 用户名 … yourUserName
 邮箱 … your@gmail.com
 请输入 Git 仓库地址 … https://github.com/yourUserName/myapp
 请选择 npm 客户端 › npm / pnpm / yarn
…

执行编译命令启动项目:

$ npm run dev

多端产物已构建在_ dist_ 目录下,分别用对应平台的 IDE 打开即可开发预览

已有小程序项目接入

在已有项目中添加必要的依赖:

$ npm i @morjs/cli -D && npm i @morjs/core --save

在项目根目录下增加配置文件_ mor.config.ts_

import { defineConfig } from '@morjs/cli'

export default defineConfig([
  // 第一套配置: 微信 DSL 编译
  {
    name: 'wx',
    sourceType: 'wechat', // 源码类型: 微信 DSL
    target: 'wechat', // 编译目标: 微信
    compileMode: 'bundle', // 编译模式: 打包模式
  },
  // 第二套配置: 微信转支付宝
  {
    name: 'ali',
    sourceType: 'wechat', // 源码类型: 微信 DSL
    target: 'alipay', // 编译目标: 支付宝
    compileMode: 'bundle', // 编译模式: 打包模式
  },
  // 第三套配置: 微信转 Web
  {
    name: 'web',
    sourceType: 'wechat', // 源码类型: 微信 DSL
    target: 'web', // 编译目标: Web
    compileMode: 'bundle', // 编译模式: 打包模式
  }
])

在_ package.json_ 中配置脚本:

{
  "scripts": {
+   "dev": "mor compile -w",
+   "build": "mor compile --production"
  }
}

在项目目录终端下执行编译命令启动项目:

$ npm run dev

多端产物已构建在_ dist _目录下,分别用对应平台的 IDE 打开即可开发预览。

MorJS 核心能力

多端编译:提供一码多端转换能力

从诞生之初,MorJS 的一个核心能力就是实现小程序一码多端的转换,让一套代码经过编译后对应的各端产物,分别在多个小程序平台上运行,让开发成本,招聘、管理、测试各方面成本都大幅下降。截止到目前,我们已经支持多数小程序平台的转换。

ee874722-df9c-11ed-bfe3-dac502259ad0.png

集成研发:提供复杂小程序解耦开发能力

随着业务需求的不断增加,很多小程序项目不可避免的会出现体积巨大化的问题。虽然小程序官方提供了小程序分包、小程序插件的解决方案,但基于同一个小程序代码库,众多分包、插件的迭代情况复杂,实际业务难以解耦。如果你的项目遇到类似的问题,可以使用 MorJS 提供的集成研发能力,把各个分包、插件、模块分成一个个独立的项目,并通过集成研发将小程序宿主和这些子模块通过拉包、编译、构建、合并等一系列处理,合并为一个完整小程序进行开发、调试和部署。

ee965c76-df9c-11ed-bfe3-dac502259ad0.png

形态互转:提供小程序多形态转换能力

如果你的项目没有类似诉求可以跳过本段内容)随着投放场景的增加,不同业务在不同小程序端的形态可能并不相同。例如一个在支付宝端的小程序应用,在某些场景下希望他以分包的形式接入到微信小程序中。于是让项目在独立小程序、小程序插件、小程序分包应用形态间互相转换成为一个难题。

MorJS 提供的形态一体化能力,可以在尽量减少业务代码修改的前提下,提供同一个项目在以不同端(微信、支付宝、淘宝、抖音等)不同形态(小程序、小程序插件、小程序分包)间的转换能力。eea8a098-df9c-11ed-bfe3-dac502259ad0.png

H5 同构:提供小程序 DSL 转 H5 能力

除了多端多形态的小程序外,不少开发者还面临着 H5 场景的投放。对此, MorJS 提供将小程序项目转换为 Web 项目的能力。这一能力的核心是将小程序转换成一个基于 **React **的项目产物。无论是整个工程项目的转码、或是单个组件的编译,MorJS 都能够支持。

eeb8c824-df9c-11ed-bfe3-dac502259ad0.png

其他

除此上述核心能力外,MorJS 围绕小程序实现了一系列研发生态能力的建设,包括但不限于以下:

条件编译:提供对于多端或不同环境构建产出不同代码的能力,更加灵活的解决不同场景的适配问题;

产物压缩:提供了不同类型文件的最小化兼容压缩方式,并保留配置选项对高级压缩方案的扩展支持;

Mock 能力:提供小程序本地 JSAPI mock 能力,解决开发阶段无法联调接口请求数据的痛点;

优势与现状

MorJS 的优势

如你所见,MorJS 是一套基于小程序 DSL (支付宝或微信) 的框架。他的易用性、标准化和灵活性,使得开发者能更好地专注于业务,降低研发、调试成本,提高开发者的工作效率。

eec79642-df9c-11ed-bfe3-dac502259ad0.png

使用现状

截止目前,MorJS 支持 4 种编译形态(小程序、小程序插件、小程序分包、H5),支撑了饿了么 C 端大多数业务在各个渠道上的研发和投放。通过 MorJS 的开源,我们期望能把其中的技术细节、架构设计和技术思考呈现给大家,为有类似多端同构需求的企业和开发者服务。

结语

MorJS 为饿了么解决了大量业务在多端研发上的差异问题,让小程序开发的重心回到产品业务本身,减少使用者对多端差异兼容的投入,在通过开源让大家更好地了解和使用这项技术的同时,我们也希望能够借此吸引到更多志趣相投的小伙伴参与共建,一起加速小程序一码多端能力的发展。欢迎广大小程序开发者们与我们交流。

编辑:黄飞


在移动互联网飞速发展的今天,如何高效地适配各种设备和屏幕尺寸已成为开发者的共同关切。这些多端开发框架,或许就是你需要的得力助手!

今天为大家带来的是一份特别的推荐清单——四个值得一试的多端开发框架!在移动互联网飞速发展的今天,如何高效地适配各种设备和屏幕尺寸已成为开发者的共同关切。这些多端开发框架,或许就是你需要的得力助手!

1. Flutter

官网地址:https://flutter.dev/

Flutter是Google推出的开源移动UI框架,支持iOS和Android平台的原生开发。凭借Dart语言的强大性能和丰富的组件库,Flutter能帮助你轻松实现各种复杂的界面效果。它的热重载功能也是一大亮点,可以实时预览代码修改效果,大大提高开发效率。

代码片段:

复制

import 'package:flutter/material.dart';  void main() => runApp(MyApp());  class MyApp extends StatelessWidget {  
  @override  
  Widget build(BuildContext context) {  
    return MaterialApp(  
      title: 'Flutter Demo',  
      theme: ThemeData(  
        primarySwatch: Colors.blue,  
      ),  
      home: MyHomePage(),  
    );  
  }  }  class MyHomePage extends StatefulWidget {  
  @override  
  _MyHomePageState createState() => _MyHomePageState();  }  class _MyHomePageState extends State<MyHomePage> {  
  int _counter = 0;  

  void _incrementCounter() {  
    setState(() {  
      _counter++;  
    });  
  }  

  @override  
  Widget build(BuildContext context) {  
    return Scaffold(  
      appBar: AppBar(  
        title: Text('Flutter Demo Home Page'),  
      ),  
      body: Center(  
        child: Column(  
          mainAxisAlignment: MainAxisAlignment.center,  
          children: <Widget>[  
            Text(  
              'You have pushed the button this many times:',  
            ),  
            Text(  
              '$_counter',  
              style: Theme.of(context).textTheme.headline4,  
            ),  
          ],  
        ),  
      ),  
      floatingActionButton: FloatingActionButton(  
        onPressed: _incrementCounter,  
        tooltip: 'Increment',  
        child: Icon(Icons.add),  
      ),   
    );  
  }  }1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.


2. React Native

官网地址:https://reactnative.dev/

React Native是Facebook推出的基于JavaScript和React的开源移动开发框架。它允许开发者使用Web技术来构建原生应用,实现了跨平台的代码复用。React Native拥有丰富的社区资源和教程,可以帮助你快速上手。

代码片段:

复制

import React, { useState } from 'react';  import { View, Text, Button, StyleSheet } from 'react-native';  const App = () => {  
  const [count, setCount] = useState(0);  

  const incrementCount = () => {  
    setCount(count + 1);  
  };  

  return (  
    <View style={styles.container}>  
      <Text>You have pushed the button this many times: {count}</Text>  
      <Button title="Press me" onPress={incrementCount} />  
    </View>  
  );  };  const styles = StyleSheet.create({  
  container: {  
    flex: 1,  
    justifyContent: 'center',  
    paddingHorizontal: 10,  
  },  });  export default App;1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.


3. uni-app

官网地址:https://uniapp.dcloud.net.cn/

uni-app是一个使用Vue.js开发所有前端应用的框架。它允许开发者编写一套代码,然后发布到iOS、Android、Web(响应式)、以及各种小程序、快应用等多个平台。uni-app具有轻量级、易上手的特点,以及强大的跨平台性能,正逐渐成为多端开发领域的新星。

代码片段:

复制

<template>  
  <view class="content">  
    <text class="title">{{ title }}</text>  
    <button @click="incrementCount">Press me</button>  
  </view>  </template>  <script>  export default {  
  data() {  
    return {  
      count: 0,  
      title: 'uni-app Demo'  
    };  
  },  
  methods: {  
    incrementCount() {  
      this.count++;  
      uni.showToast({  
        title: 'You pressed the button!',  
        icon: 'success'  
      });  
    }  
  }  };  </script>  <style>  .content {  
  display: flex;  
  flex-direction: column;  
  align-items: center;  
  justify-content: center;  }  .title {  
  margin-bottom: 20px;  
  font-size: 24px;  }  </style>1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.


4. Taro

官网地址:https://taro-docs.jd.com/

Taro是一款多端统一开发框架,支持使用React进行Web、React Native、微信小程序、支付宝小程序等平台的开发。Taro具有完善的类型定义和文档支持,可以帮助你快速上手并高效开发。它还提供了丰富的插件和工具链,可以帮助你提升开发效率。

Taro支持使用React进行开发,下面是一个简单的Taro应用代码片段:

复制

import Taro, { Component } from '@tarojs/taro';  import { View, Text, Button } from '@tarojs/components';  import './index.scss';  class Index extends Component {  
  state = {  
    count: 0,  
  };  

  incrementCount = () => {  
    this.setState({ count: this.state.count + 1 });  
    Taro.showToast({ title: '你按下了按钮!', icon: 'success' });  
  };  

  render() {  
    return (  
      <View className='index'>  
        <Text>Taro Demo</Text>  
        <Text>你按下了按钮 {this.state.count} 次</Text>  
        <Button onClick={this.incrementCount}>按我</Button>  
      </View>  
    );  
  }  }  export default Index;1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.


总结对比:

  • Flutter凭借Dart语言的强大性能和丰富的组件库,适合构建高质量的原生界面;

  • React Native则允许使用Web技术构建原生应用,实现跨平台的代码复用。两者在性能上均表现出色,但Flutter的学习曲线可能较陡峭。

  • uni-app使用Vue.js开发,具有轻量级、易上手的特点;

  • Taro则支持使用Vue/React进行多平台开发。两者均适合快速构建多端应用,但uni-app的社区资源更为丰富。


目前市场上有多个专业做跨平台开发的框架,那么对开发者来说究竟哪一个框架更符合自己的需求呢?笔者特地总结对比了一下不同框架的特性。


国内外笔者选择了一共 5 个主流的测评对象,分别是 RN,Flutter,Ionic,NativeScript,以及用友 APICloud 团队开发的 AVM。


目前来看比较火的应该是 Flutter,次之 RN,具体还要看企业的应用场景和领域,AVM,Ionic,NativeScript 在不少企业和个人开发者中也使用率较高。


一,安装环境,开发工具对比。

任何框架的安装环境都代表了这个框架对新手是否友好。所以笔者特别从安装环境,开发工具上介绍各个不同框架的情况,来比较一下,新人上手的成本和门槛,笔者是 MacOS 用户,以下全文介绍的都是在 Mac 下的开发环境和开发工具。


1.1 React Native

RN 是 Facebook 于 2015 年 4 月开源的跨平台移动应用开发框架,到现在已经发展了 6 年多了,目前最新版本是 0.66,20211年12月10日还有更新发布小版本,整体来看框架还是非常有生命力的。官网:https://reactnative.dev/


我们来看安装环境和开发工具,从最新的官网可以看到,如果只是上手的话还是比较方便的,只需要本地安装 Nodejs 12 版本以上就可以了。然后借助官网推荐的 Expo 工具可以快速搭建起来本地的一个开发环境。因为笔者是 MacOS 用户,之前安装过 Xcode 所以整体安装起来还算是流畅。


首先是 Nodejs 的命令行工具安装:


yarn global add expo-cli

这里不说配置源什么的了,如果慢的话,可以切换国内 yarn 源,安装完毕后,直接使用


expo init AwesomeProject

安装项目,项目安装完毕后进入项目执行


yarn start

会重新安装一次 expo-cli,之后本地启动项目,打开 dev 的浏览器界面如下,最左边可以看到打开的是本地的 expo 得调试台,选择本地 LAN 网络,然后点击 Run on iOS simulator,启动了笔者本地的一个 iPhone 8 的设备,然后看到了现在的界面,最右边是本地生成的模板代码。




编辑工具笔者用的 vscode,官方也是推荐 vscode。使用脚手架的生成的目录和正常的 React 项目差不多,入口在 App.tsx 文件,支持修改后的 hotRload,整个流程走下来对前端开发来说门槛不高,至少到调试开发阶段,如果只单纯涉及到 UI 编写,配置完直接就可以开始干活了。


1.2 Flutter

Flutter 从出生(2018 年发布 v1.0)到现在也 3 年多了,是 Google 力推的跨端开发框架,和 RN 不同的是开发语言用的 Dart 而不是 JavaScript,官网在这里:https://flutter.dev/


最近几年发展的比较猛,各大公司都在主端业务引入,包括笔者所在的公司也有很多业务使用 Flutter 进行了 UI 部分的开发,下边笔者就简单介绍一下 Flutter 的开发环境和工具。


首先肯定是需要下载安装完整的 Xcode 和 Xcode developer tools 开发工具,默认大家都装了,之后不在赘述。


需要先下载 Flutter 的 SDK:https://docs.flutter.dev/development/tools/sdk/releases


解压缩 SDK 后设置对应的 SDK 环境变量地址:


cd ~/development

 

unzip ~/Downloads/flutter_macos_vX.X.X-stable.zip

 

export PATH="$PATH:`pwd`/flutter/bin"

如果过程中遇到问题可以使用 flutter doctor 来查看问题进行修复,有报错或者缺失环境,会有提示你如何修改,比较方便。


如果 flutter doctor 没有报错的话,那么 flutter 命令行就安装完成了,我们来看一下开发体验。


首先笔者都是用的 vscode 进行开发的,需要安装官方推荐的 vscode 插件,直接在插件市场搜索 Flutter 安装就可以了,之后就可以通过插件新建 Flutter 新项目了。


本地配置好对应的 iOS 模拟器,在 vscode 左边点击调试按钮选择对应的模拟器,就可以直接进行开发调试了。




截图是笔者做的一个小应用项目,目录结构也比较简单,在 lib 目录下的 main.dart 就是入口文件,唯一缺憾的就是 Flutter 对前端开发的语法不友好,Dart 虽然也不复杂,但是和 JavaScript 还是有比较多的出入的,需要一定时间的掌握和学习,而且对应的不少系统类库用法也不太一样。


整体来说比 RN 要配置的复杂一些,对前端开发来说,Dart 语法是一个挑战,编写应用除了 Dart 之外还需要理解 Flutter 自己的状态管理机制,widget 概念以及对应的 material 相关库的功能才能上手,对新人门槛还是比较高的。


1.3 Ionic

Drifty Co.在 2013 年推出了 Ionic,可以说是混合式开发(hybrid)的鼻祖了,他推出之前大家一般都是在 PhoneGap 下开发混合式开发应用,Ionic 一开始是和 Angular 高度集成的,现在已经支持了 React 和 Vue 集成,以及可以使用 Cordova 的库,生态整体来说还是不错的,优点是 Web 技术为主,缺点也很明显,Webview 的表现和性能与 RN,Flutter 那种编译后转 Native Code 的性能对比肯定要差一些,一些 Web 不支持的特性需要编写大量的原生插件来支持。


下边来看一下他的安装环境和开发工具部分体验,首先安装全局的 cli 命令行工具,Nodejs 版本 12.14 以上。


npm install -g @ionic/cli

 

ionic start myIonicApp blank --type vue

 

ionic serve █

看起来还是比较简单,但是需要安装的东西比较多,建议提前把 npm 设置成国内源,否则要等很久很久很久。


使用 serve 之后,其实本地就是起了一个 webpack-dev-server。




打开 8100 地址,其实就是一个正常的 web 项目,熟悉 vue 的同学一眼就能看出来了,IonicVue 是作为 Vue 的一个插件存在的。



那么看一下如何在模拟器上预览吧,首先需要安装下边两个工具,是前置依赖。


npm install -g ios-sim

 

brew install ios-deploy

然后在项目目录先 build 项目,然后我们直接使用 Ionic Cli:


npm run build

 

ionic capacitor run ios -l --external

选择一个本地的模拟器,之后就可以看到界面了,但是因为笔者本地的 Xcode 是 11 的老版本,会报编译错误,所以需要升级到最新的 Xcode12 以上版本,但是笔者的 Xcode 升不上去了,因为笔者的电脑系统不支持更高级别的 Xcode,所以后边改成用 android 调试。


笔者之前安装过 android studio,需要更新 SDK 到最新,然后在 tools 里找到 AVD 面板,创建一个模拟器。




启动后需要 adb devices 检查一下,如果设备在线,再进行下一步:


ionic capacitor add android

 

ionic capacitor run android

这一步第一次非常非常慢,应该是和 ios 一样,需要编译成 apk 再同步到模拟器上。




最后的效果就是这样,看到日志的最后几行就是 deploy 了一个 debug 的 apk 到模拟器了。


整体来说,Ionic 的安装步骤不算复杂,如果网络比较好,整个过程不到半小时,如果是最新版的 MacOS 系统,升级 Xcode 到最新版应该也比较流畅。看了一下官网,debug 方式就是利用 chrome 或者 safari 的网页调试工具调试,所以大家理解,这个 Ionic 套壳了 webview,调试方法和 webview 调试方法是一致的。


1.4 NativeScript

NativeScript 是由 Progress 公司开发的,已经专注于开发工具领域 30 多年的上市公司。整个 NativeScript 的能力和它的名字一样是专门为了 iOS 和 Android 而开发的,但是写法却是 JavaScript。和上面说的 Ionic 不一样是套壳 Webview,NativeScript 还是在 Js 和 Native 之间打通了一座桥梁,真正的使用 Native Code 进行页面的渲染,这也使的它的表现能力比 Ionic 要强,从官网上看他也支持不同的 Web 框架写法,比如 Vue,React,包括 TS 支持,当然用原生 JS 和 HTML 也可以编写,官网:https://nativescript.org/。


下边看一下他的安装环境和开发工具体验,依然是 MacOS 系统环境搭建。


同样是需要先安装 NativeScript 的 Cli 工具:


npm install -g nativescript

过程中会遇到从 codeload 下载依赖,可以设置代理或者修改 codeload 的 host 解决 ,笔者就遇到了,但这不是 nativescript 的问题 :)。


140.82.114.9 codeload.github.com

 

使用 ns 命令创建 NativeScript 项目:

 

ns create myNativescriptApp

选择创建一个 Vue 模板的空项目,命令行会交互式的引导你选择,用 Vscode 打开就可以编辑,目录结构和普通的 Vue 项目基本一样,入口在 app 目录下的 app.js,Vue 实例被 nativescript-vue 替代。




Run the project on multiple devices:

 

` `$ ns run ios

 

` `$ ns run android

 

Debug the project with Chrome DevTools:

 

` `$ ns debug ios

 

` `$ ns debug android

我们看一下在 android 下是什么样子的,iOS 也是因为本地 Xcode 版本太老跑不起来,第一次编译时间都比较久,需要耐心等待。




运行起来后和 Ioinc 类似,也是有个 debug 的 apk 被装到模拟器里了,测试了一下本地修改前端代码,webpack 本地会进行 watch 和 sync 到模拟器,实现热更新,速度还可以,但是需要频繁的冷起 app 才生效。


1.5 AVM

AVM 是由 APICloud 研发的一套跨端的 JavaScript 框架,全称(APICloud-View-Model),写法类 Vue 也兼容 React JSX,有双向绑定,组件化和状态管理支持,并配套了系统级别的 API,支持云端编译和发布到不同的平台,官网是:https://www.apicloud.com/AVMframe,有自己的开发 IDE 支持,我看今年 12 月份还有在更新 SDK (2021-12-3),其中 JS Framework 部分是全部开源的,包括 JS 组件库。


我们来看一下他的安装环境和开发工具,首先需要注册 APICloud 账号,因为他们继承了云端编译的功能,而且 ide 也是需要账号登陆同步代码。然后下载官网的APICloud Studio 3,如果是 Mac 系统一定要注意,不能直接在 download 目录打开,需要复制到应用程序文件夹内再用。


下载后打开,熟悉 vscode 的同学应该能发现,这是一个基于 vscode 二次开发的 IDE。




入口文件是 pages 目录下的 stml 代码文件,在上面右键实时预览可以在右边直接看效果,需要注意的是,这里只能预览标准 H5 的组件及页面效果,不能预览原生 API 的功能,所以推荐要真实开发的话,需要使用真机安装 AppLoader 进行调试,类似 RN 的 Expo。


AppLoader 的下载地址:https://docs.apicloud.com/Download/download#apploader


装上之后保持 Mac 和手机在同一网络下,用 AppLoader 扫描 IDE 中的二维码就可以实时看到真机效果了。




在真机上像网络,wifi 这些系统级别 API 就可以正常使用和预览了,报错也会有提示,开发体验很像小程序。


整体来说开发环境和开发工具是一体的,流程比较顺畅,全程也没有鼓捣任何命令行工具,但要根据官网文档的引导进行使用。


1.6 总结

经过对 5 个框架的初步讲解,大家可以看出来基本上大家的开发流程分成了两类,一类是直接把 debug 包装到手机上进行开发和调试,比如 Ioinc,NativeScript,还有 Flutter,另外一类则是需要通过一个额外的 AppLoader 进行辅助调试,比如 AVM,RN,当然后者也支持直接安装包到真机,但是 debug 的方式还是有所区别。


在开发工具上,基本上大家都可以使用 Vscode 进行开发,都支持 hotReload 功能,有些提供了自己的 IDE,集成化程度比较高,比如 AVM。


二,性能比较

下边笔者就从性能角度讲一下不同框架的对比情况,这个可能是大家最关注的了。笔者通过编写一个简单的超长的 viewlist 来进行横向比较,代码笔者放到这里了,https://github.com/xiaojue/ListViewDemo,后边大家可以去参考,实现一个 1000 行的图文列表,左图右文。


RN 效果:






Flutter 效果:






Ionic 效果:






NativeScript 效果,这里 NativeScript 开发体验最烂,后边会在 API 分析部分细说:






AVM 下的效果:






代码实现很简单,也没有做特殊优化,没有滚动加载,没有交互事件,直接 1000 条数据搞满,使用的都是官方 list 组件。


性能我们直接 adb shell 进入设备后,使用 top 命令来观察 app 进程情况:




其中帧数我们用 android 的开发者功能,GPU 截图来标识,编译速度直接用 time 命令统计, 均采用第一次 debug 启动耗时的时间。


比如:


time ns debug android


框架 内存 CPU 使用率 FPS debug 编译速度

RN(expo go) 300M 78%-116% 0m32.229s

Flutter 190M 37%-43% 0m21.336s

Ionic 138M 49%-65%

0m55.549s


NativeScript 147M 19%~20% 0m27.862s

AVM 122MB 6%-10% 0m0.094s

简单分析一下,首先是内存占用,基本都是 100MB 以上,RN 和 Flutter 最多,AVM 最少。然后是 CPU 占比,笔者一直下拉 list,看 CPU 占用率,其中 RN 是最高的,但是它的 fps 却很低,这说明 cpu 占用率越高说明计算越多,但是 fps 底说明没有卡顿,性能更好。


比如我们看 Ionic 的 cpu 占用只有 RN 的一半,但是 fps 却特别高,有很明显卡顿。所以我们可以说 RN 的性能比 webview 渲染的 Ionic 要好很多,包括 NativeScript 和 AVM 也是这个道理,cpu 占比越高,而 fps 越底,那么性能就越好,可是 cpu 占用高也有个问题就是会比较费电…


最后我们再看编译时间,这关系到调试体验,这里面 AVM 最快,基本是毫秒级同步到真机,其他基本都是秒级的,需要跑 build。当然 Expo 和 AVM 都是有前置 Loader 的,所以肯定比没有 loader 程序的快一些。AVM 笔者也不太清楚为什么这么快,这确实是让笔者很吃惊,但是有一点,AVM 在笔者的 android 模拟器上安装失败,所以笔者是用真机测评的,可能会有一些影响,真机的性能更高一些。


三,是否支持多端编译(含小程序)

这里的多端不仅仅指 android,ios,h5,更包含了是否支持国内的小程序编译。因为很多公司目前的业务场景都是需要在不同的 APP 里跑的,所以是否支持多端对我们国内用户来说很重要,笔者特意增加了这一对比项。另外目前 PC 端的编译各家也有支持,所以还另外增加了 windows,macOS 平台的对比。


框架 Android iOS H5 小程序 windows desktop

macOS


desktop


React Native √ √ √ alita,remax,Taro react-native-windows react-native-macOS

Flutter √ √ √ MPFlutter √ √

Ionic √ √ √ X √ √

NativeScript √ √ X X X X

AVM √ √ √ √ X X

整体调研的情况如上图,对勾的部分就是官网直接支持编译,叉号的意思就是官方不支持,也没有什么比较成熟的开源解决方案,而单独写了一些框架支持的比如 RN,Flutter 是有一些还算成熟的开源解决方案可以使用的。


整体来看,如果只开发 Android 和 iOS 应用,这五个框架都没什么问题,如果要支持小程序和桌面软件则要考虑更多,目前来看 RN 和 Flutter 生态是最完整的,次之是 Ionic,当然如果您是以微信小程序为主的开发者并不考虑 desktop 的情况下,那么 AVM 可能是更好的选择。


四,生态情况

4.1 开源生态,流行度


我们直接用 NPMCompare 来对比,因为 Flutter 和 AVM 没有在 NPM 上有对应的包,后边笔者单独再列。




下载量上比,RN 遥遥领先,Ionic 和 NativeScript 都不够看, RN 绝对第一,Ionic 比 NativeScript 好一点,从 issues 上来看,NativeScript 好一点,但是可能是因为用户太少导致的。Ionic 和 NativeScript 全加起来,还不如 RN 一个零头。


我们再看 Flutter 和 AVM,因为没有找到对应的包和下载量,我们摘取 statista.com 的数据来看一下 https://www.statista.com/statistics/869224/worldwide-software-developer-working-hours/。




可以看出到得出的数据和我们上边的结果类似,Ionic 和 NativeScript 的总份额 2021 年只有 16%+5%=21%,Flutter 第一 42%, RN 第二 38%。可以看到 Flutter 从 2019 年到 2021 年逐步在上升,最终在 2021 年反超 RN。






以上是几个主要框架的主仓库的对比情况,数据来自 https://www.githubcompare.com/ 从中可以看出来,从 stars 和 forks 上来说 Flutter 和 RN 基本就是老大和老二,从 open issues 上看 RN 比 Flutter 更优,时间上看大家都是 7,8 年前开始做的,更新情况也差不多。


再从搜索引擎热词上做一下分析。




从 Google Trends 的结果来看,国内 apicloud,ionic,nativescript 的热度差不多,react native 和 flutter 今年对比来看,国内更多的人开始转向 flutter。


4.2 API 支持,组件丰富程度


这部分从 API 层面对比五个框架对原生能力的支持情况和组件支持的情况。


前面笔者简单的开发了个 list 功能,我们下边对比下各个框架的基础组件个数(含布局组件)和 API 能力。


框架 组件个数 系统 API/Plugin 个数 开发体验

RN 34 33 React 无缝切入

Flutter 171 104 Dart 语法,有一定门槛和适应时间

Ionic 90 291 支持 React,Vue,Angularjs,JS,TS 开发

NativeScript 31 87 实时调试能力太弱

AVM 31 219 实时调试能力强,类 Vue 语法兼容 React JSX

来源参考:


RN 组件:https://reactnative.dev/docs/components-and-apis


RN API:https://reactnative.dev/docs/accessibilityinfo


Flutter 组件:https://docs.flutter.dev/reference/widgets


Flutter API:https://api.flutter-io.cn/


Ionic 组件:https://ionicframework.com/docs/components


Ionic API:https://ionicframework.com/docs/native


NativeScript 组件:https://docs.nativescript.org/ui-and-styling.html


NativeScript API:https://docs.nativescript.org/api-reference/index.html


AVM 组件:https://docs.apicloud.com/apicloud3/


AVM API:https://docs.apicloud.com/Client-API/api


数据上虽然差别比较大,比如 RN 的 API 和组件数虽然少一些,但是都是按模块划分的。比如某单个 API Class 下其实是有不少方法可以实现很多能力的。这里只列举了数量,只是提供了一个比较粗略的,对学习成本的一个初步直观的感觉,真的够不够用还是需要真实开发过复杂应用才有绝对话语权。


笔者觉得在开发体验上,Flutter 是独一档的。因为 Dart 和 TS,JS 都不太一样,整个 UI 开发概念和前端还是有一些理念冲突。其他使用 JavaScript 技术开发的框架,AVM,RN,Ionic 其实都还不错。但是 Ionic 支持使用各种不同 JS 库来开发,比如 React,Vue,NG 等,而 AVM 支持 Vue 、react 语法特性, RN 则必须是 React。NativeScript 虽然也支持不同的前端框架开发,但是整个开发体验则是最差的,他的实时编译,debug 功能以及布局系统真的很烂,笔者这里不推荐再入坑了,用户少真的是有原因的,比如笔者这个初学者,看完他们的布局文档就直接给劝退了。


而且纵观所有框架,文档写的最细致还是 RN 和 Flutter,AVM 这三家。但是 RN 和 Flutter 本土化程度不够, Ionic 和 NativeScript 则是国内资料比较少且文档比较糊弄,而且都很久不更新了。


五,总结

虽然前面笔者从不同的角度分析了各个框架的情况,比如上手,开发环境以及简单的性能对比,生态情况等。但是对于这些框架来说,其实还有很多研究的空间,这篇文章只是客观的记录了笔者对不同框架初次上手和调研情况的一个过程。所以难免有一些地方不够全面,但已基本反映出现状。


从性能上看 AVM 的开发体验和编译速度,性能表现都非常好,虽然是国产的框架但是不比国外的要差,其次是 Flutter,RN,最后是 Ionic 和 NativeScript。


从开发体验上来说,比较舒服的是 RN,Ionic 这两个,其次是 Flutter 和 AVM,Flutter 是因为 Dart 语法,但需要单独学习,中小企业选型以及个人开发者需要考虑;而 AVM 则不支持 TS 和其他语言框架,只支持 JS 语法。最差的是 NativeScript,基本上没法实时调试,API 也非常的不友好。


总结下来,笔者觉得 2021 年最火的当属 Flutter,已经赶超了 RN。整体上看国内外用户目前的选择和份额也大部分被 Flutter 和 RN 瓜分殆尽。其他框架中 AVM 和 Ionic 各有优势,但是从使用体验,上手难度,社区情况来看,国内的 AVM 肯定更适合国内开发者一些,毕竟有本土化,云端集成,而且 debug 体验也很惊艳。


所以大厂直接上 Flutter 是没有问题的,Dart 没有太大难度,这部分成本不是问题。而其他公司和个人开发者如果做国内市场选择 AVM,RN 还是比较合适的(相比较 NativeScript 和 Ionic,AVM 天然支持国内的小程序,是重要加分项,而 RN 的文档,生态则比较多),最后如果考虑 desktop 的适配,那么 Flutter 看起来就更合适一些了。


点击下方链接:https://www.apicloud.com/index?uzchannel=272



---------------------

作者:浪里行舟

来源:CSDN

原文:https://blog.csdn.net/howgod/article/details/122243817

版权声明:本文为作者原创文章,转载请附上博文链接!

内容解析By:CSDN,CNBLOG博客文章一键转载插件

————————————————


                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

                        

原文链接:https://blog.csdn.net/admans/article/details/139640821


前端的同学们对 CSS 肯定不会陌生,这部分内容控制着网页的外观。今天我们给大家整理了一些有趣的 CSS 组件,这些组件能增强网页的排版、让网页实现多种风格,甚至可以检查页面的 Bug !

1、赫蹏

项目官网:https://sivan.github.io/heti/

开源协议:MIT

赫蹏(hètí)是专为中文内容展示设计的排版样式增强,只需在页面的标签中引入 heti.css 文件,在要作用的容器元素上增加 class="heti" 的类名即可使用。

赫蹏基于通行的中文排版规范而来,预置古文、诗词样式,提供移动端支持,且兼容 normalize.css、CSS Reset 等常见样式重置;可以为网站的读者带来更好的文章阅读体验。

赫蹏效果展示:

项目地址:oschina.net/p/heti

2、Pixel Art to CSS

项目官网:https://www.pixelartcss.com/

开源协议:MIT

Pixel Art to CSS 是一个基于 React 的在线像素绘画编辑器,你可以用这个编辑器绘制像素版的图片或者 GIF 动图,绘制完毕后可以一键获取对应像素图的 CSS 代码,随后可通过复制的 CSS 代码将对应的像素图嵌入到网页中。

Pixel Art to CSS 页面展示:

项目地址:oschina.net/p/pixel-art

3、css-checker

项目官网:https://xiemala.com/s/gaSXqA

开源协议:MIT

css-checker 可用于检查 css 样式是否有重复,并在几秒钟内找到具有高度相似的 css classes 之间的差异,从而避免文件之间出现冗余或相似的 css 样式。

css-checker 还支持颜色检查、长脚本以及未使用的 CSS classes 的警告功能。 该工具同时适用于本地开发和 CI 等自动化流程。

css-checker 工作流程展示:

动图封面

项目地址:oschina.net/p/css-check

4、bttn.css

项目官网:https://bttn.surge.sh/

开源协议:MIT

bttn.css 是一个 CSS 按钮样式库,包含一系列精美的按钮样式。引入 bttn.css 文件后,在按钮元素中添加对应 css 类即可为按钮加入对应样式。

bttn.css 的按钮分四种尺寸:大、中、小、超小,同时有方形边框、椭圆边框、圆形边框、单线框等多种边框样式,能适应多种使用场景。

效果展示:

项目地址:oschina.net/p/bttn-css

5、Animate.css

项目官网:https://animate.style/

开源协议:MIT

Animate.css 是一个有趣的,跨浏览器的 css3 动画库,内置了很多典型的 css3 动画,让网页变得更加灵动。 安装 Animate.css 后,将 animate__animated 类与动画名称一起添加到元素,即可为元素附加对应的动画。

Animate.css 还可以与 Javascript 结合使用,制作一些更有趣的循环动画效果。

项目地址:oschina.net/p/animate-c

6、NES.css

项目官网:https://nostalgic-css.github.io/NES.css/

开源协议:MIT

NES.css 是一款 NES 红白机风格的 CSS 框架,可以使用它实现红白机风格的按钮,字体,对话框。NES.css 只含 CSS ,不依赖任何 JavaScript,对性能影响极小。另外,NES.css 只提供组件,页面布局需要自己定义。

需要注意的是:NES.css 的默认字体 Press Start 2P 只支持英文字符,如果需要把这个框架与非英语的语言一起使用,则需要使用其他字体,比如配合中文需要使用 Zpix (最像素) 字体。

效果展示

项目地址:oschina.net/p/nes-css

7、PSone.css

项目官网:https://micah5.github.io/PSone.css/

开源协议:MIT

Psone.css 是一个 PS1 游戏机风格的 CSS 框架,使用它可以实现复古 PS1 风格的网页元素。它的灵感来自前面的 Nes.css ,目前只能通过链接使用该 css 文件:

<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/98mprice/PSone.css@master/PSone.min.css">

样式展示:

项目地址:oschina.net/p/psone-css

8、98.css

项目官网:https://jdan.github.io/98.css/

开源协议:MIT

98.css 是一个用于模仿 Windows 98 界面的 CSS 库,满满的怀旧风... 98.css 不包含任何 JavaScript,仅使用一些 CSS 来设置 HTML 样式,这意味着它与前端框架不会有兼容问题,也不会出现性能问题。

该库依赖于语义 HTML 的用法,例如要编写按钮,需要使用 Button,输入元素需要标签,图标按钮依赖于 aria-label。

支持的组件包括:Button、Checkbox、OptionButton、GroupBox、TextBox、Dropdown、window(Title Bar、Window contents)与 TreeView。

项目地址:https://www.oschina.net/p/98-css

9、MVP.css

项目官网:https://jdan.github.io/98.css/

开源协议:MIT

MVP.css 包含 HTML 基本元素的开箱即用 CSS 样式,它没有类名,也没有任何需要学习的框架。也就是说用户甚至可以不懂 CSS ,只需在 HTML 中引用该 css 文件:

<link rel="stylesheet" href="https://unpkg.com/mvp.css">

即可为 HTML 元素附加简约而现代的样式:

样式展示:

项目地址:oschina.net/p/mvp-css

10、Charts.css

项目官网:https://chartscss.org/

开源协议:MIT

Charts.css 是一个将 HTML 元素样式转化为可视化图表的开源 CSS 框架,用简单的 CSS 类即可将数据转换为漂亮的图表和图形。

Charts.css 使用语义 HTML 标记进行结构化,并使用 CSS 类设置样式,通过类名的更改可将表单等元素显示为可视化图形。它支持使用媒体查询进行自适应缩放、支持多种图表类型、无 JS 代码带来的额外性能开销。

项目地址:oschina.net/p/charts-cs

11、Pure.css

项目官网:http://purecss.io/

开源协议:BSD

Pure 是一个小型响应式 CSS 框架,它包含一组响应式 CSS 模块,为原生 HTML 元素以及最常见的 UI 组件提供响应式布局和样式。

Pure 基于 Normalize.css ,它支持 Firefox、Chrome、Safari、iOS 和 IE 10+ ,因此不存在浏览器兼容性问题。此外,Pure 包含各种常见的表格样式且自带表单对齐功能、包含垂直和水平菜单样式和对下拉菜单的支持。

通过 Pure 可以使用 Grids、Menus 等组件快速构建网页的基础布局 —— PC / 移动双端、所有屏幕大小都适配的自适应布局。

排版效果展示:

项目地址:www.oschina.net/p/pure-css

12、Bulma.css

项目官网:https://bulma.io/

开源协议:MIT

Bulma 是一个基于 Flexbox 的现代 CSS 框架,对移动端及其友好的响应式排版、模块化支持导入部分内容、且外观非常现代化。

Bulma 提供了现成的响应式前端组件,使用这些组件可以轻松创建一个 100% 响应式的页面,它的 Magic tiles 组件能根据端口大小自适应排版,对审美不佳的排版小白来说尤为好用。

排版效果展示:

项目地址:oschina.net/p/bulma

13、css.gg

项目官网:https://css.gg/

开源协议:MIT

css.gg 是一个开源的 CSS、SVG 和 Figma UI 图标库,可用于 SVG Sprite、样式组件、NPM 和 API。

css.gg 拥有 700 + 不同格式的、美观而现代的图标,使用 css.gg 可让整个页面处于一组统一而美观的 UI 风格中。

图标样式:

项目地址:oschina.net/p/css-gg

本文所介绍的软件均来自 Awesome 软件系列之《有趣且实用的 CSS 框架、组件》 :oschina.net/project/awe 。

小编在此系列中摘录了部分开源 CSS 框架 / 组件作介绍,旨在抛砖引玉。如果你还了解其他有趣、实用的 CSS 组件,欢迎在评论区留言分享,我们将采纳大家的建议,持续更新 Awesome 系列的内容。


大家好,我是CUGGZ,今天来分享 GitHub 上一些热门的 CSS 框架!

1、Bootstrap

Bootstrap是 Twitter 推出的基于HTML、CSS、JavaScript 开发的简洁、直观、强悍的CSS开发框架,使得 Web 开发更加快捷。Bootstrap 提供了优雅的HTML和CSS规范,它由动态CSS语言Less写成。Bootstrap 推出后颇受欢迎,一直是GitHub上的热门开源项目。

Bootstrap 的优点:

流行框架: Bootstrap 是最流行的开源项目之一。在遇到问题时可以很容易的找到解决方案。

功能齐全: 它不仅是一个开发框架,还是一个预构建的动态模板,包含很多现成的组件。这可以使任何开发人员,即使没有前端经验,也可以更轻松地开发结构良好的页面。

可定制: 可以轻松定制 Bootstrap。可以使用 npm 安装项目,导入需要的部分,并使用 CSS 变量自定义几乎所有内容。

成熟且受支持: Bootstrap 最初由 Twitter 退出,现在由数百名开发人员组成的社区维护,确保稳定发布和长期支持。

Bootstrap 的缺点:

难以覆盖: Bootstrap 具有非常具体的设计和外观,如果想要不同的风格,就很难覆盖。由于它广泛的使用 CSS 中的!important规则,因此可能很难覆盖默认值。

依赖 jQuery: 与其他仅支持 CSS 的框架不同,Bootstrap 4 的许多交互功能都依赖于 jQuery。这使得将它与 React 或 Vue 等 JavaScript 框架一起使用变得更加困难,但也不是不可能。不过,在 Boostrap 5 中删除了 jQuery 依赖项。

依赖繁重: Bootstrap 在项目中非常繁重,尽管可以只导入需要的部分,但它不像其他框架那样轻量级或模块化。

GitHub:https://github.com/twbs/bootstrap。

2、 Foundation

Foundation 是一个用于开发响应式的 HTML, CSS 和 JavaScript 框架。它是一个易用、强大而且灵活的框架,用于构建基于任何设备上的 Web 应用,是一个移动优先的流行框架。

实际上,Foundation 不仅仅是一个 CSS 框架,而是一系列前端开发工具。这些工具可以一起使用,也可以完全独立使用。

Foundation 的优点:

通用风格: 与 Bootstrap 不同,Foundation 没有为其组件使用独特的风格。其广泛的模块化和灵活的组件具有最小的样式,并且可以轻松定制。

功能齐全: Foundation 提供了很多内置组件。还可以访问由开发团队或社区创建的预定义的 HTML 模板,可以根据需求去使用这些模板。

电子邮件设计: oundation for Emails 可以为任何客户端创建响应式电子邮件模板,包括旧版本的 Microsoft Outlook。

动画: Foundation 可以轻松地与 ZURB 的 Motion UI 库集成,让我们可以使用内置效果来创建过渡和动画。

Foundation 的缺点:

学习成本高: Foundation 有很多特性,比其他框架复杂得多。在进行前端布局时,它提供了很大的自由度,所以我们就需要了解这一切是如何工作的。

依赖 Javascript: Foundation 的许多功能都依赖于 Javascript,使用 jQuery 或 Zepto。Zepto 是一个与 jQuery 使用相同语法但占用空间更小的库。这使得 Foundation 不太适合 React 或 Angular 项目。Zepto 也是一个鲜为人知的库,没有多少开发人员熟悉。

GitHub:https://github.com/foundation/foundation-sites。

3、 Bulma

Bulma 是一个免费的开源CSS框架,它提供了现成的前端组件,可以轻松地组合这些组件来构建响应式 Web 界面。Bulma 框架最大的特点就是简单好用。所有样式都基于class,只需为 HTML 元素指定class,样式将立刻生效。

Bulma 的优点:

美学设计: Bulma 它采用简洁现代的设计,即使不更改默认设置,最终也会得到一个漂亮的网页。

现代: CSS 的 flexbox 布局使得创建响应式布局变得更加容易,而 Bulma 是最早基于 flexbox 实现的框架之一。

对开发人员友好: Bulma 旨在为开发人员提供出色的体验。考虑到这一点,Bulma 提供了易于使用和记忆的命名约定。

易于定制: Bulma 的颜色、填充和许多默认属性都可以使用 SASS 进行定制。这样,可以在几分钟内设置项目的默认值。

没有 Javascript: Bulma 不包含 JavaScript 功能。由于它是纯 CSS 的,因此可以轻松地与 Vue 或 React 等 Javascript 框架集成。

Bulma 的缺点:

独特的风格: Bulma的独特风格是一把双刃剑。由于它非常独特,如果它被过度使用,最终会得到看起来非常相似的网站,就像 Bootstrap 一样。

不太完整: Bulma 在许多情况下都在与 Boostrap 竞争,但在可访问性和其他企业级功能方面并不完整。

GitHub:https://github.com/jgthms/bulma。

4、 Tailwind

Tailwind CSS 是一个功能类优先的 CSS 框架,它集成了诸如 flex, pt-4, text-center 和 rotate-90 这样的类,它们能直接在HTML中组合起来,构建出任何设计。

Tailwind 的优点:

原子 CSS: Tailwind 通过提供强大的实用程序类使常见的样式易于实现。这种方法有时被称为原子 CSS,其中 HTML 元素的类清楚地描述了它的外观。只需使用指定的class,样式即可生效。

没有设计: Tailwind 没有预制组件或特定的设计语言。所以不必覆盖现有样式,在自定义设计时可以提高工作效率。

可重用组件: Tailwind 允许创建自己的自定义组件,可以在整个项目中重用这些组件,还可以在官网上找到一些组件示例。

强大的 PostCSS/SASS 集成: 要充分利用 Tailwind,需要安装并将其导入 SASS 或 PostCSS 项目。这使可以利用 Tailwind 的所有功能来编写更有效的 CSS。

Tailwind 的缺点:

学习成本高: 对于经验不足的开发人员来说,Tailwind 并不是最佳选择。由于它不提供预制组件,因此需要充分了解前端技术的工作原理。Tailwind 的学习成本较高,必须学习相关语法才能使用该框架高效工作。

不能直接使用: Tailwind 可以作为捆绑的 CSS 文件添加到项目中。但如果这样添加框架,它的许多功能将不可用,并且将无法使用压缩版本(压缩版 27 KB、原始版 348 KB )。要充分利用 Tailwind,需要知道如何使用 Webpack、Gulp 或其他前端构建工具。

GitHub:https://github.com/tailwindlabs/tailwindcss。

5、 UIkit

UIkit 是 YOOtheme 团队开发的一款轻量级、模块化的前端框架,可快速构建强大的前端界面。UIKit提供了全面的HTML、CSS、JavaScript组件。它基于LESS开发,代码结构清晰简单,易于扩展和维护,并且具有体积小、反应灵敏的响应式组件,可以根据 UIKit 基本的风格样式,轻松地自定义创建出自己喜欢的主题样式。

UIkit 的优点:

数十个组件: UIKit 通过数十个组件,可以实现复杂的前端布局。它包括所有典型的实用程序和组件,并且可以访问高级元素,如导航栏、画布外边栏和视差设计等。

可扩展: UIKit 可以使用 LESS 或 SASS 预处理器轻松定制和扩展。

基于 UI 的定制器: UIKit 提供了一个基于 Web 的定制器,可以实时定制设计,然后将 SASS 或 LESS 变量复制到项目中。

UIkit 的缺点:

不适合小型项目: 不建议经验不足的开发人员使用 UIKit,因为它是一个复杂的框架,需要深入了解。它非常适合高级应用程序,但对于小型项目可能太复杂了。

社区较小: 它不像其他框架那样受欢迎,遇到问题可能较难找到答案。

GitHub:https://github.com/uikit/uikit。

6、 Milligram

Milligram 提供了最小的样式设置,以快速和干净为起点。压缩后只有 2kb!它为更好的性能和更高的生产力而设计,需要重置的属性更少,代码更简洁。

Milligram 的优点:

极简 CSS 框架: Milligram 易于设置和上手。尽管它提供了强大的功能来提高生产力,但它在压缩后仅有 2 KB。

无默认样式: 与其他框架不同,Milligram 没有默认样式。在实现自定义样式时,无需重置或覆盖不符合目标的属性。

易于学习: 上手非常简单,阅读官方文档足以入门。

Milligram 的缺点:

无模板: Milligram 没有提供预制的模板。

社区较小: Milligram 有一个小而紧密的社区。寻找社区的支持并不像使用更流行的 CSS 框架那么容易。

GitHub:https://github.com/milligram/milligram。

7、Pure

Pure.css是美国雅虎公司出品的一组轻量级、响应式纯CSS模块,适用于任何Web项目。这个框架非常小,在使用所有模块时压缩后只有 3.7 KB。

Pure 的优点:

轻量: 每一行 CSS 都经过仔细考虑和编写,以使框架轻量级和高性能。

可定制: 可以以模块化方式导入 Pure 并仅实现需要的内容。

支持良好: 与社区项目不同,Pure 得到 Yahoo 的支持,这使得该项目成为长期使用的安全选择。

现成的组件: Pure 带有响应式和为现代网络构建的预制组件。

Pure 的缺点:

不适用于小团队: Pure 不适合经验不足或者小型的团队,因为需要创建自己的设计来使用该框架。

GitHub:https://github.com/pure-css/pure。

8、Tachyons

Tachyons与其他流行的前端框架不同,Tachyons旨在将CSS规则分解为小型的、可管理的、以及可复用的部件。Tachyons可以帮助开发人员创建出具有高度可读性、能够快速加载和响应的网站,而且无需使用大量CSS代码。

Tachyons 的优点:

即用型组件: 尽管 Tachyons 专注于提供出色的实用程序类以提高生产力,但官方文档也包含许多即用型组件。

多样化: Tachyons 提供可用于不同设置的功能模板,例如静态 HTML、Rails、React、Angular 等。

可重复使用: Tachyon 是创建可扩展设计系统的绝佳选择。该框架允许创建可重用的属性来构建多样化和灵活的组件。

Tachyons 的缺点:

主要用于 PostCSS: PostCSS 是使用 Tachyons 的主要方式,但不像 LESS 或 SASS 那样广泛使用。Tachyons 确实提供了 SASS 的集成,但它并未得到广泛使用和支持。

GitHub:https://github.com/tachyons-css/tachyons。

9、Materialize

Materialize是一个使用CSS,JavaScript和HTML创建的UI组件库。实现UI组件有助于构建有吸引力,一致和功能的网页和网络应用程序,同时坚持现代网络设计原则,如浏览器可移植性,设备独立性和优雅的降级。它有助于创建更快,更美观,更灵敏的网站。它的灵感来自Google Material Design。

Materialize 的优点:

功能齐全: Materialize CSS 提供了很多预制组件,还带有更高级的 Javascript 功能来支持交互。

移动友好: 可以使用框架的类似移动设备的组件(例如浮动导航栏和滑动交互)创建渐进式 Web 应用程序。

Materialize 的缺点:

严格的设计语言: 如果想做一些不接近材料设计的事情,最好避免使用 Materialise。

独立项目: Materialise 有一个活跃的社区,但它是一个小型且独立的项目,没有企业支持。

GitHub:https://github.com/Dogfalo/materialize。