diff --git a/docs-translations/zh-CN/tutorial/using-native-node-modules.md b/docs-translations/zh-CN/tutorial/using-native-node-modules.md index 24aaaf7c12a8..b6b71910f2bd 100644 --- a/docs-translations/zh-CN/tutorial/using-native-node-modules.md +++ b/docs-translations/zh-CN/tutorial/using-native-node-modules.md @@ -2,21 +2,39 @@ Electron 同样也支持原生模块,但由于和官方的 Node 相比使用了不同的 V8 引擎,如果你想编译原生模块,则需要手动设置 Electron 的 headers 的位置。 -## 原生Node模块的兼容性 - -当 Node 开始换新的V8引擎版本时,原生模块可能“坏”掉。为确保一切工作正常,你需要检查你想要使用的原生模块是否被 Electron 内置的 Node 支持。你可以在[这里](https://github.com/electron/electron/releases)查看 Electron 内置的 Node 版本,或者使用 `process.version` (参考:[快速入门](https://github.com/electron/electron/blob/master/docs/tutorial/quick-start.md))查看。 - -考虑到 [NAN](https://github.com/nodejs/nan/) 可以使你的开发更容易对多版本 Node 的支持,建议使用它来开发你自己的模块。你也可以使用 [NAN](https://github.com/nodejs/nan/) 来移植旧的模块到新的 Nod e版本,以使它们可以在新的 Electron 下良好工作。 - ## 如何安装原生模块 如下三种方法教你安装原生模块: -### 最简单方式 +### 通过 npm 安装 -最简单的方式就是通过 [`electron-rebuild`](https://github.com/paulcbetts/electron-rebuild) 包重新编译原生模块,它帮你自动完成了下载 headers、编译原生模块等步骤: +只要设置一些系统环境变量,你就可以通过 `npm` 直接安装原生模块。 -```sh +为 Electron 安装所有依赖项的一个例子: + +```bash +# Electron 的版本。 +export npm_config_target=1.2.3 +# Electron 的系统架构, 值为 ia32 或者 x64。 +export npm_config_arch=x64 +export npm_config_target_arch=x64 +# 下载 Electron 的 headers。 +export npm_config_disturl=https://atom.io/download/electron +# 告诉 node-pre-gyp 是为 Electron 构建。 +export npm_config_runtime=electron +# 告诉 node-pre-gyp 从源代码构建模块。 +export npm_config_build_from_source=true +# 下载所有依赖,并缓存到 ~/.electron-gyp。 +HOME=~/.electron-gyp npm install +``` +### 下载并重新编译模块 + +你可以选择安装其他 Node 项目的模块,通过 [`electron-rebuild`][electron-rebuild] 包 +重新编译原生模块,它可以识别当前 Electron 版本,帮你自动完成了下载 headers、编译原生模块等步骤。 + +一个下载 `electron-rebuild` 并重新编译的例子: + +```bash npm install --save-dev electron-rebuild # 每次运行"npm install"时,也运行这条命令 @@ -26,31 +44,50 @@ npm install --save-dev electron-rebuild .\node_modules\.bin\electron-rebuild.cmd ``` -### 通过 npm 安装 +### 手动编译 -你当然也可以通过 `npm` 安装原生模块。大部分步骤和安装普通模块时一样,除了以下一些系统环境变量你需要自己操作: +如果你是一个原生模块的开发人员,想在 Electron 中进行测试, +你可能要手动编译 Electron 模块。你可以 +使用 `node-gyp` 直接编译: ```bash -export npm_config_disturl=https://atom.io/download/electron -export npm_config_target=0.33.1 -export npm_config_arch=x64 -export npm_config_runtime=electron -HOME=~/.electron-gyp npm install module-name +cd /path-to-module/ +HOME=~/.electron-gyp node-gyp rebuild --target=1.2.3 --arch=x64 --dist-url=https://atom.io/download/electron ``` - -### 通过 node-gyp 安装 - -你需要告诉 `node-gyp` 去哪下载 Electron 的 headers,以及下载什么版本: - -```bash -$ cd /path-to-module/ -$ HOME=~/.electron-gyp node-gyp rebuild --target=0.29.1 --arch=x64 --dist-url=https://atom.io/download/electron -``` - `HOME=~/.electron-gyp` 设置去哪找开发时的 headers。 +`--target=0.29.1` 设置了 Electron 的版本。 +`--dist-url=...` 设置了 Electron 的 headers 的下载地址。 +`--arch=x64` 设置了该模块为适配64位操作系统而编译。 -`--target=0.29.1` 设置了 Electron 的版本 +## 故障排除 -`--dist-url=...` 设置了 Electron 的 headers 的下载地址 +如果你安装了一个原生模块并发现它不能工作,你需要检查 +以下事项: -`--arch=x64` 设置了该模块为适配64位操作系统而编译 +* 模块的对应的操作系统和 Electron 对应的操作系统是否匹配(ia32 或 x64)。 +* 如果升级了 Electron,你通常需要重新编译这些模块。 +* 当有疑问时,请先执行 `electron-rebuild`。 + +## `prebuild` 依赖模块 + +[`prebuild`](https://github.com/mafintosh/prebuild) 为多个版本的 Node 和 Electron 提供了一种简单发布预编译二进制原生模块的方法。 + +如果为 Electron 提供二进制原生模块,请确保删除 +`--build-from-source` 和 `npm_config_build_from_source` 环境变量 +来充分利用预编译的二进制文件。 + +## `node-pre-gyp` 依赖模块 + +[`node-pre-gyp` 工具][node-pre-gyp] 提供一种部署原生 Node 预编译二进制模块的方法, +许多流行的模块都是使用它。 + +通常这些模块在 Electron 中工作良好,但有时当 Electron 使用 +比 Node 新的 V8 版本时,会有 ABI 改变,可能 +发生错误。因此,一般来说,建议始终从源代码编译原生模块。 + +如果你通过 `npm` 的方式安装模块,默认情况下这就完成了, +如果没有,你需要传入 `--build-from-source` 给 `npm`, 或者设置 +`npm_config_build_from_source` 环境变量。 + +[electron-rebuild]: https://github.com/paulcbetts/electron-rebuild +[node-pre-gyp]: https://github.com/mapbox/node-pre-gyp