@capawesome/capacitor-nodejs

中文文档
0.2.0发布于 2026/10/15MITTypeScriptESM + CJS零依赖构建来源已验证近 30 天下载 2898

在Android和iOS上的移动应用程序中运行Node.js的Capacitor插件.

中文使用文档
文档目录36 节
  1. 特征
  2. 使用大小写
  3. 兼容性
  4. 演示
  5. 安装
  6. 机器人
  7. iOS系统
  8. 配置
  9. 实例
  10. 使用量
  11. 建立Node.js项目
  12. 与来自Node.js的 Capacitor app 通信
  13. 手动启动节点运行时间
  14. 等待节点运行时间准备好
  15. 与 Node.js 运行时间交换消息
  16. 使用 npm 软件包
  17. API 密码
  18. 已读取( E)
  19. 发送(...)
  20. 启动(...)
  21. 添加 listener('message',...)
  22. 添加倾听器( 已准备好,...)
  23. 删除所有收听器( )
  24. 接口
  25. 类型异名
  26. 限制
  27. 财务问题
  28. 支持哪个节点.js版本 ?
  29. 为什么没有 stop() 方法吗?
  30. 在Node.js项目中,我应该在哪里存储持续的数据?
  31. 为什么JavaScript执行iOS比Android慢?
  32. 我能用这个插件吗? 有Ionic、React、Vue或Angular?
  33. 相关插件
  34. 通讯
  35. 更改日志
  36. 许可证

电容节点.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 页面大小兼容构建(中文(简体) )
  • $nodejsMobileAndroidSha256 Android 运行时二进制下载的 SHA-256 检查和( 默认: 检查和默认下载)

iOS系统

此插件目前仅支持 Swift 软件包管理器. CocoaPods 不支持 .

如果安装有已禁用生命周期脚本的依赖性(例如. npm install --ignore-scripts),iOS运行时二进制不自动下载. 在此情况下, 在构建您的应用程序前手动运行下载脚本 :

node node_modules/@capawesome/capacitor-nodejs/scripts/postinstall.js

配置

Prop类型说明默认自兹
nodeDirstring相对于 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 密码

已读取( 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上提供.

参数类型
optionsSendOptions

自: 0.0.1 资源


启动(...)

start(options?: StartOptions | undefined) => Promise<void>

手动启动节点运行时间 .

只有在 startMode 配置选项 设置为 manual。 。 。 .

请注意: 节点 发射 不支持停止并重新启动 Node.js 运行时间 .

仅在Android和iOS上提供.

参数类型
optionsStartOptions

自: 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类型说明自兹
readyboolean节点.js运行时间是否准备好接收消息.0.0.1 资源

发送选项

Prop类型说明自兹
argsMessageArg[]要发送到 Node.js 运行时的参数 .0.0.1 资源
eventNamestring发送到 Node.js 运行时间的事件名称 .0.0.1 资源

开始选项

Prop类型说明默认自兹
argsstring[]传递给Node.js进程的论点.0.0.1 资源
env{ [key: string]: string; }为Node.js进程设置的环境变量.0.0.1 资源
scriptstring运行的脚本文件的路径,相对于节点.js项目目录.The main field of the package.json file of the Node.js project.0.0.1 资源

插件听筒

Prop类型
remove() => Promise<void>

信件事件

Prop类型说明自兹
argsMessageArg[]从Node.js运行时收到的论据.0.0.1 资源
eventNamestring活动名称从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 app 中运行背景任务 .
  • SQL 点: 访问 SQLite 数据库,支持加密,交易和计划迁移.
  • 齐普: Zip和unzip文件和目录.

通讯

随时更新有关卡帕韦索姆、Capacitor和Ionic生态系统的最新消息和最新消息,因为我们 《卡帕索克通讯》。 。 。 .

更改日志

见 变动情况。 。 。 .

许可证

见 自由主义。 。 。 .

嵌入式Node.js运行时间及其捆绑的依赖(V8, OpenSSL, ICU, libuv等)根据自己的许可证进行分配. 见 节点Js许可证。 。 。 .

[^1]: 本项目不附属于OpenJS基金会或其任何子公司或子公司,不获其认可、赞助或批准. [^2]: Node.js 是OpenJS基金会的注册商标.

版本与发布记录

@capawesome/capacitor-nodejs 共发布 4 个版本,首次发布于 2026/07/06;过去 12 个月发布了 4 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.2.0latest2026/10/1524 天前
0.1.12026/09/022 个月前
0.1.02026/07/064 个月前
0.0.12026/07/064 个月前

关于 @capawesome/capacitor-nodejs 的常见问题

@capawesome/capacitor-nodejs 是什么?

在Android和iOS上的移动应用程序中运行Node.js的Capacitor插件.

如何安装 @capawesome/capacitor-nodejs?

在项目目录运行 npm install @capawesome/capacitor-nodejs,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@capacitor/core(>=8.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@capawesome/capacitor-nodejs 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@capawesome/capacitor-nodejs 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@capawesome/capacitor-nodejs 可以商用吗?

@capawesome/capacitor-nodejs 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@capawesome/capacitor-nodejs 的下载量有多少?

根据 npm 官方下载统计,@capawesome/capacitor-nodejs 在 2026/10/09 – 2026/11/07 这 30 天内被下载 2,898 次,日均约 97 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@capawesome/capacitor-nodejs 还在维护吗?

最新版本 0.2.0 发布于 2026/10/15(24 天前);至今共发布 4 个版本,其中过去 12 个月发布了 4 个;首次发布于 2026/07/06。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。