本文只代表本人观点,在自己的一些实践经验上的出的粗浅结论。也只适合在公司目前业务所得出的方案,仅供参考,可能随着技术的发展,其他框架也会越来越好。


一、背景


        随着移动互联网的百家争鸣,越来越多的“端”如雨后春笋快速兴起,安卓、ios、鸿蒙和各种小程序等。同一个应用,各个“端”独立开发,不仅开发周期长而且人员成本高,不利于团队成员形成合力提高开发效率。这种重复、低效的工作状态直接影响到新品的迭代和发布,在这样的形势下,跨端技术受到越来越多人和企业的关注。


        使用跨端方案进行开发,必然会调整原有平台的技术架构,所以我们在选择跨端方案时,不能只依赖于某几项指标,比如编程语言、性能等,更多的还要考虑学习成本、迁移成本、开发效率、社区支持等方面的指标,适合公司产品和业务需要的架构才是最好的架构。


二、跨平台方案


        目前主流的跨端方案主要分为三种:一种是使用webview方案,代表技术是Hybird混合开发;一种是将JavaScriptCore引擎作为虚拟机的方案,代表框架是React Native;另一种是使用自研的dart虚拟机方案,代表框架是Flutter。




(一)、Webview跨平台方案 


(1)Hybrid App开发


        Hybrid混合开发是一种取长补短的开发模式,原生代码利用WebView为H5提供容器,并配合 JSBridge 提供了原生与JS之间的通信链路,基于这个通信基础,原生可以暴露出一些标准服务API提供给JS调用,同样的JS也可以封装一些基础API给原生调用。目前我们采用的就是这种交互方式,还有京东、淘宝、今日头条等APP有部分模块也是基于混合开发模式。


优点:


①开发效率高,节约时间。同一套代码Android和IOS基本上都可使用;


②更新和部署比较方便,每次升级版本只需要在服务器端升级即可,不需要上传到App Store进行审核。


③代码维护方便、版本更新快,节省产品、人力成本;


缺点:


①加载缓慢、网络要求高,混合APP数据需要全部从服务器调取,每个页面都需要重新下载,因此打开速度慢,网络占用高,缓冲时间长,用户体验稍差。


②兼容性差,手机系统更新换代快,需要做比较多的兼容性方案。


③Hybrid App只是提供了一个壳,基座还是需要ios和安卓同事开发和维护的。


(2)Uni-app


        Uni-app是一个开放式跨端跨框架解决方案,使用 Vue框架来开发小程序、H5、APP等应用。uni-app支持webview与weex双重渲染,h5页面使用webview渲染,原生部分采用nvue wewx进行渲染,相当于把h5的技术与rn的技术做了一个结合。由于原生是基于weex的,然后下一层才是通信bridge。多了一层就多了一份性能问题,所以性能方面会比ReactNative略差一点。


优点:


①开发成本、门槛低,开发者编写一套vue.js代码,可发布到IOS、Android、h5、小程序等多个平台。


②社区活跃,生态好,组件丰富,社区有大量的组件提供使用。


③支持热更新,APP最新修改可以动态发布,而不需要提交APP市场审核。


缺点:


①nvue原生开发有局限性,特别是样式方面限制比较严重,定制化程度低。


②部分组件可能需要收费,云打包超过次数需要收费。


③文档松散,api众多。


④主打快速,生成多端代码,许多中小公司在用。


(二)、React Native跨平台方案


(1)react native


       react native是Facebook于2015年4月开源的跨平台移动应用开发框架。RN使用JavaScript语言类似于HTML的JSX,JSX 源码通过 React Native 框架编译后,与Native原生的UI组件进行映射,用原生代替DOM元素来渲染,在UI渲染上非常接近Native App。 


(2)京东taro


      Taro 是一个开放式跨端跨框架解决方案,支持使用 React、Vue等框架来开发小程序、H5、APP等应用。APP开发基于 Facebook的开源项目React Native,开发语言可以使用vue,但最终生产的代码是react。开发中不仅需要代码调试而且还有底层交互,所以使用taro需要具备react、原生技能。


优点:


①只需要同一套javascript代码就可以运行于ios和android 两个平台,在开发、测试和维护的成本上要低很多。


②采用热加载的即时编译方式,使得App UI的开发体验得到改善,几乎做到了和网页开发一样随时更改,随时可见的效果。


③可以通过 JSBundle 即时更新 App。相比原来冗长的审核和上传过程,发布和测试新功能的效率大幅提高。


④摆脱了WebView的交互和性能问题,同时可以直接套用网页开发中的css布局机制。


缺点:


①在动画效率和性能的支持还存在一些问题,性能上不如原生Api。


②官方文档中可以发现仍有部分组件和API都区分了Android和IOS 版本,即便是共享组件,也会有平台独享的函数。也就是说仍不能真正实现严格意义上的“一套代码,多平台使用”。


③缺乏很多基本控件,第三方开源质量良莠不齐。


④需要具备react、原生开发能力。


(三)、Flutter


        Flutter是谷歌在2018年发布的移动UI框架,可以快速在APP、web上构建高质量的原生用户界面。它最大的特点是渲染不是基于操作系统的组件,而是直接基于绘图库(skia)来绘制的,这样做到了渲染的跨端。逻辑的跨端也不是基于js引擎,而是自研的dart虚拟机来跨端,通过dart语言来写逻辑,支持AOT和JIT两种编译方式,而没有采用HTML/CSS/JavaScript组合方式开发,在执行效率上明显高于React Native所使用的JavaScriptCore。


优点:


①UI性能可以比肩原生,编译出来的程序可以达到60bps的高性能。


②Dart在 JIT模式下,速度与 JavaScript基本持平。但是 Dart支持 AOT,当以 AOT模式运行时,JavaScript便远远追不上了。


③组件丰富,社区也相对活跃。


缺点:


①优点即缺点,Dart 语言的生态小,精通成本比较高。


②UI控件API设计不佳。


③与原生融合障碍很多,不利于渐进式升级。


④国内文档较少,需要查阅外文资料。


(三)、各平台参数对比


下面通过表格的形式对比更直观:(数据截止至2021-06-10)


技术


Hybrid


Uni-app


