电容节点.js插件
用于运行的电容插件 节点.js 在移动应用程序中。[^1][^2]
特征
Capacitor Node.js插件是Capacitor apps中运行Node.js最完整的解决方案之一. 以下是一些关键特征:
- 🖥️ 跨平台: 支持Android和iOS.
- 🚀 节点.js 运行时间: 基于 移动应用程序的节点.js。 。 。 .
- 🧵 背景线程:在专用背景线上运行节点.js引擎以避免阻塞UI.
- 🔁 双向通信:基于事件的信息在Capacitor app和Node.js运行时间之间传递.
- 📦 npm 生态系统: 使用不兼容浏览器并依赖Node.js核心模块的npm包.
- 🛠️ 可配置:以自定义参数,环境变量和脚本自动或手动启动节点.js运行时间.
- 🤝 兼容性: 与 背景任务, (中文(简体) ), SQL 点 财务报告和审定财务报表 齐普 插件 .
- 🔁 最新数据:总是支持最新的Capacitor版本.
缺少一个功能? 刚刚 打开一个问题 我们看看!
使用大小写
节点Js插件通常在应用程序需要只有节点Js生态系统提供的功能时使用,例如:
- 仅节点.js 库: 使用不兼容浏览器的npm包,因为它们依赖于Node.js核心模块.
- 代码再使用:在您的移动应用程序中重新使用已存在的Node.js代码,而不是为浏览器重写.
- 背景处理: 卸载重活到Node.js引擎,该引擎运行在专用背景线上而不会阻断UI.
- 当地数据处理: 使用 Node.js runtime提供的可写目录处理和坚持设备数据.
兼容性
| 插件版本 | 电容版本 | 状态 |
|---|---|---|
| 0.0.x (韩语) | >=8.x.x | 积极支持 |
演示
可以找到一个实例 这里。 。 。 .
安装
你可以用我们的 AI 辅助设置 以安装插件. 添加数据 超级技能 至您的 AI 工具,使用以下命令:
npx skills add capawesome-team/skills --skill capacitor-plugins
然后使用下列提示:
Use the `capacitor-plugins` skill from `capawesome-team/skills` to install the `@capawesome/capacitor-nodejs` plugin in my project.
如果你喜欢 手动设置,通过运行以下命令来安装插件,并遵循下面的平台特定指令:
npm install @capawesome/capacitor-nodejs
npx cap sync
请注意: 此插件嵌入 移动应用程序的节点.js 运行时间 二进制 。 二进制不包含在npm软件包中,而是按要求下载:Android二进制由Gradle架构下载,iOS二进制期间下载 npm install (只在macOS上). 设定 CAPACITOR_NODEJS_SKIP_DOWNLOAD 环境变量改为 1 以跳过 iOS 下载.
机器人
变量
如果需要, 您可以在您的应用程序中定义以下工程变量 variables.gradle 要使用不同运行时间二进制的文件 :
$nodejsMobileAndroidUrl下载 Android 运行时二进制的 URL( 默认: GitHub 发布)18.20.4-capawesome.3页:1 16 KB 页面大小兼容构建(中文(简体) )$nodejsMobileAndroidSha256Android 运行时二进制下载的 SHA-256 检查和( 默认: 检查和默认下载)
iOS系统
此插件目前仅支持 Swift 软件包管理器. CocoaPods 不支持 .
如果安装有已禁用生命周期脚本的依赖性(例如. npm install --ignore-scripts),iOS运行时二进制不自动下载. 在此情况下, 在构建您的应用程序前手动运行下载脚本 :
node node_modules/@capawesome/capacitor-nodejs/scripts/postinstall.js
配置
| Prop | 类型 | 说明 | 默认 | 自兹 |
|---|---|---|---|---|
nodeDir | string | 相对于 Capacitor 的 Node.js 项目目录 webDir。只在Android和iOS上提供. | 'nodejs' | 0.0.1 资源 |
startMode | 'manual' | 'auto' | 节点.js运行时间的启动模式. 如果设置为 auto,当应用程序启动时,节点.js运行时间会自动启动. 如果设置为 manual时,必须使用 start(...) 方法。 仅在Android和iOS上提供. | 'auto' | 0.0.1 资源 |
实例
单位 capacitor.config.json数字 :
{
"plugins": {
"Nodejs": {
"nodeDir": 'custom-nodejs',
"startMode": 'manual'
}
}
}
单位 capacitor.config.ts数字 :
/// <reference types="@capawesome/capacitor-nodejs" />
import { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = {
plugins: {
Nodejs: {
nodeDir: 'custom-nodejs',
startMode: 'manual',
},
},
};
export default config;
使用量
以下例子展示了如何设置Node.js项目,在Node.js和Capacitor app之间沟通,手动启动运行时间,等待其准备,并与它交换消息.
建立Node.js项目
插件运行位于 nodejs 目录(参见 nodeDir 配置选项) webDir。确保您的网页将 Node.js 项目输出到此目录,例如将其放置在 public 您的网络工程目录 :
my-app
├── capacitor.config.json // webDir: 'dist'
└── src
└── public
└── nodejs
├── package.json
└── index.js
这个 package.json node.js 工程的文件定义了要运行的脚本文件 main 字段 :
{
"name": "nodejs-project",
"version": "1.0.0",
"main": "index.js"
}
与来自Node.js的 Capacitor app 通信
脚本文件内部( E)index.js 在此例子中 bridge 模块为 Capacitor app 提供通信通道:
const { app, channel } = require('bridge');
// Receive messages from the Capacitor app.
channel.on('my-event', (...args) => {
// Send messages to the Capacitor app.
channel.post('my-response', 'Hello from Node.js!');
});
// Get a writable directory for persistent file storage.
const dataDir = app.datadir();
// Listen for app lifecycle events.
app.on('pause', pauseLock => {
pauseLock.release();
});
app.on('resume', () => {});
请注意:Node.js项目目录可能在应用程序更新期间被覆盖. 在返回的目录中存储持久性数据 app.datadir()。 。 。 .
手动启动节点运行时间
默认情况下,"节点"(Node.js runtime)在应用程序启动后自动启动. 如果 startMode 配置选项设置为 manual,从自定义参数、环境变量和脚本开始:
import { Nodejs } from '@capawesome/capacitor-nodejs';
const start = async () => {
// Only available if the `startMode` configuration option is set to `manual`.
await Nodejs.start({
args: ['--option', 'value'],
env: { MY_ENV_VAR: 'value' },
script: 'custom-main.js',
});
};
等待节点运行时间准备好
节点js运行时间在节点js项目要求完成后即被视为已准备好 bridge 模块。 检查当前状态为 isReady() 或听为 ready 事件:
import { Nodejs } from '@capawesome/capacitor-nodejs';
const isReady = async () => {
const { ready } = await Nodejs.isReady();
return ready;
};
const addReadyListener = async () => {
await Nodejs.addListener('ready', () => {
console.log('The Node.js runtime is ready.');
});
};
与 Node.js 运行时间交换消息
一旦Node.js的运行时间准备好,就向它发送消息,并收听从它收到的消息:
import { Nodejs } from '@capawesome/capacitor-nodejs';
const send = async () => {
await Nodejs.send({
eventName: 'my-event',
args: ['Hello from Capacitor!'],
});
};
const addMessageListener = async () => {
await Nodejs.addListener('message', event => {
console.log('Received message:', event.eventName, event.args);
});
};
使用 npm 软件包
要使用 npm 软件包, 请运行 npm install --omit=dev 在构建您的网络项目之前, 在 Node.js 项目目录中 。 建议将Node.js项目捆绑成一个文件(例如: 兴建)改善起步时间.
API 密码
isReady()send(...)start(...)addListener('message', ...)addListener('ready', ...)removeAllListeners()- 接口
- 类型异名
已读取( E)
isReady() => Promise<IsReadyResult>
检查Node.js运行时间是否准备好接收消息 .
节点js运行时间在节点js项目完成后即被视为就绪
已经要求 bridge 模块.
仅在Android和iOS上提供.
回返情况: Promise<IsReadyResult>
自: 0.0.1 资源
发送(...)
send(options: SendOptions) => Promise<void>
发送消息给节点.js运行时间.
这种方法只有在Node.js运行时间准备好时才可用.
使用 isReady() 方法或该方法 ready 检查是否为
节点.js运行时间准备好了.
仅在Android和iOS上提供.
| 参数 | 类型 |
|---|---|
options | SendOptions |
自: 0.0.1 资源
启动(...)
start(options?: StartOptions | undefined) => Promise<void>
手动启动节点运行时间 .
只有在 startMode 配置选项
设置为 manual。 。 。 .
请注意: 节点 发射 不支持停止并重新启动 Node.js 运行时间 .
仅在Android和iOS上提供.
| 参数 | 类型 |
|---|---|
options | StartOptions |
自: 0.0.1 资源
添加 listener('message',...)
addListener(eventName: 'message', listenerFunc: (event: MessageEvent) => void) => Promise<PluginListenerHandle>
当收到Node.js运行时间发来的消息时调用.
仅在Android和iOS上提供.
| 参数 | 类型 |
|---|---|
eventName | 'message' |
listenerFunc | (event: MessageEvent) => void |
回返情况: Promise<PluginListenerHandle>
自: 0.0.1 资源
添加倾听器( 已准备好,...)
addListener(eventName: 'ready', listenerFunc: () => void) => Promise<PluginListenerHandle>
当Node.js运行时间准备好接收消息时调用.
仅在Android和iOS上提供.
| 参数 | 类型 |
|---|---|
eventName | 'ready' |
listenerFunc | () => void |
回返情况: Promise<PluginListenerHandle>
自: 0.0.1 资源
删除所有收听器( )
removeAllListeners() => Promise<void>
删除此插件的所有听众 .
自: 0.0.1 资源
接口
正在读取结果
| Prop | 类型 | 说明 | 自兹 |
|---|---|---|---|
ready | boolean | 节点.js运行时间是否准备好接收消息. | 0.0.1 资源 |
发送选项
| Prop | 类型 | 说明 | 自兹 |
|---|---|---|---|
args | MessageArg[] | 要发送到 Node.js 运行时的参数 . | 0.0.1 资源 |
eventName | string | 发送到 Node.js 运行时间的事件名称 . | 0.0.1 资源 |
开始选项
| Prop | 类型 | 说明 | 默认 | 自兹 |
|---|---|---|---|---|
args | string[] | 传递给Node.js进程的论点. | 0.0.1 资源 | |
env | { [key: string]: string; } | 为Node.js进程设置的环境变量. | 0.0.1 资源 | |
script | string | 运行的脚本文件的路径,相对于节点.js项目目录. | The | 0.0.1 资源 |
插件听筒
| Prop | 类型 |
|---|---|
remove | () => Promise<void> |
信件事件
| Prop | 类型 | 说明 | 自兹 |
|---|---|---|---|
args | MessageArg[] | 从Node.js运行时收到的论据. | 0.0.1 资源 |
eventName | string | 活动名称从Node.js runtime收到. | 0.0.1 资源 |
类型异名
信件标记
与 Node.js 运行时交换消息的单个参数 .
价值必须是JSON的可连载性.
string | number | boolean | null | MessageArg[] | { [key: string]: MessageArg }
限制
基础 移动应用程序的节点.js 运行时间有一些限制,您应该知道:
- 单一实例:Node.js运行时间只能在每次应用发布后启动. 不支持停止和重新启动运行时间 .
- 无儿童流程编号:
child_process在移动平台上不支持模块. - IOS上没有JIT: 在iOS上,JavaScript引擎运行时只使用解释器模式(没有JIT编译),这导致JavaScript执行比Android慢.
- 应用程序大小:嵌入Node.js runtime使应用程序大小每CPU架构增加数十兆字节.
- 原生添加剂: Node.js 原生添加剂只有在作为预建物提供时才在Android上得到支持(见
node-gyp-build)用于目标建筑. process.exit()调用process.exit()app Store准则不允许这样做.
财务问题
支持哪个节点.js版本 ?
该插件目前运行节点.js 18.20.4,最新版本可从 移动应用程序的节点.js. 支持更新的Node.js版本需要自建的移动平台运行时间二进制,我们正在对此进行评估.
为什么没有 stop() 方法吗?
基本的运行时间只支持每个应用启动一个单一的Node.js实例,并且没有提供API来阻止或重启. A 类 stop() 因此,方法会让应用程序处于Node.js在应用程序重新启动前永远无法启动的状态. 如果您需要在节点运行时停止工作,请发送信息(例如 a) shutdown )并让您的节点.js代码停止它的服务器和定时器。 闲置的运行时间消耗的资源微不足道.
在Node.js项目中,我应该在哪里存储持续的数据?
在返回的目录中存储持久性数据 app.datadir() 内置 bridge 模块。 节点.js工程目录本身可能在应用更新期间被覆盖,所以那里所写的任何文件都可以丢失.
为什么JavaScript执行iOS比Android慢?
在iOS上,JavaScript引擎在没有JIT编译的情况下只以解释器模式运行,这导致JavaScript执行比Android慢. 这是对移动Apps运行时间的基本节点.js的限制. 见 限制 详细情况.
我能用这个插件吗? 有Ionic、React、Vue或Angular?
是的,插件是框架不可知的。 它在任意网络框架的Capacitor app中工作,包括有Angular,React,或Vue的Ionic,以及平版JavaScript等项目.
相关插件
通讯
随时更新有关卡帕韦索姆、Capacitor和Ionic生态系统的最新消息和最新消息,因为我们 《卡帕索克通讯》。 。 。 .
更改日志
见 变动情况。 。 。 .
许可证
见 自由主义。 。 。 .
嵌入式Node.js运行时间及其捆绑的依赖(V8, OpenSSL, ICU, libuv等)根据自己的许可证进行分配. 见 节点Js许可证。 。 。 .
[^1]: 本项目不附属于OpenJS基金会或其任何子公司或子公司,不获其认可、赞助或批准.
[^2]: Node.js 是OpenJS基金会的注册商标.