目錄javascript
兩種類型的跨平臺應用:
- 原生跨平臺應用
- 混合(hybrid)HTML 5 跨平臺應用
- NativeScript 是由 Telerik 在 2014 年發佈的
- 對於 B2B 解決方案和業務流程自動化項目來講,原生跨平臺或 HTML5 混合應用開發技術依然可以提供足夠好的性能,同時更能節省成本。
2015年構建混合移動應用的流行框架優缺點對比 - 開源中國html
框架 Native體驗 依賴 社區 文檔 工具 Ionic 7/10 AngularJS (可選) 9/10 8/10 強大的 CLI, Ionic SDK Onsen UI 6/10 AngularJS (可選) 4/10 9/10 Monaca Cloud IDE(有免費方案) Framework 7 8/10 只需HTML, CSS 和JS 6/10 8/10 無 React Native 8/10 React 8/10 5/10 Chrom的擴展工具React Developer Tools jQuery Mobile 3/10 jQuery 8/10 5/10 無 Native Script 8/10 TypeScript 5/10 9/10 免費的 CLI, 其餘的付費可選 Famous 7/10 WebGL, AngularJS 3/10 5/10 無
- 雲平臺方案,但即使平臺作的再好,仍然有不少問題須要本身解決
- 移動端機器學習
- AR & VR
- Android 工具類應用
- 上面六個(七個)移動端開發方向,是我總結出來的有潛力有前景的方向,各位移動開發同窗能夠參考,能夠選擇一個方向進行深挖,相信必定會有收穫。嘴上焦慮是沒有意義的,最好的辦法就是付出行動。
全網最全 Flutter 與 React Native 深刻對比分析 - 掘金java
1、環境搭建
2、實現原理
3、 編程開發
3.一、 語言
3.二、界面開發
3.三、狀態管理
3.四、原生控件
4、 插件開發
5、 編譯和產物
6、性能
7、發展將來node
uni-app 是一個使用 Vue.js 開發跨平臺應用的前端框架,開發者編寫一套代碼,可編譯到iOS、Android、H五、小程序等多個平臺react
對比其餘框架 — Vue.jsandroid
- 例如 React 龐大的生態系統,或者像是 Knockout 對瀏覽器的支持覆蓋到了 IE6。
- React 和 Vue 有許多類似之處,它們都有:
- 使用 Virtual DOM
- 提供了響應式 (Reactive) 和組件化 (Composable) 的視圖組件。
- 將注意力集中保持在覈心庫,而將其餘功能如路由和全局狀態管理交給相關的庫。
跨端開發框架深度橫評 - 掘金webpack
- 若是你想多端開發,提高效率,不想踩太多坑,uni-app相對更完善。
- 若是你主要爲了微信端和H5端,那麼uni-app和taro均可以
- 若是你主要須要跨App端,uni-app兼容性更好,其餘框架的App端差別過大
TerserPlugin
'--minimize': `Tell webpack to minimize the bundle using the TerserPlugin.`
使用 WinDirStat.exe
對開發工具目錄?:\Program Files\HBuilderX\Bin
進行分析
分析得出
plugins
目錄裏有幾個的目錄做用:
launcher
啓動整個IDE相關的插件代碼
文件夾大小: 173MB
uniapp-cli
有關UNI-APP開發編譯相關的命令行程序相關代碼.
文件夾大小: 155MB
node_modules
被
plugins\launcher
在根目錄的package.json
顯性依賴的文件夾.雖然感受文件夾大小有點小.
"extensionDependencies":["node_modules"]文件夾大小: 37MB
jre
多是爲了IDE能正常運行JAVA插件功能而內置的JAVA運行時.
文件夾大小: 67MB
eslint-vue
HBuilderX - 工具 - 插件安裝 - ESLint-VUE 插件
compile-es6
HBuilderX - 工具 - 插件安裝 - ES6編譯插件
templates
在該目錄新建你經常使用的模板或將你經常使用的模板複製到該目錄,新建文件時,模板列表會多出以該文件的文件名命名的模板。模板內容爲該文件的內容。若再也不須要該模板,請刪除該文件。
Android 5.1;
AppleWebKit/537.36(KHTML,like Geoko)
Mobile Safari/537.36
在部分x5內核的瀏覽器上會報Uncaught TypeError: undefined is not a function · Issue #3069 · NervJS/taro
舊機型自帶的瀏覽器和在qq瀏覽器app下,瀏覽的頁面是空白頁,經過spy-debugger獲得錯誤:Uncaught TypeError: undefined is not a function.
能夠繼續升級試試。有部分代碼調用了findIndex,已經去掉。
HBuilderX - 右鍵當前項目 - 使用命令行窗口打開所在目錄
在>符號後執行"d:\Program Files\HBuilderX\Bin\plugins\npm\npm.cmd" init -y
在>符號後執行"d:\Program Files\HBuilderX\Bin\plugins\npm\npm.cmd" i babel-plugin-transform-object-assign
在當前項目的main.js
裏增長如下代碼
import Vue from 'vue' import App from './App' // 如下爲新添加的代碼 require('./node_modules/core-js/fn/object/assign') Vue.config.productionTip = false
從新編譯打包便可.
編譯後[始終]會添加代碼到main.js
文件的第一行.
//如下爲編譯後[始終]添加到第一行的代碼. //node_modules\@dcloudio\vue-cli-plugin-uni\lib\configure-webpack.js:215行 import 'uni-pages';import 'uni-h5';import '@dcloudio/uni-stat'; // 如下爲用戶在項目中自定義添加的代碼 import './node_modules/core-js/fn/object/assign'; import './node_modules/babel-plugin-transform-object-assign/lib/index'; import Vue from 'vue' import App from './App'
而後崩潰的地方就在import 'uni-h5';
致使用戶在項目中自定義添加的代碼的執行時機 太晚,致使修復失敗.
經過使用Chrome 44版本調試得知崩潰的代碼爲VUE-H5-ROUTER組件致使的:
plugins\uniapp-cli\node_modules\@dcloudio\vue-cli-plugin-uni\packages\h5-vue-router\vue-router.js
1476: record = Object.assign({}, record);對應的實際文件名爲
vue-router.esm.js
(ES Module (基於構建工具使用))
經過上Github下載VUE-ROUTER對應的原始版本進行交差對比
發現UNI-APP裏的版本存在好多
fixed by xxxxxx
的額外代碼.而出問題的代碼行1476恰好出如今新增的代碼中.源代碼地址: GitHub - vuejs/vue-router at v3.0.1 Latest commit=2017年10月14日
初步猜想: 是UNI-APP的開發團隊在其基礎上進行修復修改後僅適用的版本.
嘗試把vue-router.esm.js
移動到別的文件夾
結果=編譯會直接報錯
嘗試將packages\h5-vue-router
目錄更名
結果=編譯會直接報錯
報錯文件
D:/Program Files/HBuilderX/Bin/plugins/uniapp-cli/node_modules/@dcloudio/uni-h5/dist/index.umd.min.js
代碼中有直接引用
require("vue-router")
報錯文件
"D:\Program Files\HBuilderX\Bin\plugins\uniapp-cli\node_modules\@dcloudio\uni-h5\src\core\service\plugins\index.js"
文件裏有此文件引用
import VueRouter from 'vue-router'
將vue-router.esm.js
文件使用babel
從新編譯轉換爲ES5版本
將轉換好的vue-router.esm.js
替換原目錄裏的同名文件
再次編譯UNI-APP項目 和 發佈便可
在Chrome 44版本打開測試,發現問題已經成功解決.
babel
從新編譯轉換爲ES5版本建立YeTest
目錄
將plugins\uniapp-cli\node_modules\@dcloudio\vue-cli-plugin-uni\packages\h5-vue-router\vue-router.esm.js
文件複製到YeTest\src
子目錄
執行命令npm init
執行命令npm install --save-dev @babel/core @babel/cli
參考資料:Babel - Installation
在package.json增長
{ "name": "my-project", "version": "1.0.0", + "scripts": { + "build": "babel src -d lib" + }, "devDependencies": { "babel-cli": "^6.0.0" } }
執行命令npm install @babel/preset-env --save-dev
在package.json增長
{ "devDependencies": { }, + "babel": { + "presets": [ + [ + "@babel/preset-env", + { + "useBuiltIns": "usage", + "corejs": 3 + } + ] + ] + }, + "browserslist": "Android>=4.0, IOS>=7" }
執行命令npm install core-js@3 --save
最終package.json內容爲
{ "name": "yetest", "version": "1.0.0", "description": "", "main": "vue-router.esm.js", "scripts": { "build": "babel src -d lib", "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "devDependencies": { "@babel/cli": "^7.6.4", "@babel/core": "^7.6.4", "@babel/preset-env": "^7.6.3" }, "babel": { "presets": [ [ "@babel/preset-env", { "useBuiltIns": "usage", "corejs": 3 } ] ] }, "browserslist": "Android>=4.0, IOS>=7", "dependencies": { "core-js": "^3.3.6" } }
執行命令npm run build
則lib
目錄下的文件就是轉換後的版本.
不修改原有UNI-APP的原有編譯流程
直接HBuilderX - 發佈 - 網站-H5手機版本發行
將最終發佈的全部文件複製到YeTest\src
目錄
參考解決方案2的"如何使用
babel
從新編譯轉換爲ES5版本"
將編譯轉換好後的全部.JS文件覆蓋同名文件便可
將node_modules
目錄也要上傳到服務器
結果使用Chrome 44版本出現異常:Uncaught ReferenceError: require is not defined
一次性解決項目中全部JS文件裏"可能出現的同類型低版本不兼容致使的異常"
不修改原有UNI-APP的原有編譯流程
只在最終發佈後的H5版本基礎上再次處理便可.
增長下發文件數量
略微增長原JS文件的大小
須要使用JS 相關 壓縮minify工具再次壓縮.
本來發布的JS文件都壓縮的狀態, 從新編譯轉換後被格式化了,增長了大量換行和空格.
發佈時須要將node_modules
目錄也要上傳到服務器
node_modules
目錄尺寸很大,很雜
使用 VSCode 打開D:\Program Files\HBuilderX\Bin\plugins\uniapp-cli
目錄
修改babel配置項uniapp-cli\babel.config.js
修改前
module.exports = { presets: [ [ '@vue/app', { useBuiltIns: process.env.UNI_PLATFORM === 'h5' ? 'usage' : 'entry' } ] ] }修改後
module.exports = { presets: [ [ '@vue/app', { useBuiltIns: 'entry' } ] ] }修改緣由:
編譯後[始終]會添加代碼到
main.js
文件的第一行.//如下爲編譯後[始終]添加到第一行的代碼. //node_modules\@dcloudio\vue-cli-plugin-uni\lib\configure-webpack.js:215行 import 'uni-pages';import 'uni-h5';import '@dcloudio/uni-stat'; import Vue from 'vue'查看
node_modules\@dcloudio\vue-cli-plugin-uni\lib\configure-webpack.js:215行
let useBuiltIns = 'entry' if (process.env.UNI_PLATFORM === 'h5') { // 兼容舊版本 h5 useBuiltIns = 'usage' try { const babelConfig = require(path.resolve(process.env.UNI_CLI_CONTEXT, 'babel.config.js')) useBuiltIns = babelConfig.presets[0][1].useBuiltIns } catch (e) {} } let beforeCode = '' if (process.env.UNI_PLATFORM === 'h5') { beforeCode = (useBuiltIns === 'entry' ? `import '@babel/polyfill';` : '') + `import 'uni-pages';import 'uni-${process.env.UNI_PLATFORM}';` }發現本來的H5模式下配置
useBuiltIns
永遠等於usage
因此只要修改
uniapp-cli\babel.config.js
讓其等於entry
便可間接的添加@babel/polyfill
從而解決兼容性問題.參考資料:
添加到
vue.config.js
中的transpileDependencies
選項。這會爲該依賴同時開啓語法語法轉換和根據使用狀況檢測 polyfill。
usage
會根據配置的瀏覽器兼容,以及你代碼中用到的 API 按需添加
entry
會自動根據browserslist
替換成瀏覽器不兼容的全部polyfill
Babel 編譯一般會排除 node_modules,因此
"useBuiltIns": "usage"
存在風險,可能沒法爲依賴包添加必要的polyfill
。
修改browserslist
兼容性uniapp-cli\package.json
原始值:
"browserslist": [ "last 3 versions", "Android >= 4.4", "ios >= 8" ],修改後
"browserslist": [ "Android >= 4.0", "ios >= 7" ],參考資料:
- GitHub - browserslist/browserslist: 璉 Share target browsers between different front-end tools, like Autoprefixer, Stylelint and babel-preset-env
defaults
: Browserslist’s default browsers (> 0.5%, last 2 versions, Firefox ESR, not dead
).- 瀏覽器兼容性 | Vue CLI
疑惑點:
爲啥做爲
uniapp-cli
項目的package.json
會最終影響到 我的的項目 發佈時的browserslist
配置.初步猜想: VUE-CLI 工具向上找配置文件時,最終找到了它? 那麼有沒有可能試用 我的項目 裏的配置?
惋惜UNI-APP的picker
內置組件沒法使用,點擊沒有任何效果,並且沒有任何報錯信息.
不須要修改項目自己源碼
只須要修改的是編譯工具的源碼和配置便可.
理論上一次性解決項目中全部JS文件裏"可能出現的同類型低版本不兼容致使的異常"
一次修改,將來的項目也能一勞永逸
除非HBuilderX 發佈新版本,而後修改的源碼和配置被覆蓋了.
picker
內置組件沒法使用,點擊沒有任何效果,並且沒有任何報錯信息.每天模擬器 v3.2.7 Android v6.0.1
下肢地址: 每天模擬器官網
Chrome 44
Uncaught TypeError: Object.assign is not a function
🚨 As of Babel 7.4.0, this package has been deprecated in favor of directly including core-js/stable (to polyfill ECMAScript features) and regenerator-runtime/runtime (needed to use transpiled generator functions):
import "core-js/stable";
import "regenerator-runtime/runtime";
package.json 文件裏的 browserslist 字段這個值會被 @babel/preset-env 和 Autoprefixer 用來肯定須要轉譯的 JavaScript 特性和須要添加的 CSS 瀏覽器前綴。
如今查閱這裏瞭解如何指定瀏覽器範圍
babel-preset-es2015 -> babel-preset-env · Babel
By targeting specific browsers, Babel can do less work so you can ship native ES2015+ 😎!
對阿里巴巴開源的babel-plugin-import項目的註解 - JavaScript開發社區 | CTOLib碼庫
在 Babel 配置中引入該插件,能夠針對 antd, antd-mobile, lodash, material-ui等庫進行按需加載.
vue.config.js 是一個可選的配置文件,若是項目的根目錄中存在這個文件,那麼它會被自動加載,通常用於配置 webpack 等編譯選項,具體規範參考:vue-config.js
支持狀況HBuilderX 2.1.5 及以上版本
部分配置項會被編譯配置覆蓋
使用了babel但報錯object.assign is not a function | zj-john's blog
Babel默認只轉換新的JavaScript句法(syntax),而不轉換新的API,好比Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise等全局對象,以及一些定義在全局對象上的方法(好比Object.assign)都不會轉碼。若是想讓這個方法運行,必須使用babel-polyfill
Object.assign
should be polyfilled. So there are two ways to solve this problem:
- Add
babel-plugin-transform-object-assign
following the next steps- Use an npm module like
object-assign
the first option is better
Uncaught TypeError: Object.assign is not a function · Issue #243 · reactGo/reactGo
Google Chrome 44 get the JavaScript error
Uncaught TypeError: Object.assign is not a function
transform Object.assign for browsers lacking support by psimyn · Pull Request #257 · reactGo/reactGo
fix: … will transform to Object.assign by buble by galenyuan · Pull Request #860 · ElemeFE/mint-ui
把
...
特性降級爲merge自定義合併函數, 防止Buble將其轉換爲Object.assign
報錯:Object.assign不是一個函數怎麼解決? - meto的回答 - SegmentFault 思否
能夠參考這個:
http://babeljs.io/docs/usage/...
vue項目使用手機瀏覽器訪問時報錯:Uncaught TypeError: Object.assign is not a function - 勿忘初心的博客 - CSDN博客
解決方案1:在 webpack.config.js 文件中,entry 入口處修改,加入便可
解決方案2:不修改webpack的狀況下,在你的主入口文件頭部加入,例如:app.js中加入便可
import 'babel-polyfill' 或者 require('babel-polyfill');
異常信息:
chunk-vendors.780a8936.js:7 RangeError: Maximum call stack size exceeded at ie (chunk-vendors.780a8936.js:7) at ee (chunk-vendors.780a8936.js:7) at ne (chunk-vendors.780a8936.js:7) at Si.An.t.$emit (chunk-vendors.780a8936.js:7) at i.a.config.errorHandler (chunk-vendors.780a8936.js:1) at ie (chunk-vendors.780a8936.js:7) at ee (chunk-vendors.780a8936.js:7) at ne (chunk-vendors.780a8936.js:7) at Si.An.t.$emit (chunk-vendors.780a8936.js:7) at i.a.config.errorHandler (chunk-vendors.780a8936.js:1) chunk-vendors.780a8936.js:7 TypeError: e.__call_hook is not a function at o (chunk-vendors.780a8936.js:1) at Si.s (chunk-vendors.780a8936.js:1) at ne (chunk-vendors.780a8936.js:7) at Si.An.t.$emit (chunk-vendors.780a8936.js:7) at i.a.config.errorHandler (chunk-vendors.780a8936.js:1) at ie (chunk-vendors.780a8936.js:7) at ee (chunk-vendors.780a8936.js:7) at ne (chunk-vendors.780a8936.js:7) at Si.An.t.$emit (chunk-vendors.780a8936.js:7) at i.a.config.errorHandler (chunk-vendors.780a8936.js:1) chunk-vendors.780a8936.js:1 [system] TypeError: Cannot read property 'meta' of undefined at a.showTabBar (chunk-vendors.780a8936.js:1) at ni.get (chunk-vendors.780a8936.js:7) at ni.evaluate (chunk-vendors.780a8936.js:7) at a.showTabBar (chunk-vendors.780a8936.js:7) at a.o (chunk-vendors.780a8936.js:1) at a.t._render (chunk-vendors.780a8936.js:7) at a.i (chunk-vendors.780a8936.js:7) at ni.get (chunk-vendors.780a8936.js:7) at new ni (chunk-vendors.780a8936.js:7) at jn (chunk-vendors.780a8936.js:7)
將打開的網址裏的多出來的分隔符去掉便可.
例如:本來是http://127.0.0.1:8888
//H5/dist/index.html
修改成http://127.0.0.1:8888/H5/dist/index.html
就正常了.
只有 IP:Port
與 Path
之間的分隔符
不能是重複的.
Path
裏假如存在重複分隔符則沒有任何問題.
例如:http://127.0.0.1:8888/H5//dist//index.html
就是正常的.
Taro 是一套遵循 React 語法規範的 多端開發 解決方案。
- 使用 Taro,咱們能夠只書寫一套代碼,再經過 Taro 的編譯工具,將源代碼分別編譯出能夠在不一樣端(微信/百度/支付寶/字節跳動小程序、H五、React-Native 等)運行的代碼。
Taro 1.3重磅發佈:全面支持JSX語法和Hooks | 前端之巔
Taro 1.3 是咱們醞釀最久的版本:經歷了橫跨 6 個月的開發時間,近 2000 次的代碼提交,近百位開發者的共同參與。咱們終於在今天驕傲地發佈了 Taro 1.3。
Taro 1.3 的特性包括但不限於:
- 支持快應用和 QQ 小程序的開發
- 全面支持 JSX 語法和 React Hooks
- 大幅提升 H5 性能和可用性
- Taro Doctor
咱們評測了5個主流跨端框架,這是它們的區別? 跨端框架全面測評,你選哪一個?
- 若是不介意嚐鮮和學習 DSL 的話,徹底能夠嘗試 WePY 2.0 和 chameleon ,一個是醞釀了好久的 2.0 全新升級,一個有專門針對多端開發的多態協議。
- uni-app 和 Taro 相比起來就更像是「水桶型」框架,從工具、UI 庫,開發體驗、多端支持等各方面來看都沒有明顯的短板。
- 而 mpvue 因爲開發一度停滯,如今看來各個方面都不如在小程序端基於它的 uni-app 。
新框架太多學不完?chameleon 來拯救這一切 | 前端之巔
- chameleon 基於對跨端工做的積累, 規範了一套跨端標準,稱之爲 MVVM+ 協議;開發者只須要按照標準擴展流程,便可快速擴展任意 MVVM 架構模式的終端。並讓已有項目無縫運行新端。因此若是你但願讓 chameleon 快速支持淘寶小程序、React Native?只需按標準實現便可擴展。
如今開發 APP 用 weex 好仍是 Vue+ NativeScript 好 - V2EX
封裝 weex 的 eros 真心好用
weex 一個傳說級巨坑-- 2018最新版weex踩坑指南(weex navigator 多界面跳轉) - Jupiterxx的博客 - CSDN博客
2018年04月21日 12:47:10
先說結論,本人極度很是不推薦weex做爲任何商用開發
eros 是基於 weex 封裝面向前端的 vue 寫法的解決方案,因爲 app 開發的特殊性,eros 則更偏重關心於整個 app 項目。
但目前咱們並不支持開發代碼兼容 web 端
>* Android 4.1 (API 16)
>* iOS 8.0+
>* WebKit 534.30+
- 是一套專門爲 Weex 前端開發者打造的一套高質量UI框架。爲了達到更好的效果,請在 WeexSDK 0.11.0 + 上使用這套UI框架。BUI-Weex致力於爲iOS和android平臺提供豐富的UI組件,幫助開發者快速構建移動應用。
- 專一於 iOS, android 的效果,對於 PC瀏覽器的適配目前還沒有作到所有兼容,能夠簡單的預覽
拉美獨角獸Nubank:爲何用Flutter作移動開發很酷? | 拉美獨角獸Nubank:爲何用Flutter作移動開發很酷?
- Kotlin Native 是惟一不提供 UI 抽象的平臺,所以它依賴於 Android 平臺進行開發和測試。雖然它在咱們的最低優先級標準中得分較高,並且沒有明顯功能限制或應用商店上架限制的風險,但在測試對專家工程師的支持時,Kotlin Native 還不太適合咱們。
Kotlin + MVP + Flutter ,讓你能夠在本身的項目中集成 Flutter 並使用 - 掘金
demo 中的代碼實現,沒有考慮實際需求。個人 demo 實現,在 Android 端獲取接口數據,而後轉化成 json 格式,經過 Flutter 端的調用,以列表形式進行展現。
只是爲了驗證,android 和 flutter 混合開發,這條路是行得通的。
Flutter + Kotlin Multiplatform, Write Once Run Anywhere - 掘金
本文簡單演示瞭如何使用Flutter和Kotlin Multiplatform來達到Write Once Run Anywhere的效果。
總的來講,是因爲政策的限制,以及出於對性能和安全性的考慮,暫時不支持了熱更新?。
用跨平臺框架能夠只用一份代碼就適配全部平臺,省錢又省時。
基於JS的高性能Flutter動態化框架MXFlutter - 掘金
手機QQ看點團隊嘗試使用 Flutter,作爲iOS開發,一接觸到Flutter就立刻感覺到,Flutter 雖然強大,但不能像RN同樣動態化是阻礙咱們使用她的惟一障礙了
它是一個基於 Redux 數據管理的組裝式 flutter 應用框架, 特別適用於構建中大型的複雜應用。
它的最大特色是配置式組裝, 一方面將一個大的頁面,對視圖和數據層層拆解爲互相獨立的 Component|Adapter,上層負責組裝,下層負責實現,另外一方面將 Component|Adapter 拆分爲 View,Reducer,Effect 等相互獨立的上下文無關函數。因此它會很是乾淨,易編寫、易維護、易協做。
Fish Redux 的靈感主要來自於 Redux、React、Elm、Dva 這樣的優秀框架,而 Fish Redux 站在巨人的肩膀上,將集中,分治,複用,隔離作的更進一步。
GitHub - alibaba/fish-redux: An assembled flutter application framework.
fish-redux/README-cn.md at master · alibaba/fish-redux · GitHub
GitHub - reduxjs/redux: Predictable state container for JavaScript apps
使用JavaScript構建真正的本機移動應用程序
NativeScript 是由 Telerik 在 2014 年發佈的
Play and Try NativeScript on Your Device – {N} Playground
在線編輯器
使用 NativeScript 基於 JavaScript 構建原生應用 - 開源中國
- 教程展現瞭如何開始使用 NativeScript 建立一個簡單的移動應用。
- 沒有成熟的APP作靠山
- Native Script理念就是複用以前的類庫不管是js仍是native的,這個看下官方說明就知道了,github上代碼也很明確的體現了這個特色
- 學習的文章都不多,反之react native 就一堆
React Native開發工具推薦——VS Code及經常使用經常使用插件詳解 - qq_26585943的博客 - CSDN博客
推薦了多款 Visual Studio Code 經常使用插件.
React Native 已死? - CSDN資訊 - CSDN博客
Airbnb 棄用了 React Native
Xamarin, which is a great solution for cross-platform mobile development, didn’t help us on the web. We ultimately decided to build our new client on top of React JS and React Native.
A library for building cross-platform apps - ReactXP
GitHub - microsoft/reactxp: Library for cross-platform app development.
微軟已經開源免費Xamarin,爲何不少公司仍是選擇用React Native作跨平臺app開發? - 知乎
固然是由於微軟本身都不用 Xamarin 而用 React 啊
Xamarin, which is a great solution for cross-platform mobile development, didn’t help us on the web. We ultimately decided to build our new client on top of React JS and React Native.
A library for building cross-platform apps - ReactXP
GitHub - microsoft/reactxp: Library for cross-platform app development.
生態圈沒RN友好
缺各類開源工具及庫,缺經驗,缺成功案例,最關鍵,沒有大公司願意嘗試,培養不出人
Swift 是一門面向協議編程的語言呢
若是你以前寫過 Swift ,那麼看完此圖,分分鐘就能夠開啓 IDE 寫起 Kotlin代碼, 反之亦然。
一張圖,三分鐘,掌握 Swift & Kotlin - Android - 掘金
語言: 到目前爲止,有那麼多語言,每一個語言都在不一樣平臺上展現着本身的優點。
工程師: 擅長不一樣的語言,在不一樣平臺上去編碼。
做爲拿工具的咱們,能夠作到的是,掌握拿工具的姿式,在不一樣平臺環境下只是選擇更加合適的工具,去拿刀(Swift)仍是拿斧頭(Kotlin)而已。語言是用來駕馭的,千萬不要被語言牽着鼻子走。
平臺特定的聲明: Platform-Specific Declarations - Kotlin Programming Language
- Multiplatform projects are an experimental feature in Kotlin 1.2 and 1.3. All of the language and tooling features described in this document are subject to change in future Kotlin versions.
- Kotlin provides a mechanism of expected and actual declarations
官方例子: Multiplatform Project: iOS and Android - Kotlin Programming Language
Building Multiplatform Projects with Gradle - Kotlin Programming Language
Building universal frameworks
merged into a single universal (fat) binary using the lipo utility,can be used on both 32-bit and 64-bit devices.
Kotlin/Native as an Apple Framework - Kotlin Programming Language
In this tutorial, we will look at how to use Kotlin/Native code from Objective-C and Swift applications on macOS and iOS. We will build a framework from Kotlin code.
In this tutorial we'll:
- create a Kotlin Library and compile it to a framework
- examine the generated Objective-C and Swift API code
- use the framework from Objective-C and Swift
- Configure Xcode to use the framework for macOS and iOS
用Kotlin的Anko庫優雅開發Android應用--Anko庫詳細教程 - 掘金
Anko是Kotlin官方開發的一個讓開發Android應用更快速更簡單的Kotlin庫,而且能讓咱們書寫的代碼更簡單清楚更容易閱讀。它包括多個部分
Anko Commons: a lightweight library full of helpers for intents, dialogs, logging and so on;
Anko Layouts: a fast and type-safe way to write dynamic Android layouts;
Anko SQLite: a query DSL and parser collection for Android SQLite;
Anko Coroutines: utilities based on the kotlinx.coroutines library.
Kotlin基礎:白話文轉文言文般的Kotlin常識 - 掘金
Kotlin 資源大全 - 學 Kotlin 看這一篇教程就夠了 - 掘金
爲了讓你們更快了解和上手 Kotlin,掘金技術社區爲你們整理了這份 Kotlin 資源大全,但願能夠幫助你們用最短期學習 Kotlin.
最後更新於 2017.5.19開源社區持續更新版本:
忘了RxJava吧—擁抱Kotlin協程(Part 1/2) - 知乎
kotlin的suspend關鍵字比c#/JavaScript的async await要乾淨的多。問下使用kotlin能避免rxjava中異常堆棧信息沒用的問題嗎?
基於KotlinMultiPlatform構建跨平臺項目 - 掘金
Kotlin/Native 是一種將 Kotlin 代碼編譯爲無需虛擬機就可運行的原生二進制文件的技術。 它是一個基於 LLVM 的 Kotlin 編譯器後端以及 Kotlin 標準庫的原生實現。
LLVM
是一種編譯器基礎結構,它基於具備可從新定位性的三階段設計的概念。簡單來講,這意味着能夠爲具備LLVM後端編譯器的任何目標編譯具備前端LLVM編譯器的任何語言。(Swift能夠編譯Android工程也是基於LLVM實現)
kotlin 很不少語言很相似,目前我知道的像js,像switf,像go,還有像go dart的協程特性,感受就是java的高級版,集成目前語言的優勢,值得一學,還有flutter也相對簡單,有空能夠兩個都學
關注重點,仍然是開發出完整並且穩定的 Kotlin/ 多平臺方案。
其次,則是提升 Kotlin/Native 的編譯性能。
雖然尚處於預覽版本,但不少人已經開始使用 Kotlin/Native 以及 Kotlin/ 多平臺
:對我來講,Flutter 仍將在其小衆市場中獲得應用,其中 React Native 是最主要的用例:你們可以在短期內建立出小巧簡單,但又外觀漂亮的應用程序。此外,當應用程序的大小不過重要,且沒有後續開發計劃的狀況時(例如會務類應用程序),那麼熟悉 Web 框架但又不怎麼了解 Kotlin 或者 Swift 的開發者,確實更適合選擇 Flutter。
:但在我看來,若是你們關注應用程序的邏輯,那麼不妨僅在 UI 部分使用 Flutter,並選擇 Kotlin/ 多平臺直接編寫業務邏輯部分。接下來,你們能夠輕鬆從 Flutter 遷移至 Swift 及 Kotlin 等原生語言。例如,當初創企業得到成功,那麼接下來對應用程序的使用需求就會不斷增加。
Kotlin 方案提供理想的靈活性,所共享邏輯的百分比能夠隨時間變化,並根據您的實際需求調整。
- Kotlin 優先型 API 將帶來更強大的表達能力與功能水平。
- Kotlin 目前正是 JetBrains 的高優先級項目
可以解決 Java 痛點(例如語法冗長以及可空性)等問題的面向 Java 平臺的現代語言。
GitHub - google/j2objc: A Java to iOS Objective-C translation tool and runtime.
- 下載最新發布版本: 1.05 GB?!!
- Only support client-side development
- Only support business logic code, and stay far, far away from user interface APIs