React native


taro


Flutter


公司


Dcloud


Facebook


京东


谷歌


发布时间


2015年


2015年


2018年


2018年


是否开源


开源


开源


开源


开源


语言


Vue


react


react


dart


Github starts


31.8K


96K


29K


122K


Issues


问题


810开启


1639关闭


1447开启


19957关闭


730开启


6620关闭


8929开启


46653关闭


贡献人数


153人


2285人


325人


870人


原生性能


2星


3星


4星


4星


5星


学习难度


2星


3星


4星


3星半


5星


应用市场热更新


不支持


支持


支持


支持


不支持


文档


完善


文档相对散乱


文档完整


且整洁


文档较少


但整洁


文档完整


阅读困难


生态


4星


5星


有自己社区


2000人群35个


支持小程序、h5、APP


5星


4星


有自己社区


200人群44个


支持小程序、h5、APP


3星


(四)、结论


上文也有提到过,抛开技术和社区支持,适合公司产品和业务需要的技术才是最好的技术。目前公司采用的技术是Hybrid混合开发模式,前端团队技术栈都是vue,经过对比,可以得出几个粗略的结论:


taro和react native都是使用的react,所以这两个方案不适合。

目前影响公司产品快速迭代升级的矛盾主要在h5和微信小程序混用导致效率低、联调复杂,App的跨端统一不是主要矛盾。所以仍然可以采用webview嵌套h5的形式,但h5和小程序开发模式需要统一。

使用uni-app开发App,性能不如React和Flutter,使用nvue weex开发也有比较多的限制,综合比较提升不是很大,所以也不适合。

Flutter虽然学习成本最高,难度也大,但短时间内github starts数量已经达到122K,issus提问题数和代码贡献人数都比较多,说明Flutter在近期活跃度很高,对于技术发展和框架完善能起到很大帮助。

实际项目中,为了提高开发效率和页面复用,APP一般只开发登录页、我的页、和首页(不考虑首页加载慢情况,首页也可以用h5),其他页面嵌套H5。把壳做出来,这样开发新App项目也能够快速复制。

结论:


方案1、App仍使用现有Hybrid方案,h5和微信小程序开发使用同一套代码。


方案2、在人力充足的情况下,登录页、我的页尝试采用Flutter进行开发,其他h5和微信小程序使用同一套代码。


三、多端统一开发


上文提到目前影响公司产品快速迭代升级的矛盾主要在h5和微信小程序混用导致效率低、联调复杂,App的跨端统一不是主要矛盾。所以h5的微信小程序的开发方式需要统一。


目前我们的小程序主要是微信(企业微信)小程序,支付宝、百度、头条、淘宝等小程序暂时没有需求,前端技术栈为vue、vant-ui,所以能同时兼顾以上方面并且开发效率高、社区活跃的方案就是我们所需要的。


现在市面上比较流行的框架有:


Taro,京东凹凸实验室出品,官网地址:https://taro.jd.com/


Uni-app,DCloud出品,官网地址:https://uniapp.dcloud.net.cn


kbone,腾讯微信团队出品,官网地址:kbone 是什么? | wechat-miniprogram / kbone


Mpvue,美团团队出品,官网地址:mpvue.com


mpvue在2019年美团就没有再更新过技术方案,而且uni-app的小程序方案也是自mpvue扩展而来,所以mpvue不在比较范围内。


下面通过表格的形式对比更直观:(数据截止至2021-06-10)


技术


Uni-app


Taro


Kbone


公司


Dcloud


京东


腾讯


是否开源


开源


开源


开源


发布时间


2015年


2021年支持vue


2020年


语言


Vue


Vue、react


Vue


Github starts


31.8K


29K


3.9K


Issues


问题


810开启


1639关闭


730开启


6620关闭


18开启


324关闭


分包加载


支持


支持


支持


支持vant


支持


支持


不支持


支持多端


微信/百度/支付宝/QQ/钉钉/头条/淘宝


微信/京东/百度/支付宝/QQ/钉钉/字节


只支持h5


企业微信


支持


支持


文档太少没体现


学习难度


2星


2星


2星


文档


文档多、相对混乱


文档较少但整洁


文档很少


生态


5星


有社区最活跃


2000人qq群,35个


4星


有社区相对活跃


200人微信群,44个


1星


有社区,不活跃


一个qq群


(1)社区活跃度情况


根据加群一星期taro和uni-app提问题和解决问题的情况看,Uni-app更为活跃,可能跟群总人数有关(taro200人群,uni-app2000人群),但总体来说还是uni-app更活跃,百度、csdn、掘金等技术文章、解决方案也是uni-app居多。Kbone百度搜索技术文章可以说是没有,基本可以忽略,社区也不活跃。


(2)百度指数、曝光程度


在百度指数,从2020-01-01 到2021-06-12一年多的时间来看,各框架从曝光度和搜索指数从高到低依次为 uni-app--》flutter--》taro--》react native 




(3)实际开发情况


综合对比uni-app、taro从项目搭建、代码编写、资料查询、开发性能体验、vant-ui支持、代码发布等情况,uni-app更具优势,而且还挺大。


①taro2021年3月份才开始支持vue的写法,使用taro-vue开发小程序,很多vue方面的技术细节都没有体现,无从下手。


②taro不能很好的支持vant-ui,引入vant包时就遇到很多问题,样式方面也有缺失。


③taro-vue技术类支持文章还是不够,很多问题查阅不到。比较适合react框架进行开发,使用vue来开发目前还不适合。


(5)结论


1、kbone虽然是腾讯微信小程序团队出品,但是目前无论是社区支持还是技术支持还远远不行。


2、Taro的vue版本在2021年3月份才开始支持,而且底层是通过react渲染实现,比较适合react的技术框架并且vant-ui和开发体验都不是很好。


3、uni-app微信小程序在2016年就已经开始商用,经过多年的积累,已经形成了一个相对完善、活跃的社区,技术和更新也有一个很好的沉淀。同时支持现有微信小程序转uni-app、h5转uni-app,迁移难度有所降低。


结论:


①和小程序有关联,页面需要复用的项目,如xxx小程序、微信公众号,建议采用uni-app的方式进行开发。


