Add Pepper Flash doc and match doc style

- Add Pepper Flash plugin documentation
- Use and  match the same documentaion style for other CN docs.
- Fix some typos and grammar.
This commit is contained in:
Victor Zhu 2016-03-03 15:42:14 -05:00
parent 5839d7dcd5
commit b46fc8bc4c
8 changed files with 149 additions and 83 deletions

View file

@ -1,6 +1,7 @@
# 应用部署
为了使用Electron部署你的应用程序你存放应用程序的文件夹需要叫做 `app` 并且需要放在 Electron 的资源文件夹下(在 OS X 中是指 `Electron.app/Contents/Resources/`,在 Linux 和 Windows 中是指 `resources/`
为了使用 Electron 部署你的应用程序,你存放应用程序的文件夹需要叫做 `app` 并且需要放在 Electron 的
资源文件夹下(在 OS X 中是指 `Electron.app/Contents/Resources/`,在 Linux 和 Windows 中是指 `resources/`
就像这样:
在 OS X 中:

View file

@ -1,10 +1,12 @@
# 应用打包
为舒缓Windows下路径名过长的问题[issues](https://github.com/joyent/node/issues/6960), 也略对`require`加速以及简单隐匿你的源代码, 你可以通过极小的源代码改动将你的应用打包成[asar][asar].
为舒缓 Windows 下路径名过长的问题[issues](https://github.com/joyent/node/issues/6960)
也略对 `require` 加速以及简单隐匿你的源代码,你可以通过极小的源代码改动将你的应用打包成 [asar][asar]。
## 生成 `asar`
[asar][asar]是一种将多个文件合并成一个文件的类tar风格的归档格式。 Electron可以无需解压即从其中读取任意文件内容。
[asar][asar] 是一种将多个文件合并成一个文件的类 tar 风格的归档格式。
Electron 可以无需解压,即从其中读取任意文件内容。
参照如下步骤将你的应用打包成 `asar`
@ -22,11 +24,13 @@ $ asar pack your-app app.asar
## 使用 `asar`
在Electron中有两类APIsNode.js提供的Node APIs和Chromium提供的Web APIs。这两种APIs都支持从`asar`包中读取文件。
在 Electron 中有两类 APIsNode.js 提供的 Node API 和 Chromium 提供的 Web API。
这两种 API 都支持从 `asar` 包中读取文件。
### Node API
由于Electron中打了特别补丁 Node APIs中如`fs.readFile`或者`require`之类的方法可以将`asar`视之为虚拟文件夹,读取`asar`里面的文件就和从真实的文件系统中读取一样。
由于 Electron 中打了特别补丁, Node API 中如 `fs.readFile` 或者 `require` 之类
的方法可以将 `asar` 视之为虚拟文件夹,读取 `asar` 里面的文件就和从真实的文件系统中读取一样。
例如,假设我们在 `/path/to` 文件夹下有个 `example.asar` 包:
@ -85,7 +89,8 @@ $.get('file:///path/to/example.asar/file.txt', function(data) {
### 像“文件”那样处理 `asar`
有些场景,如:核查`asar`包的校验和,我们需要像读取“文件”那样读取`asar`包的内容(而不是当成虚拟文件夹)。你可以使用内置的`original-fs`(提供和`fs`一样的APIs)模块来读取`asar`包的真实信息。
有些场景,如:核查 `asar` 包的校验和,我们需要像读取“文件”那样读取 `asar` 包的内容(而不是当成虚拟文件夹)。
你可以使用内置的 `original-fs` (提供和 `fs` 一样的 API模块来读取 `asar` 包的真实信息。
```javascript
var originalFs = require('original-fs');
@ -102,13 +107,16 @@ originalFs.readFileSync('/path/to/example.asar');
### Working Directory 在 `asar` 包中无效
尽管`asar`包是虚拟文件夹但其实并没有真实的目录架构对应在文件系统里所以你不可能将working Directory设置成`asar`包里的一个文件夹。将`asar`中的文件夹以`cwd`形式作为参数传入一些API中也会报错。
尽管 `asar` 包是虚拟文件夹,但其实并没有真实的目录架构对应在文件系统里,所以你不可能将 working Directory
设置成 `asar` 包里的一个文件夹。将 `asar` 中的文件夹以 `cwd` 形式作为参数传入一些 API 中也会报错。
### API 中的额外“开箱”
大部分`fs`API可以无需解压即从`asar`包中读取文件或者文件的信息但是在处理一些依赖真实文件路径的底层系统方法时Electron会将所需文件解压到临时目录下然后将临时目录下的真实文件路径传给底层系统方法使其正常工作。 对于这类API耗费会略多一些。
大部分 `fs` API 可以无需解压即从 `asar` 包中读取文件或者文件的信息,但是在处理一些依赖真实文件路径的底层
系统方法时Electron 会将所需文件解压到临时目录下,然后将临时目录下的真实文件路径传给底层系统方法使其正
常工作。 对于这类API耗费会略多一些。
以下是一些需要额外解压的APIs
以下是一些需要额外解压的 API
* `child_process.execFile`
* `child_process.execFileSync`
@ -118,24 +126,30 @@ originalFs.readFileSync('/path/to/example.asar');
### `fs.stat` 获取的 stat 信息不可靠
`asar`包中的文件取`fs.stat`,返回的`Stats`对象不是精确值,因为这些文件不是真实存在于文件系统里。所以除了文件大小和文件类型以外,你不应该依赖`Stats`对象的值。
`asar` 包中的文件取 `fs.stat`,返回的 `Stats` 对象不是精确值,因为这些文件不是真实存在于文件系
统里。所以除了文件大小和文件类型以外,你不应该依赖 `Stats` 对象的值。
### 执行 `asar` 包中的程序
Node中有一些可以执行程序的API`child_process.exec``child_process.spawn``child_process.execFile`等,但只有`execFile`可以执行`asar`包中的程序。
Node 中有一些可以执行程序的 API`child_process.exec``child_process.spawn``child_process.execFile` 等,
但只有 `execFile` 可以执行 `asar` 包中的程序。
因为`exec``spawn`允许`command`替代`file`作为输入,而`command`是需要在shell下执行的目前没有可靠的方法来判断`command`中是否在操作一个`asar`包中的文件,而且即便可以判断,我们依旧无法保证可以在无任何副作用的情况下替换`command`中的文件路径。
因为 `exec``spawn` 允许 `command` 替代 `file` 作为输入,而 `command` 是需要在 shell 下执行的,目前没有
可靠的方法来判断 `command` 中是否在操作一个 `asar` 包中的文件,而且即便可以判断,我们依旧无法保证可以在无任何
副作用的情况下替换 `command` 中的文件路径。
## 打包时排除文件
如上所述,一些 Node API 会在调用时将文件解压到文件系统中,除了效率问题外,也有可能引起杀毒软件的注意!
为解决这个问题,你可以在生成`asar`包时使用`--unpack`选项来排除一些文件,使其不打包到`asar`包中下面是如何排除一些用作共享用途的native模块的方法
为解决这个问题,你可以在生成 `asar` 包时使用 `--unpack` 选项来排除一些文件,使其不打包到 `asar` 包中,
下面是如何排除一些用作共享用途的 native 模块的方法:
```bash
$ asar pack app app.asar --unpack *.node
```
经过上述命令后,除了生成的`app.asar`包以外,还有一个包含了排除文件的`app.asar.unpacked`文件夹,你需要将这个文件夹一起拷贝,提供给用户。
经过上述命令后,除了生成的 `app.asar` 包以外,还有一个包含了排除文件的 `app.asar.unpacked` 文件夹,
你需要将这个文件夹一起拷贝,提供给用户。
[asar]: https://github.com/atom/asar

View file

@ -47,7 +47,10 @@ $ cd /path-to-module/
$ HOME=~/.electron-gyp node-gyp rebuild --target=0.29.1 --arch=x64 --dist-url=https://atom.io/download/atom-shell
```
`HOME=~/.electron-gyp`设置了去哪找开发时的headers。
`HOME=~/.electron-gyp` 设置去哪找开发时的 headers。
`--target=0.29.1` 设置了 Electron 的版本
`--dist-url=...` 设置了 Electron 的 headers 的下载地址
`--arch=x64`设置了该模块为适配64bit操作系统而编译
`--arch=x64` 设置了该模块为适配64位操作系统而编译

View file

@ -0,0 +1,48 @@
# 使用 Pepper Flash 插件
Electron 现在支持 Pepper Flash 插件。要在 Electron 里面使用 Pepper Flash 插件,你需
要手动设置 Pepper Flash 的路径和在你的应用里启用 Pepper Flash。
## 保留一份 Flash 插件的副本
在 OS X 和 Linux 上,你可以在 Chrome 浏览器的 `chrome://plugins` 页面上找到 Pepper
Flash 的插件信息。插件的路径和版本会对 Election 对其的支持有帮助。你也可以把插件
复制到另一个路径以保留一份副本。
## 添加插件在 Electron 里的开关
你可以直接在命令行中用 `--ppapi-flash-path``ppapi-flash-version` 或者
在 app 的准备事件前调用 `app.commandLine.appendSwitch` 这个 method。同时
添加 `browser-window` 的插件开关。
例如:
```javascript
// Specify flash path. 设置 flash 路径
// On Windows, it might be /path/to/pepflashplayer.dll
// On OS X, /path/to/PepperFlashPlayer.plugin
// On Linux, /path/to/libpepflashplayer.so
app.commandLine.appendSwitch('ppapi-flash-path', '/path/to/libpepflashplayer.so');
// Specify flash version, for example, v17.0.0.169 设置版本号
app.commandLine.appendSwitch('ppapi-flash-version', '17.0.0.169');
app.on('ready', function() {
mainWindow = new BrowserWindow({
'width': 800,
'height': 600,
'web-preferences': {
'plugins': true
}
});
mainWindow.loadURL('file://' + __dirname + '/index.html');
// Something else
});
```
## 使用 `<webview>` 标签启用插件
`<webview>` 标签里添加 `plugins` 属性。
```html
<webview src="http://www.adobe.com/software/flash/about/" plugins></webview>
```