NativeScript 簡介

> 承諾各位的原創文章來啦!

近來React的專利風波愈演愈烈,尋找替代方案也迫在眉睫。如果你只是使用React做Web版開發,那麼可以考慮遷移到Preact等替代技術,雖然仍然會有不少的工作量,不過已經算是成本最低的選擇了。但是,要注意,Facebook的BSD+專利的授權方式並不僅限於React,還有很多開源軟體也採用了同樣的許可協議,而其中之一就是Yoga(瑜伽),它很可能會是你繞不過去的坎。

你可能沒聽說過Yoga,但是提到ReactNative你肯定知道。Yoga就是ReactNative的Native布局引擎。也就是說,之所以你能不藉助Web技術就直接使用jsx寫界面,是因為Yoga等庫在幕後替你完成了桌面下的那一切。目前,在React體系內並沒有一個成熟的甚至僅僅嶄露頭角的Yoga替代品。

不過,也別擔心,在React體系之外,有一個更好的選擇。它已經與ReactNative分庭抗禮了很長時間,只是以前被Facebook的光芒遮蓋了,現在,當神之光芒褪去,讓我們把目光投向這位勇士 —— NativeScript。

什麼是 NativeScript ?

NativeScript是和React專利完全無關的一個開源庫,所以不用擔心它間接依賴React導致專利糾紛。事實上,它採用了乾乾淨淨的Apache 2.0協議,最初提醒廣大社區Facebook專利風險的就是Apache基金會,可以相信Apache協議與附帶專利的協議不兼容。

NativeScript的開發者是雖然在中國默默無聞,但其實已經專註於開發工具領域三十多年的Progress公司,雖然看起來不起眼,但它僅僅靠做開發工具就已經在納斯達克上市了。很多時候在特定領域最好的公司未必是最大的公司,比如JetBrain,比如Progress。

NativeScript,如其名所示,是用於開發Native程序的,也就是iOS和Android(甚至即將支持Windows Phone)上的原生應用。它自研了一個Native引擎,其作用與ReactNative相似,但工作原理很有創新性,特別是,它能夠直接訪問原生API,而不用藉助插件。這樣一來,實現一些簡單的功能就可以完全用js來寫了。

在架構上,NativeScript的Native引擎與應用引擎是分開的,事實上它們在Github上是兩個不同的Repository。NativeScript開發組自帶了一個Angular版本的應用引擎,但它並沒有綁死在Angular上,事實上它還提供了一個原生js版本,這就意味著,哪怕你沒有準備用Angular,也值得去學習一下NativeScript。

當然,NativeScript開發組和Angular開發組一直保持著非常良好的關係,在多次Angular大會上,NativeScript團隊都是重量級演講嘉賓,所以我們有理由相信他們官方提供的Angular實現在完成度、整合性等方面是最好的。不過,這並不妨礙你為自己喜歡的框架定製一份應用引擎 —— 甚至可以是基於Preact的,只要質量足夠高,我相信開發組會不吝於給你做強力推薦的。

NativeScript 會真心開源嗎?

會的,它會絕對遵守信譽。因為它就是靠向開發人員賣開發工具類的產品和服務維生的(這類公司往往服務才是收入的大頭兒),得罪開發人員就等於自殺,除非從上到下都瘋掉了,否則肯定不會自毀聲譽的。真誠對待開發者對它來說絕對不是可有可無的事情,而是生命線。

誰在用 NativeScript ?

最著名的例子是SAP,沒錯,就是那個著名的ERP軟體公司。它的企業應用建模器(Enterprise App Modeler)就是使用 NativeScript 開發的,他們還專門寫了一篇博客 blogs.sap.com/2017/05/2 來講這件事。有類似需求的同學們可以參考它。

除此之外,NativeScript還在網站上列舉了50多個基於NativeScript開發的(國外)著名產品。參見 nativescript.org/showca。感興趣的可以下載體驗一下。

要怎麼寫?

以使用Angular引擎的應用為例,它的代碼是這樣的:

import { Component } from "@angular/core";nn@Component({nselector: "my-app",ntemplate: `n<TextField hint="Email Address" keyboardType="email"n autocorrect="false" autocapitalizationType="none"></TextField>n<TextField hint="Password" secure="true"></TextField>nn<Button text="Sign in"></Button>n<Button text="Sign up for Groceries"></Button>n`n})nexport class AppComponent {}n

除了模板之外,剩下的部分和普通的Angular程序沒啥兩樣。而且我的一個建議已經被官方採納,他們的後續版本將直接支持angular-cli的ng g c等命令來自動生成組件。

NativeScript的缺點

首先,就算 NativeScript 再簡單,它仍然是Native技術,而不是Web技術,因此你一定要有 Native 的基本概念,不要期待它像普通的 Web 框架那麼簡單,有一部分複雜度是不能通過技術手段消除的。

其次,與ReactNative相比,NativeScript受到的關注度要小很多("只有" 11.1k 的star),因此社區資源暫時和ReactNative沒法比。相信Facebook專利風波的爆出,對NativeScript的生態圈是個利好消息。同時,對於廣大的開發者,這也是一個成為潛力股項目的Contributor的好機會。你可以為NativeScript做很多事,包括翻譯文檔、寫組件、寫插件、寫工具、提Feature Request、提Issue、提Pull Request、幫忙宣傳等等。

嗯,那個……說個事……

我已經準備翻譯它的官方文檔了,域名都買好了 <nscript.cn> 有人想報名參與嗎?要求不高,點贊數超100我就開工 ^_^ 。

最新消息

官方剛剛放出了一本免費的英文書,有450多頁,不用註冊即可下載:

Get the free 450 page book on building mobile apps with NativeScript

另外,把原來收費的一組專業組件也免費放出來了:

Professional features - UI for NativeScript

感謝劉珂提供線報。

看來NativeScript開發組是要玩一票大的啊,君子相時而動,這風格,我喜歡!

「來點大動作吧!」

============= 9-19 更新 ===========

沒想到昨天不到十二點就直接破百,現在已經衝到了300贊,各位放心,今晚就開工啦。我和葉志敏(Angular官方文檔的另一位翻譯者)會來組織這件事。

(報名已滿,隱去報名微信)

============= 9-19 二更 ===========

組了一個11人的團隊,開完了首次碰頭會,已經開始啦。


推薦閱讀:

為什麼很多人都是設計師轉前端?
矢量地理數據如何切片?
新年第一發--深入不淺出zepto的Tap擊穿問題
是什麼讓你在前端行業堅持下去,或者什麼讓你發現你是真的熱愛它?
開發者和用戶之間的世界觀距離有多大?

TAG:前端框架 | 前端开发 | ReactNative |