②和小程序没有关联并且开发逻辑较为独立的项目,例如后台管理系统,保持不变,还是使用vue进行开发。


四、项目实施


凡事预则立不预则废,在项目实施前要有规划和部署。微信小程序和h5混用的矛盾比较突出,需要着手解决;Ios和安卓跨端问题也需要提前做技术储备。


H5和小程序项目:


(1)新建一个测试项目,使用uniapp的微信小程序转uniapp工具对xxx小程序代码转译成uni-app。


(2)测试验证,确保使用uni-app可以覆盖XXX小程序所有页面以及所有交互。


(3)测试无误再平缓迁移到正式版本,时间周期大概XXX个工作日。


Ios和安卓跨端项目:


(1)Flutter dart语言知识储备。


(2)新建一个测试项目,使用Flutter进行登录页、个人页的开发,并对相机、地理位置、通讯录等常用api进行测试,验证h5与原生交互通讯是否高效。


(3)测试无误再平缓迁移到正式版本,时间周期大概XXX个工作日


五、总结


        以上调研都是基于公司项目和人员技能掌握情况做出相对比较合适的方案,要在实际项目中运行,总会有一个测试和试错的过程,循序渐进,如果能提高开发效率并且项目风险可控的情况下建议进行更新替换。 

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


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

                        

原文链接:https://blog.csdn.net/qq_35430000/article/details/119346964


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

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

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的社区资源更为丰富。


原文地址:多端统一框架Taro基础教程 - 知乎

随着微信小程序越来越火,其它平台也都推出了自己的小程序产品(支付宝、快应用、百度、抖音)。小程序最大的特点就是平台能为你提供强大的流量,所以小程序开发变成了前端必会知识。 作为一个从来不想写程序,一心只想泡妹子的程序员,我一直期盼有一种解决方案,可以一次开发,多端运行。这也就是我的学习理念,每多学一点知识,就少些一些代码。期间我尝试Flutter、尝试uni-app、直到我遇到了Taro,我感觉血液在澎湃,多巴胺在快速分泌,又有了开车的心情。

课程共分为11节,篇幅略长,需要有点耐心哦。

P01:Taro框架简介和课程特点

Taro的优点

其实你能搜到这个教程,你至少对Taro这个框架有一个基本的了解。Taro是京东凹凸实验室推出的框架,目的就是解决多端混乱的局面。当我们按照一种模式一种代码进行开发,开发完成后,项目就有了在任何终端显示的能力,这是一种想想都很爽的。那具体Taro有那些优点,请看下面的图片。

目前Taro支持的终端

  • 微信小程序

  • H5 移动端Web页面

  • 百度小程序

  • 支付宝小程序

  • 快应用

  • ReactNative

  • 字节跳动小程序

  • QQ轻应用

是目前支持小程序最多的前端框架,并且支持ReactNatvie,说明我们可以轻易的生成媲美原生的APP应用。所以公司的应用如果想全网推广,占用最多的流量入口的话,使用Taro就完全没有问题。

作为一个程序员,你用统一的框架,统一的API,统一的代码规范,统一的代码结构,是多么棒的开发体验。从企业讲,一次开发就可以完成所有主流平台的布局,人力和时间成本压缩到最低,老板感觉节省了一个亿哦。

前置知识

学习这门课程你需要一些前置知识,这不是零基础课程,所以你需要在学习前会下面的知识。

  • HTML、CSS和JS的基本了解,你至少要能自己做出简单静态页面。

  • 理解MVVM框架,如果会React框架那是最好的。

  • 了解ES6相关的语法,因为文中我都会用ES6的语法来进行讲解

P02:Taro开发环境的搭建和Hello World

这节算是教程的正式开始,我们需要把Taro的开发环境搭建好,并且写出第一个Hello World程序。

Taro编译工具介绍

Taro是一套遵循React语法规范的多端开发解决方案,使用Taro,只书写一套代码,再通过Taro的编译工具,将源代码分别编译出可以再不同端(微信小程序,H5,RN等)运行代码。

所以说这里的Taro编译工具是非常重要的,这里附带一张图。

其实这些转换也是有很多坑的,这些坑需要在学习中不断给大家讲解。

Taro开发环境的安装

1.第一步是安装@tarojs/cli(脚手架工具),也有教开发工具的。

这个你可以使用npm或者yarn进行全局安装,命令如下:

npm的安装方式

npm install -g @tarojs/cli

yarn的安装方式

yarn global add @tarojs/cli

打开命令行后,输入上边的命令。

2.安装完成后,就可以用脚手架创建项目,命令如下:

taro init myDemo1
这里有个小坑就是如果你使用npm来安装脚手架的时候,有很大机率会失败,这些失败多是因为国内网络环境限制的。有两种解决方案,第一是挂xx来进行安装,第二种是使用yarn来进行暗转,我这里就使用了yarn。

Hello World程序

当我们都完成设置后,就可以在终端进入项目,cd myDemo1,然后执行下面的命令查看代码:

yarn dev:h5

这时候就会自动在浏览器中为我们打开一个网页,并显示出Hello World,这时候的端口是10086,使用这个端口可能京东的程序员当时正在为冲花费发愁。所以就起了这么一个端口。

总结

本节课的内容并不多,课程毕竟刚刚开始。这节主要讲解了Taro开发环境的安装和Hello World程序的编写。

P03:Taro生成小程序代码并预览

Taro可以生成小程序代码,但是我上节课并没有演示,所以很多小伙伴就优点迫不及待了。那这节我们就讲一下生成小程序代码,并在小程序开发工具中预览的详细步骤吧。

生成小程序代码

我们还是接着上节课的代码来作哦,打开VSCode后,打开终端,新进入项目目录,然后执行:

cd mydemo1
yarn dev:weapp  //关键代码

输入完命令后,taro编译器自动为我们生成小程序代码到dist目录中。

在微信开发者工具中预览

如果想开发小程序,你必须下载一个微信开发者工具,下载地址为:

微信开发者工具下载地址:

下载后安装步骤很简单,跟安装QQ几乎一样。

安装完成后,你需要注册一个账号,这个自己按照提示注册就可以了。

注册后导入一个小程序项目,需要注意的是这不是新建,而是导入一个项目。

