NodeKit 0.8.12

NodeKit 0.8.12

测试已测试
Language语言 SwiftSwift
许可证 自定义
发布最新发布2017年2月
SwiftSwift 版本2.3
SPM支持 SPM

NodeKit 维护。



NodeKit 0.8.12

  • OffGrid Networks

http://nodekit.io {NK} NodeKit 是一个通用的、开源的嵌入式引擎,它为 macOS、iOS、Android、Fire OS 和 Windows 桌面和移动应用程序提供了一个完整的 Node.js 实例。

对于应用程序开发者,后端可以用纯 Node javascript 代码编写,前端可以用您选择的任何架构,包括但不限于 Atom Electron API、Facebook React、Express 等。

{NK} NodeKit 允许为 Node 开发的应用程序一次开发,然后在不进行任何修改的情况下在上述任何平台以及浏览器中运行。

此存储库 nodekit-io/nodekit-darwin 包含了特定于 Apple 平台的组件(包括 iOS、OSX 和 tvOS)。

有关 Windows 平台的相应存储库,请参阅 nodekit-io/nodekit-windows(包括 Windows 7+ 桌面、Windows 10 桌面、Windows 10+ 移动、Xbox、SurfaceHub 和物联网设备系列)

有关 Android 平台的相应存储库,请参阅 nodekit-io/nodekit-android

{NK} NodeKit

示例应用程序(使用命令行工具)

注意:即将推出命令行工具

npm install nodekit -g 
nodekit create myapp io.nodekit.myapp myapp
cd myapp
nodekit platform add ios
nodekit platform add macos
nodekit build
nodekit run macos

测试和示例应用程序(完整构建)

测试直接嵌入为一个 {NK} NodeKit 应用程序。{NK} NodeKit 作为一个纯 Swift 2.x 的项目很棒的一点是它没有外部依赖。

git clone https://github.com/nodekit-io/nodekit.git

在 Xcode 中打开 src/nodekit.xcodeproj。您将看到 4 个构建目标,其中 2 个用于框架(分别用于 iOS 和 OSX)、2 个用于示例应用程序。

为 My Mac 构建 nodekit-Mac-sample 或为 iOS 模拟器(例如 iPhone 6)构建 nodekit-iOS-sample 并运行。

您应该会看到一个漂亮的聊天应用程序,它将自动调整大小以适应设备大小,并且在所有平台上都能正常运行而无需更改。

简单配置

在 main.swift 中添加两行代码以启动内嵌的 WebKit 视图并启动 NodeKit 引擎(已经在示例中为您准备好了)。

import NodeKit
NKNodeKit.start();

确保任何标准Node应用程序位于app/目录中。此应用程序将在main进程中运行(一个隐藏但高性能的JavaScript引擎,如Nitro WKWebView或JavaScriptCore)。应用程序通常首先做的事情是打开一个renderer窗口,与Atom Electron非常相似

const app = require('electro').app;
const BrowserWindow = require('electro').BrowserWindow
app.on('ready', function() {
  var window = new BrowserWindow();
});

示例应用程序包含一个内置的Web服务器,用于提供静态和动态内容;在iOS上,这可以通过localhost端口上的http服务器实现,但在OSX上,你可能想完全不使用端口,只使用内置协议服务器。

在Xcode中为iOS和Mac目标构建。

{NK} NodeKit的主要三个组件

{NK} Scripting

