Merge pull request #5979 from cyberkatze/patch-7

fixed errors in text
This commit is contained in:
Cheng Zhao 2016-06-10 12:22:04 +00:00 committed by GitHub
commit e824603f37

View file

@ -1,7 +1,7 @@
# Упаковка приложения # Упаковка приложения
Чтобы смягчить [проблемы](https://github.com/joyent/node/issues/6960) с длинными Чтобы смягчить [проблемы](https://github.com/joyent/node/issues/6960) с длинными
именами под Windows, немного ускорить `require` и скрыть ваши исходные коды, вы именами под Windows, немного ускорить `require` и скрыть ваши исходные коды, Вы
можете упаковать его в архив [asar][asar], немного поменяв исходный код. можете упаковать его в архив [asar][asar], немного поменяв исходный код.
## Генерация архива `asar` ## Генерация архива `asar`
@ -25,16 +25,16 @@ $ asar pack your-app app.asar
## Использование архивов `asar` ## Использование архивов `asar`
В Electron есть два вида API: API Node, которые устанавливаются с помощью Node.Js и В Electron есть два вида API: API Node, которые устанавливаются с помощью Node.JS и
веб API, которые предоставляюся Chromium. Оба предоставляют возможность считывать из веб API, которые предоставляюся Chromium. Оба предоставляют возможность считывать из
архивов `asar`. архивов `asar`.
### Node API ### Node API
С специальными патчами в Electron, части Node API вроде `fs.readFile` и `require` Со специальными патчами в Electron, части Node API вроде `fs.readFile` и `require`
считают архивы `asar` виртуальными папками и файлы в них доступны как в обычных. считают архивы `asar` виртуальными папками и файлы в них доступны как в обычных.
Например, у нас есть арихив `example.asar` в `/path/to`: Например, у нас есть архив `example.asar` в `/path/to`:
```bash ```bash
$ asar list /path/to/example.asar $ asar list /path/to/example.asar
@ -60,13 +60,13 @@ const fs = require('fs');
fs.readdirSync('/path/to/example.asar'); fs.readdirSync('/path/to/example.asar');
``` ```
Ичпользуем модуль из архива: Используем модуль из архива:
```javascript ```javascript
require('/path/to/example.asar/dir/module.js'); require('/path/to/example.asar/dir/module.js');
``` ```
Вы также можете показывать веб страницы из архива `asar` через `BrowserWindow`: Вы также можете показывать веб-страницы из архива `asar` через `BrowserWindow`:
```javascript ```javascript
const BrowserWindow = require('electron').BrowserWindow; const BrowserWindow = require('electron').BrowserWindow;
@ -76,7 +76,7 @@ win.loadURL('file:///path/to/example.asar/static/index.html');
### Веб API ### Веб API
На веб страницах файлы запрашиваются с помощью протокола `file:`. Как и в Node API На веб-страницах файлы запрашиваются с помощью протокола `file:`. Как и в Node API
архивы `asar` считаются за директории. архивы `asar` считаются за директории.
Пример получения файла с помощью `$.get`: Пример получения файла с помощью `$.get`:
@ -93,7 +93,7 @@ $.get('file:///path/to/example.asar/file.txt', function(data) {
### Использование архива `asar` в качестве обычного файла ### Использование архива `asar` в качестве обычного файла
Для случаев, когда вам, например, нужно проверить хэш-сумму архива `asar`, Для случаев, когда Вам, например, нужно проверить хэш-сумму архива `asar`,
нужно использовать архив как файл. Для этой цели существует встроенный модуль нужно использовать архив как файл. Для этой цели существует встроенный модуль
`original-fs`, который предоставляет доступ к `fs` без поддежки `asar`: `original-fs`, который предоставляет доступ к `fs` без поддежки `asar`:
@ -101,6 +101,7 @@ $.get('file:///path/to/example.asar/file.txt', function(data) {
var originalFs = require('original-fs'); var originalFs = require('original-fs');
originalFs.readFileSync('/path/to/example.asar'); originalFs.readFileSync('/path/to/example.asar');
``` ```
Вы также можете выставить `process.noAsar` в `true`, чтобы выключить поддержку `asar` Вы также можете выставить `process.noAsar` в `true`, чтобы выключить поддержку `asar`
в модуле `fs`: в модуле `fs`:
@ -112,7 +113,7 @@ fs.readFileSync('/path/to/example.asar');
## Ограничения Node API ## Ограничения Node API
Хотя мы и старались как могли, чтобы сделать `asar` максимально похожим на папки, Хотя мы и старались как могли, чтобы сделать `asar` максимально похожим на папки,
всё ещё существуют некоторые ограничения из-за низкоуровневой натуры Node API. всё ещё существуют некоторые ограничения из-за низкоуровневой архитектуры Node API.
### Архивы только для чтения ### Архивы только для чтения
@ -121,8 +122,8 @@ fs.readFileSync('/path/to/example.asar');
### Нельзя установить рабочую директорию в архиве ### Нельзя установить рабочую директорию в архиве
Хотя архивы `asar` и считаются папками, они ими на самом деле не являются, Хотя архивы `asar` и считаются папками, они ими на самом деле не являются ими,
так что вы не можете установить в них рабочую директорию. Передача так что Вы не можете установить в них рабочую директорию. Передача
архивов `asar` в качестве аргумента `cwd` некоторым API также может вызывать ошибки. архивов `asar` в качестве аргумента `cwd` некоторым API также может вызывать ошибки.
@ -154,18 +155,18 @@ API которым нужна распаковка:
`child_process.spawn` и `child_process.execFile`, но только `execFile` может `child_process.spawn` и `child_process.execFile`, но только `execFile` может
исполнять файлы из архивов `asar`. исполнять файлы из архивов `asar`.
Так вышло потому, что `exec` и `spawn` принимают `команду` а не `файл` как параметр, Так вышло потому, что `exec` и `spawn` принимают `команду`, а не `файл` как параметр,
а `команды` исполняются в оболочке. Нет никакой реальной возможности проверить, а `команды` исполняются в оболочке. Нет никакой реальной возможности проверить,
реален ли файл или находится в архиве `asar`, и даже если мы смогли бы проверить, реален ли файл или находится в архиве `asar`, и даже если мы смогли бы проверить,
то неясно, как земенить путь к файлу без побочных эффектов. то неясно, как земенить путь к файлу без побочных эффектов.
## Добавление распакованых файлов в архив `asar` ## Добавление распакованых файлов в архив `asar`
Как говорилось выше, некоторые API Node будут распаковывать файлв, Как говорилось выше, некоторые API Node будут распаковывать файлы,
чтобы их использовать. Кроме увеличенного потребления ресурсов это также чтобы их использовать. Кроме увеличенного потребления ресурсов это также
может вызвать предупрждения от антивирусов. может вызвать предупреждения от антивирусов.
Чтобы обойти это, вы можете распаковать некоторые файлы, создавая архивы, Чтобы обойти это, Вы можете распаковать некоторые файлы, создавая архивы,
с помощью опции `--unpack`. Пример показывает распаковку нативных модулей: с помощью опции `--unpack`. Пример показывает распаковку нативных модулей:
```bash ```bash