导入后你就可以看到在微信开发者工具中显示Hello World!了。

必坑指南

讲到这里会出现第一个坑,就是你千万不要在微信开发者工具中修改dist目录中的代码,而是要持续开发Taro代码。因为你既然用了Taro,目的就是想维护一套代码,而在不同的终端中都可以使用。

如果你直接维护dist中的代码就使用使用Taro的意义了。

不要觉的这好像谁都知道,等你们真正工作时,你就会知道我现在强调这个坑的意义。因为你在工作中会遇到很多特殊的小程序独特需求,你就会想着利用这个方法来解决。

总结:我们已经实现了在小程序端预览Taro代码的需求,这节课也就结束了。可能你会觉的很短,但是你练习起来可能会多花一些时间,毕竟你还需要下载微信开发者工具和注册账号。

P04:Taro目录介绍

我们的Taro项目是用@tarojs/cli脚手架工具自动生成的,所以我们有必要了解一下这些目录和用处。这节课就利用几分钟时间来了解一下。

dist目录

这个目录是我们在预览时自动生成的,每次进行预览都会根据我们预览的终端不同,编译成不同代码,比如你使用yarn dev:h5那生成的就是web的代码,如果你使用yarn dev:weapp那生成的就是小程序的代码。

每次编译时都会删除以前的代码,这个小伙伴么要注意一下。

config目录

这个就是项目的一些配置,这些配置以后我们会不断深入学习,但是现在你还不了解,就不要进行配置。否则会影响项目的运行。

node_modules

项目所需的依赖包,就是我们使用npm install进行安装的包,一般你不需要修改。

src目录

这个是最重要的,这个是我们的源码目录,开发的所有代码都在这个里边。

官方给出的目录结构说明

├── dist                   编译结果目录
├── config                 配置目录
|   ├── dev.js             开发时配置
|   ├── index.js           默认配置
|   └── prod.js            打包时配置
├── src                    源码目录
|   ├── pages              页面文件目录
|   |   ├── index          index 页面目录
|   |   |   ├── index.js   index 页面逻辑
|   |   |   └── index.css  index 页面样式
|   ├── app.css            项目总通用样式
|   └── app.js             项目入口文件
└── package.json

P05:Taro使用React Hooks新特性

目前市面上的Taro教程,都是用原来老旧的React语法来讲的,都2020年了,我们应该拥抱React Hooks了。所以这节课我们就改造一下脚手架自动为我们生成的index.jsx页面,让他使用Hooks 新特性呈现。

那到底是用以前的老的React好,还是用Hooks好那?这个就好比你说49岁的莫文蔚好,还是27岁的迪丽热巴好,每个人的喜好可能不一样,但我喜欢年轻的。这就是为什么我个人要用Hooks的原因。

升级脚手架工具

我们每次进行调试的时候,都会出现红字,提示我们不是最新版本,我们可以使用命令进行升级。因为升级使用了npm的形式,所以升级过程非常慢,小伙伴们可以耐心等待一下。

在终端中输入下列命令进行升级。

taro update self

命令的具体意思是升级taro到大版本的最新版。升级完成后就不会显示红字了。

使用Hooks改造Index组件

打开/src/page/index/index.js页面,可以看到目前的代码全部都是React的基本语法,比如:继承components,比如React经典的生命周期,比如原来使用的statesetState赋值。

为了验证Hooks新特性可以使用,我们引入了useState.

import Taro, {  useState } from '@tarojs/taro'

引入后就可以使用function的形式来定义组件了,我这里给出全部代码,然后进行详细讲解。

import Taro, {  useState } from '@tarojs/taro'
import { View, Text } from '@tarojs/components'
import './index.less'

function Index(){

  const [userName ,setUserName] = useState('Hello World!!!!')

  return ( 
    <View>
        <Text>{userName}</Text>
    </View>
  )

}

export default Index

这段代码就是把原来的基本React改成了用Hooks新特性来写,我们这套教程也尽量使用React Hooks来教学,这样可以保证大家学完后不至于落伍,紧跟前端开发进程。最后还是那句话,一定要动手作,否则你什么都学不会。

P06:Taro中子组件的编写和传值

使用Taro的一个好处就是可以用组件化的方式进行编程,所以编写组件在Taro中是每天都需要作的工作。这节课来看一下如何在Taro中编写一个子组件,并通过父组件进行传值。

编写子组件

打开/myDemo1/src/pages/index文件夹,在文件下面建立一个child.jsx文件,然后打开文件,编写组件代码:

import { View, Text } from '@tarojs/components'
function Child(){
  return ( 
    <View><Text>我是子组件</Text></View>
  )
}
export default Child

编写完成后这就是一个组件,使用也是非常简单的,直接到index.jsx页面中,用import进入这个组件。

import Child from './child.jsx'

需要注意的是这个Child要跟child.jsx中的fucntion的名称一样,否则在小程序中会有问题。引入后就可以直接用标签的形式进行使用了,这里为了方便学习,给出全部代码。

import Taro, {  useState } from '@tarojs/taro'
import { View, Text } from '@tarojs/components'
import Child from './child.jsx'
import './index.less'

function Index(){

  const [userName ,setUserName] = useState('Hello World!!!!')

  return ( 
    <View>
        <Text>{userName}</Text>
        <Child></Child>
    </View>
  )

}

export default Index

这只是最简单的子组件,现在升级一下难度,我们要给子组件进行传值,看看如何进行操作。

父组件向子组件传值

学过React都知道,父组件向子组件传值是通过props进行,在Taro中也是可以这样传值的,现在修改index.jsx代码,把userName传递给子组件。

import Taro, {  useState } from '@tarojs/taro'
import { View, Text } from '@tarojs/components'
import Child from './child.jsx'
import './index.less'

function Index(){

  const [userName ,setUserName] = useState('Hello World!!!!')

  return ( 
    <View>
        <Text>{userName}</Text>
        <Child userName={userName}></Child>
    </View>
  )

}

export default Index

这篇传递后,子组件要增加props参数,然后才能用props进行接收。

import { View, Text } from '@tarojs/components'
function Child(props){
  return ( 
  <View><Text>我是子组件,父组件向我传值为:{props.userName}</Text></View>
  )
}
export default Child