{NK} Scripting是混合应用程序的高级JavaScript - 原生(Swift、Objective-C、.NET C#)桥梁。它建立在JavaScriptCore或ChakraCore等核心平台桥梁之上,但抽象了实现细节并标准化了甚至在同一平台上的多个脚本引擎家族(例如iOS上的Nitro WKWebView和UIWebViews)。它是{NK} NodeKit的基础,可以用而不需要{NK} Electro或{NK} Core,或者可以使用替代品。

{NK} Electro

{NK} Electro是针对{NK} NodeKit应用程序的API,用于简化应用程序生命周期和用户界面任务。它受到了Atom Electron API的启发,通常是一个更轻量但代码兼容的子集。它需要{NK} Scripting,但如果您不需要所有Node特性,只需要一种轻量级的方法来构建通用桌面和移动应用程序(有点像Cordova),并且希望使用{NK} Scripting功能,则无需{NK} Core。

{NK} Core

{NK} Core将上述功能更进一步,并为{NK} NodeKit应用程序提供了一种轻量级但功能齐全的Node版本。它利用Node所有JavaScript组件的原始Node源代码,但通常使用不同绑定以利用每个平台的内置JavaScript引擎(而不是V8引擎)。可能的话,将原生代码移至JavaScript。它需要{NK} Scripting,并且通常与{NK} Electro一起使用,但技术上可以用您自己的代码或插件替换{NK} Electro以打开和管理窗口生命周期。

分发

{NK} NodeKit存储库包含一个XCode项目,其中包含所有上述组件(无依赖项),可以编译为一个iOS 8 +和macOS 10.9 +动态框架。Windows 10和Android的版本正在积极开发中。

单框架文件(包含二进制代码和嵌入的资源,如核心Node.js JavaScript代码)可以直接包含在任何iOS或macOS应用程序中。请参阅示例应用程序以获取示例。您因此可以编译并创建自己的项目;实际上,没有应用商店的消费者真正需要知道您是如何构建的,除非您想告诉他们或修改{NK} NodeKit源代码。

它真的是Node吗?

YES 对于所有JavaScript部分(Node的大部分当然是用JavaScript编写的)。NO 对于所有的V8绑定。

我们将Node.js的源文件直接包含在NodeKit中(您可以在名为lib的文件夹中找到框架包中的这些文件)。然后,我们添加自己的绑定来替代V8本地绑定,尽可能用JavaScript编写,对于像套接字、定时器和文件系统这样的真正平台特定内容,用少量本地调用来实现。这些绑定与Node版本具有完全相同的API签名,因此可以替换插件。

这意味着大多数Node包将无需修改即可正常工作。对于那些需要与V8进行node-gyp本地绑定的包,将需要替代方案。

这与Cordova、Electron、CrossWalk、XWebView和NW有何关联?

实际上,我们借鉴了所有这些技术和类似的优秀项目Nodelike和Nodyn(它们都已不再维护)以及微软为ChakraCore提供的Node分支,通过重新编写到V8的绑定来实现。然而,我们尽可能多地使用了JavaScript代码。整个Node生态系统理论认为,JavaScript相当快,事实上,当我们像{NK} NodeKit使用的Nitro引擎那样编译时,它确实非常快。在本地和在JavaScript之间进行桥接通常会增加延迟,而我们希望避免这种情况,除非是必要的或者已经由新兴的HTML5/ES5/ES6特征完成。

然而,我们真正的动机并不是执行速度,我们不想在每个应用程序下载中包括一个大的48Mb可执行文件用于Chromium或其JavaScript引擎......因为大多数现代操作系统已经包含了一个ES5引擎。

因此,在iOS和macOS上,我们使用JavaScriptCore或Nitro...在Windows上,我们使用Chakra或ChakraCore...在Android和Linux上,我们使用Chromium/V8。Node JavaScript源代码可以在每个平台上运行(在某些情况下我们添加了一些polyfills),我们唯一需要编写(每个平台一次)的是绑定,而实际上只是核心四个(TCP套接字、UDP套接字、定时器和文件系统)。其他如缓冲区、加密等,则使用只有JavaScript的版本(好吧,对于一直跟到这里的人,实际上对于加密,我们只是不喜欢JavaScript引擎变体的随机生成器,所以我们深入到操作系统中为随机字节调用提供改进的安全性,没有OpenSSL依赖,只是本地平台)

调试

只需使用Safari Web Inspector来设置断点、检查变量等,无论是在JavaScriptCore和Nitro脚本引擎中(对于主进程)还是渲染进程的UI和JavaScript环境中。

支持

  • iOS 8+、9+、10+
  • macOS 10.9、10.10、10.11、10.12
  • Android 4.4+、5.0+、6.0+
  • Windows 10 Universal Platform(2015年10月更新或更高版本)
  • Node.js ~0.12.x

仍处于开发中

  • 桌面应用程序的Windows 7、Vista、8、8.1
  • Node.js 4.x/5.x更新(我们运行非常稳定的0.12.x版本以实现广泛的包兼容性,目前我们在开发分支中测试4.x LTS版本)。

许可

Apache 2.0

贡献(MasterFlow)

  • 仓库分支。
  • 有一个永恒的分支--master。
  • 所有其他分支(功能、发布、热修复等,我们需要的一切)都是临时的,仅用于方便与其他开发者共享代码以及作为备份措施。一旦它们上的更改合并到master分支后,它们就会被删除。
  • 功能主要是以保持历史线性为主集成到master分支的。
  • 发布过程与GitFlow类似。我们为发布创建一个新分支,从master中决定包含所有必要功能的点进行分叉。从那时起,新的工作始终推送到master分支,任何紧急的必要更改都推送到发布分支(尽量避免)。
  • 最后,一旦发布准备就绪,我们对发布分支的顶部进行打标签。因为只有一个永恒的分支,所以只有一个方法可以让您的发布永久版本化——那就是将发布分支合并到master,然后推送这个修改后的master分支。
  • 之后,发布期间所做的所有更改现在都属于master分支,发布分支被删除。
  • 热修复与发布非常相似,只是您不是从master上的任意提交分支,而是从您想进行修复的发布标签分支。同样,master上的工作如常进行,必要的修复推送到热修复分支。一旦修复就绪,过程与发布完全相同——在分支顶部打标签创建新的发布,将其合并到master,然后删除热修复分支。
  • 提交拉取请求。

GitHub上的相关仓库

我们选择了平台特定代码以允许在GitHub上按语言搜索,并适当显示(例如,Swift的趋势仓库、C#),允许对次要的平台特定更改有不同的版本号,并且由于仓库本质上不是相互依赖的,而是作为带有相同功能和API的补充语言端口。

新闻

  • (2017年2月) 更新NKElectro,以便自动根据package.json加载
  • (2017年1月) 为Darwin托管进行了一些小更新,并更新到Swift 2.3 / Xcode 8.0
  • (2016年10月) 为Android添加了命令行工具
  • (2016年9月) 初始Android发布(仅包括NKScripting和NKElectro)
  • (2016年3月) 添加了示例应用程序,一个美观的轻量级聊天应用程序,以突出如何使用 {NK} NodeKit
  • (2016年2月) 将平台版本分割成GitHub上的各自仓库
  • (2016年2月) NKScripting的首次发布使用Chakra引擎在Windows 10平台上;其他引擎正在路上
  • (2016年2月) 添加 roadmap 以跟踪贡献和未来的计划
  • (2016年2月) 删除了最后一段Objective-C和C代码;Darwin平台上的整个框架现在是纯粹的Swift 2.x,包括重写的POSIX套接字层,完全利用了GCD,是非阻塞的,且不包含外部依赖;我们可能会以{NK} Sockets的形式发布,虽然有大量的优秀的Objective-C库,但Swift版本的就更少(而且几乎没有没有附带微小C依赖的,而这种依赖我们已经消除了),我们不得不从几个互补来源拼凑出这个框架。
  • (2016年1月) 更新为使用所有核心Darwin JavaScript引擎,并将API与行业标准统一(例如,前端使用Electron子集,后端使用类似JavaScriptCore的技术)的过程中对{NK} Scripting、{NK} Electro以及相关的文档进行了重构。
  • (2015年12月) 对Swift 2.0进行了更新,并针对iOS和macOS进行了重构。
  • 主分支包含Node.js v0.12.x(运行中)。
  • Node.js V4.x分支可用,但并未进行加速开发。