这就完成了父组件向子组件的传值,是不是非常的简单。当我们会用组件的形式编写页面和组件时,你就可以作一些小东西了。但现在你可以看到,我们把页面和组件放到了一个文件夹下,并且都使用了jsx扩展名。那Taro时如何区分那些是组件,那些是页面的?其实它是通过自身的路由来区分的,只要配置路由的,就是页面,没配置的就默认是组件。下节课我们就讲解一下路由的相关操作。

P07:Taro 路由配置介绍

Taro中的路由设置跟React是不同的,它是通过app.jsx中的pages来配置的,并且谁配置在第一个数组位置,谁就是默认打开的首页。 ### 新建一个页面

我们先新建一个页面,这个在前面的课程已经讲过,但是为了练习,大家最好还是手写这些代码。

/src/pages/文件夹下,建立一个/blog文件夹,在文件夹下面建立一个blog.jsx文件,写入下面的代码:

import {View , Text} from '@tarojs/components'
function Blog(){
    return (
        <View>
            <Text>Blog Page</Text>
        </View>
    )
}
export default Blog

这样一个页面就建立好了,当然这个页面非常的简单,这些都无所谓,我们要学习的是路由。

配置路由

有了页面之后就可以到/src/app.jsx下,然后在pages的数组里面加入代码。

pages: [
    'pages/blog/blog',
    'pages/index/index'
],

这里需要注意一点,就是你不需要用import引入Blog页面,这个Taro为我们自动做好了。修改完成后,可以到浏览器中看一下,可以看到默认页面已经变成了Blog页面了。

页面间的跳转

Taro提供了6个相关的导航API,我们可以使用这些API进行跳转,需要注意的是这些有些是小程序专用的。

  • navigateTo: 最基本的跳转方式,可以返回上级页面。三端都支持的,小程序、H5、React Native。

  • redirectTo:不记录上集页面,直接跳转。三端都支持的,小程序、H5、React Native。

  • switchTab: Tab之间进行切换,这个要配合Taro的导航栏一起使用,三端都支持的,小程序、H5、React Native。

  • navigateBack: 返回上一级页面,这个在小程序中常使用,三端都支持的,小程序、H5、React Native。

  • relaunch:关闭所有额面,打开到应用内某个页面。三端都支持的,小程序、H5、React Native。

  • getCurrentPages:获取当前页面信息所用,这个H5是不支持的。(注意)

做个Demo,我们从Blog页面,跳转到Index页面,我们的程序如何来编写。

使用跳转需要使用Taro组件,所以先用import进行引入,然后再引入一个<Button>组件。

import Taro from '@tarojs/taro'
import {View , Text ,Button} from '@tarojs/components'

然后编写跳转方法,这里我们直接在function中进行声明.

const gotoIndex=()=>{
    Taro.navigateTo({url:'/pages/index/index'})
}

有了这个方法后,再编写一个按钮,然后再onClick事件中触发gotoIndex方法就可以了。

<Button onClick={gotoIndex}>我要去Index页面</Button>

为了方便你学习这里给出blog.jsx的全部代码。

import Taro from '@tarojs/taro'
import {View , Text ,Button} from '@tarojs/components'
function Blog(){
    const gotoIndex=()=>{
        Taro.navigateTo({url:'/pages/index/index'})
    }
    return (
        <View>
            <Text>Blog Page</Text>
            <Button onClick={gotoIndex}>我要去Index页面</Button>
        </View>
    )
}
export default Blog

这样我们就实现了Taro中路由的跳转。这节课我们也先到这里,下节课我们讲一下跳转时如何携带参数,然后目标页面如何接收参数。

P08:Taro 页面间传递参数

上节课我们已经对Taro的路由机制有了基本的了解。比如我们在作应用时跳转大部分是需要携带参数的,比如我们从一个美女的列表页面,然后跳转到详细页面。这个就需要带参数。这就好比你去大宝剑,先是选择美女,然后你才能享受服务一样。所以参数很重要,如果参数错了,你选的可能是个极品,进去了却是恐龙。

查询字符串的形式进行传参

在Taro中进行传参,一般会使用查询字符串的形式,也就是在跳转的url上,加一个?问号的形式,然后后边跟上参数。

现在我们就在Blog.jsx页面用,useState的形式声明一个变量,再通过跳转把值带到Index.jsx页面。

import Taro ,{useState}from '@tarojs/taro'
import {View , Text ,Button} from '@tarojs/components'
function Blog(){

    const  [blogTitle,setBlogTitle]=useState('JSPang Blog')

    const gotoIndex=()=>{
        Taro.navigateTo({url:'/pages/index/index?blogTitle='+blogTitle})
    }
    return (
        <View>
            <Text>Blog Page</Text>
            <Button onClick={gotoIndex}>我要去Index页面</Button>
        </View>
    )
}
export default Blog

接收传递参数并显示在页面上

现在参数已经可以传递了,那如何在Index.jsx进行接收那,其实也非常简单。只要使用this.$router.params就可以进行接收。

当然我们要接收参数,可以在useEffect()中进行,

useEffect(()=>{
setBlogTitle(this.$router.params.blogTitle)
},[])

为了你更好的学习,这里给出全部代码:

import Taro, {  useState ,useEffect} from '@tarojs/taro'
import { View, Text } from '@tarojs/components'
import Child from './child.jsx'
import './index.less'

function Index(props){
  const [userName ,setUserName] = useState('Hello World!!!!')
  const [blogTitle,setBlogTitle] = useState('')
  useEffect(()=>{
    setBlogTitle(this.$router.params.blogTitle)
  },[])
  return ( 
    <View>
        <Text>{userName}</Text>
        <Child userName={userName}></Child>
        <View>{blogTitle}</View>
    </View>
  )

}

export default Index

多参数的传递和接收

我们再来看看如何传递多个参数和多个参数的接收,传递的时候只要用&进行链接就可以了,比如下面这样。

Taro.navigateTo({url:'/pages/index/index?blogTitle='+blogTitle+'&introduce='+introduce})

这里为了你方便学习,给出blog.jsx全部代码:

import Taro ,{useState}from '@tarojs/taro'
import {View , Text ,Button} from '@tarojs/components'
function Blog(){
introduce
    const  [blogTitle,setBlogTitle]=useState('JSPangBlog')
    const  [introduce,setIntroduce]=useState('111111')

    const gotoIndex=()=>{
        Taro.navigateTo({url:'/pages/index/index?blogTitle='+blogTitle+'&introduce='+introduce})
    }
    return (
        <View>
            <Text>Blog Page</Text>
            <Button onClick={gotoIndex}>我要去Index页面</Button>
        </View>
    )
}
export default Blog

接收参数跟单参数接收方法一样,不作过多介绍,直接给出代码。

import Taro, {  useState ,useEffect} from '@tarojs/taro'
import { View, Text } from '@tarojs/components'
import Child from './child.jsx'
import './index.less'

function Index(props){
  const [userName ,setUserName] = useState('Hello World!!!!')
  const [blogTitle,setBlogTitle] = useState('')
  const  [introduce,setIntroduce]=useState('')
  useEffect(()=>{
    setBlogTitle(this.$router.params.blogTitle)
    setIntroduce(this.$router.params.introduce)
  },[])
  return ( 
    <View>
        <Text>{userName}</Text>
        <Child userName={userName}></Child>
        <View>{blogTitle}</View>
        <View>{introduce}</View>
    </View>
  )

}

export default Index

好的,这节课就到这里了,主要讲解了通过路由传递参数和用React hooks 如何接收参数。

P09:Taro 静态资源引入方式

Taro的静态资源引入方式和以前的使用Webpack的方式稍有不同,这节课我们就以引入JavaScript文件和Image图片文件为例,讲解一下Taro中引入静态资源的正确方法。

JavaScript资源的引入方法

JavaScript资源的引入其实和原来差不多,比如现在我们定义了一个方法叫做XieDaJiao(谢大脚),然后再定义一个方法叫liuying(刘英)。

/src目录下,新建一个/tools文件夹,然后在文件夹下边建立一个index.js文件,输入下面的代码。

export function xiedajiao(){
    console.log('我是谢大脚')
}

export function liuying(){
    console.log('我是刘英')
}

这时候我们如果想在blog.jsx下使用这两个方法,可能你会错误的使用.

import tools from `../../tools`

正确的引入方式应该是:

import {xiedajiao,liuying} from '../../tools'

使用方法如下:

useEffect(()=>{
    xiedajiao()
    liuying()
},[])

图片的引入方式

会了JS的引入和使用,再来看一下最长使用的图片如何引入。这里是不可以直接使用的。

我们通常的做法

<Image src="../../static/newbbd0001.jpg" width="100px" height="100px" />

这种方式是没办法引入成功的,因为我们的程序最终是要通过Taro编译器进行编译的,编译后的文件目录会进行改变,你所引用的图片就会失效。

正确的引入方式是先用import进行引入,然后在使用src属性,这里给出blog.jsx的全部代码。

import Taro ,{useState ,useEffect}from '@tarojs/taro'
import {View , Text ,Button,Image} from '@tarojs/components'
import {xiedajiao,liuying} from '../../tools'
import newbbd  from '../../static/newbbd0001.jpg'

function Blog(){

    useEffect(()=>{
        xiedajiao()
        liuying()
    },[])



    const  [blogTitle,setBlogTitle]=useState('JSPangBlog')
    const  [introduce,setIntroduce]=useState('111111')
    const gotoIndex=()=>{
        Taro.navigateTo({url:'/pages/index/index?blogTitle='+blogTitle+'&introduce='+introduce})
    }
    return (
        <View>
            <Text>Blog Page111</Text>
            <Button onClick={gotoIndex}>我要去Index页面</Button>
            <View>
                <Image src={newbbd} width="100px" height="100px" />
            </View>
        </View>
    )
}
export default Blog

如果你觉的这样比较麻烦,你也可以直接使用require在Image组件中直接使用,代码如下:

<Image src={require('../../static/newbbd0001.jpg')} width="100px" height="100px" />

这就是这节课所学的内容,希望小伙伴能练习一下。

P10:Taro中JSX的列表渲染

列表的渲染在工作是每天要作的工作,所以这节课来学一下Taro中列表的渲染,比如我们要作一个象牙山美女列表。

构建美女数组对象

我们先使用JS的基本语法,构建一个象牙山的美女列表,这里有谢大脚、刘英、王小蒙、香秀。

打开blog.jsx文件然后再blog方法里编写代码:

代码如下:

const girls = [
    {id:1,name:'谢大脚'},
    {id:2,name:'刘英'},
    {id:3,name:'王小蒙'},
    {id:4,name:'香秀'}
]

在JSX中循环列表

有礼列表数组后,我们就可以在JSX中进行循环了,循环也是非常简单的,只要使用ES6的map循环就可以了。代码如下:

{ girls.map((item,index)=>{
    return (
        <View>{item.name}</View>
    )
}) }

如何在JSX中使用逻辑判断

现在美女都准备好了,那要开始选男主角了,男主角有玉田刘能,如果是1,就是玉田,如果不是就是刘能,并且不能在JS代码中判断,要在JSX中进行判断。

错误示范:

<view>
    {
        if(zhujueNum===1){
            return ('玉田')
        }else{
            return('刘能')
        }
    }
</view>

如果碰到这样的情况,我们可以使用三元运算符,代码如下:

<view>
    男主角是:{zhujueNum==1?'玉田':'刘能'}
</view>

当然你也可以使用这种形式,利用短路符来判断,代码如下:

<view>
    男主角是:{zhujueNum==1 && '玉田' || '刘能'}
</view>

这节课的学习就先到这里,下节课我们继续学习。

P11:Taro请求远程数据

上节课学会了基本列表的遍历渲染,但这个列表是手工编写的,这显然不符合工作中的开发需求,工作中都是前后端分离,数据是由后端提供给前端的,所以去后端的接口请求数据变成了一个基础操作。这节课我们就学习一下使用Taro.request获取远程接口数据,并渲染到页面上的操作。

使用Taro.request获取远程数据

直接进入上节课的blog.jsx文件,然后编写一个testHandler方法,方法中使用Taro.request后去远端数据,这里远端数据使用的是我博客接口中的数据,你当然你可以获取任何你知道的接口中的数据。

const testHandler= ()=>{
    Taro.request({
        url:'https://apiblog.aliyun01.com/default/getArticleList'
    }).then(res=>{
        console.log(res.data)
    })
}

然后在JSX中编写一个<Button>按钮,加上onClick事件,代码如下:

<Button onClick={testHandler}>我要去Index页面</Button>

这时候点击按钮时就应该可以在控制台输出接口返回的数据。

遍历数据

这次我们在得到数据后遍历到JSX中,先用useState声明一个articleList,代码如下:

const  [articleList,setArticleList] = useState([])

然后在return中使用map进行遍历,代码如下:

{
    articleList.map((item,index)=>{
        return (<View key={index}>- {item.title} </View>)
    })
}

这时候就可以到服务器看一下结果了。当点击按钮后,就会去接口请求首页数据,然后得到数据后渲染到页面上。


简介

        Nextcloud是一款开源免费的私有云存储网盘项目,可以让你快速便捷地搭建一套属于自己或团队的云同步网盘,从而实现跨平台跨设备文件同步、共享、版本控制、团队协作等功能。Nextcloud是一个网盘式文件管理系统,多用户权限管理,多客户端,使用简单。


        Nextcloud是owncloud的一个分支,由原创始人团队维护,是在owncloud被别的公司收购后,由创始人团队创立的新分支。就像 mysql和mariadb。


        Nextcloud完全开源,功能强大,能够自由更改主题,无限制增加用户,有一个完善的应用中心(在线office办公,pdf在线浏览,图片缩略图浏览等功能)


官网地址:Nextcloud - Open source content collaboration platform


安装

        Nextcloud可使用Docker或者下载安装包手动进行安装。但使用Docker安装感觉是最方便的,这里假设你的Linux中已安装好Docker环境了(如果没有安装Docker,可参考我的另一篇文章Docker基础教程-CSDN博客):


-如果要下载安装包手动进行安装,则安装包下载地址如下:

https://download.nextcloud.com/server/releases/


本文安装则采用较为方便的Docker进行安装。


注意:安装Nextcloud需要MySQL数据库,如果没有,需要提前进行安装。


使用Docker安装Nextcloud步骤如下:


1.安装MySQL并创建Nextcloud所需数据库

MySQL安装和配置过程略。


要求安装Nextcloud的服务器能访问到这台MySQL服务器即可。


2.创建一个用于存储Nextcloud数据的目录:

在Linux终端中执行以下语句即可:


mkdir -p /srv/nextcloud/data


3.拉取官方镜像并运行容器

docker run -d \

    --name nextcloud \

    -v /srv/nextcloud/data:/var/www/html \

    -e MYSQL_HOST=192.168.88.161:3306 \

    -e MYSQL_DATABASE=nextcloud \

    -e MYSQL_USER=root \

    -e MYSQL_PASSWORD=8888 \

    -p 8080:80 \

    nextcloud


注意:


MYSQL_HOST:为MySQL的域名/IP+端口;


MYSQL_DATABASE:为Nextcloud要用到的数据库名称;


MYSQL_USER、MYSQL_PASSWORD:为MySQL用户名和密码。




PS:以上命令仅需要在第一次安装时使用,安装好后,再次启动时则可直接通过命令启动已安装好的nextcloud容器即可:docker start nextcloud


4.访问http://localhost:8080 进行在线安装



这里可自己输入管理员的用户密码和密码,然后点击安装按钮。






这里可根据需要选择所需安装的应用,我就直接选择“跳过”了。




出现这个页面说明安装完成,可以使用Nextcloud了。


注意事项

        安装完成后,如果访问Nextcloud出现“通过不被信任的域名访问”提示:




则可通过修改config.php配置来解决:


-进入nextcloud容器:

docker exec -it nextcloud /bin/bash


-安装vim命令:

apt-get update

apt-get install vim


-修改config.php配置文件(可信任域名配置):

cd html/config

vim config.php


找到trusted_domains部分,修改如下即可:

'trusted_domains' => array(

        0 => '127.0.0.1',

        1 => preg_match('/cli/i',php_sapi_name())?'127.0.0.1':$_SERVER['SERVER_NAME'],

),


服务启动与停止

-启动:

docker start nextcloud


-停止:

docker stop nextcloud


使用

-访问地址:

http://localhost:8080


刚开始只有一个管理员账户,该管理员的用户名密码为安装时手动输入的。


首页



语言设置





文件列表



可添加需要上传的文件、创建文件夹或者创建可在线编辑和查看的Markdown文件。


用户管理





可以新建用户或用户分组。




配额表示用户能上传的网盘空间大小:






文件/文件夹分享











然后点击“保存分享”按钮保存即可:






整合ONLYOFFICE实现Office文档在线浏览与编辑

        Nextcloud默认不支持Office文档在线编辑,只支持txt、markdown文档在线编辑,但可通过安装ONLYOFFICE应用来实现在线编辑功能,具体步骤如下:


1.安装ONLYOFFICE工具

这里采用Docker进行安装比较方便,执行以下命令进行安装和启动容器:


【这里最好用较新版本的Docker来安装,因为之前采用18.x版本安装报错:Error response from daemon: missing signature key】


docker run -i -t -d -p 8088:80 --restart=always -e JWT_SECRET=my_jwt_secret onlyoffice/documentserver


注意:这里的8088为ONLYOFFICE工具访问的端口号,my_jwt_secret为自定义的JWT SECRET,这俩配置后面在Nextcloud中配置会用到。


-验证安装是否完成:


浏览器访问ONLYOFFICE的ip+端口号,出现以下页面即可:




2.Nextcloud整合ONLYOFFICE

用管理员登录Nextcloud,右上角选择“应用”:




然后应用列表右上角点放大镜按钮进行搜索,搜索时输入ONLYOFFICE




然后点击ONLYOFFICE右侧的“下载并启用”按钮即可。








此时“管理设置”中左侧会出现ONLYOFFICE配置菜单:






此时就可以在Nextcloud文件页面中创建或者上传Word或PPT等文件了:




上传或创建文档后,点击文档名称即可实现在线浏览和编辑了:








3.Nextcloud中进行ONLYOFFICE设置

        在ONLYOFFICE中可以进行运行打开的文件格式等相关设置的,只不过并不是所有能打开的格式都能进行在线编辑。


        比如docx、xlsx、pptx、txt是可以打开并编辑的,但doc、xls、ppt、pdf等文件就不能在线编辑只能浏览了。




4.ONLYOFFICE中添加中文字体

如发现有些Office文档中用到的字体显示有问题,则可能是该字体ONLYOFFICE中没有,添加字体可参考这篇文章:

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


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

                        

原文链接:https://blog.csdn.net/yijian0645/article/details/137109351


当你写项目的时候,如何快速的完成一个项目的搭建,这个时候就需要借助到一些模板了,前端开发的一个好处就是,各类UI模板都是相当的齐全的,直接拿来用就可以了,脱离了一行又一行垒代码的繁琐的工作,以下的开源后台管理系统模板是我在逛GitHub的时候看到的,排名先后是按照2020/5月份GitHub上面的star进行排名的。

1:vue-admin-better

推荐指数:star:14k Github 地址:https://github.com/chuzhixin/vue-admin-better Demo体验:https://vue-admin-beautiful.com/admin-plus/

一个基于 vue2.0 和 Eelement 的控制面板 UI 框架,这是使用vue技术栈开发的前端程序员的首选管理系统模板,模板以及非常的成熟了,并且有相关的社区和维护人员,开发时候遇到问题也不要慌。

2:AdminLTE

推荐指数:star:34.7k Github 地址:https://github.com/almasaeed2010/AdminLTEDemo体验:https://adminlte.io/themes/AdminLTE/index2.html

非常流行的基于 Bootstrap 3.x 的免费的后台 UI 框架,这是一个非常老牌的后台管理系统模板,每个页面都是单独的html网页,适合前端入门新手来做项目。

3:ant-design-pro

推荐指数:star:25.2k Github 地址:https://github.com/ant-design/ant-design-proDemo体验:https://preview.pro.ant.design/

这个就不多说了,选择react技术栈的童鞋们必然离不开这个优秀开箱即用的中台前端/设计解决方案,文档齐全,组件丰富,一键生成模板,更支持开启复制黏贴模式哦。

4:layui

推荐指数:star:21.7k Github 地址:https://github.com/sentsin/layui/Demo体验:https://www.layui.com/admin/pro/

经典模块化前端框架,由职业前端倾情打造,面向全层次的前后端开发者,低门槛开箱即用的前端 UI 解决方案。根据大家的建议,把忘记的这个框架也补充,这个框架有收费和免费的版本,在去年的时候进入过开源中国前端框架最受欢迎的框架前三名,实至名归,确实很好用,支持单页面,PC端和响应式移动端。

5:ng2-admin

推荐指数:star:20.6k Github 地址:https://github.com/akveo/ngx-adminDemo体验:https://www.akveo.com/ngx-admin/pages/dashboard

这是基于 Angular 2, Bootstrap 4 和 Webpack 的后台管理面板框架,要说前面已经有了react和vue技术栈的模板,那怎么能少的了ng的?虽然在国外用的比较多,国内较少使用,但丝毫不影响ng作为前端框架三大巨头之一的地位呀。

6:Gentelella

推荐指数:star:19.1k Github 地址:https://github.com/puikinsh/gentelellaDemo体验:https://colorlib.com/polygon/gentelella/index.html

Gentelella 是一个可免费使用的 Bootstrap 管理界面模版,使用群体比较广泛。这个模版使用默认的 Bootstrap 3 的样式,还有一系列功能强大的 jQuery 插件和工具,可快速创建管理界面模版或者后台的 Dashboard。

7:iview-admin

推荐指数:star:14.7k Github 地址:https://github.com/iview/iview-adminDemo体验:https://admin.iviewui.com/home

iView admin 是基于 iView 的 Vue 2.0 控制面板。搭配使用 iView UI 组件库形成的一套后台集成解决方案 。

8:blur-admin

推荐指数:star:10.9k

Github 地址:https://github.com/akveo/blur-adminDemo体验:https://www.akveo.com/blur-admin-mint/#/dashboard

BlurAdmin 是一款使用 AngularJs + Bootstrap实现的单页管理端模版,视觉冲击极强的管理后台,各种动画效果。

9:vue-manage-system

推荐指数:star:10.6k 地址:https://github.com/lin-xin/vue-manage-systemDemo体验:https://lin-xin.gitee.io/example/work/#/dashboard

vue-manage-system,一个基于 Vue.js 和 element-ui 的后台管理系统模板,挺喜欢这个界面的UI,简约清晰不累赘,多功能的后台框架模板,适用于绝大部分的后台管理系统开发。

10:material-dashboard

推荐指数:star:9.1k Github 地址:https://github.com/creativetimofficial/material-dashboardDemo体验:https://demos.creative-tim.com/material-dashboard

基于 Bootstrap 4 和 Material 风格的控制面板。Material Dashboard 是一个开源的 Material Bootstrap Admin,其设计灵感来自谷歌的 Material Design 。

11:d2-admin

推荐指数:star:8.7k github地址:https://github.com/d2-projects/d2-admin

D2Admin 是一个完全 开源免费 的企业中后台产品前端集成方案,基于 vue.js 和 ElementUI 的管理系统前端解决方案 ,小于 60kb 的本地首屏 js 加载,已经做好大部分项目前期准备工作

12:vuestic-admin

推荐指数:star:7.1k

GitHub:https://github.com/epicmaxco/vuestic-adminDemo体验:https://vuestic.epicmax.co/admin/dashboard

vuestic-admin管理台仪表盘是一个响应式的仪表盘模板,采用Bootstrap 4和Vue.js构建。这个精美的管理台模板提供了自定义元素组件,如地图,聊天,个人资料卡,图标,进度条等,以及用于登录和注册的预建页面。

最后编辑于 :2022.09.21 13:28:50

©著作权归作者所有,转载或内容合作请联系作者



作者:8af0764fec6c
链接:https://www.jianshu.com/p/4262d0405eea
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。