Translated application distribution and application packaging to ru_RU

This commit is contained in:
TyanNN 2016-05-01 21:18:49 +03:00
parent dae63ec4f1
commit 6cb8f278a2
2 changed files with 305 additions and 0 deletions

View file

@ -0,0 +1,126 @@
# Распространение приложения
Чтобы разпространять ваше приложение на Electron, папка с вашим приложением
должна называться `app` и находиться в папке ресурсов Electron (на OS X это
`Electron.app/Contents/Resources/`, на Linux и Windows - `resources/`),
вот так:
На OS X:
```text
electron/Electron.app/Contents/Resources/app/
├── package.json
├── main.js
└── index.html
```
На Windows и Linux:
```text
electron/resources/app
├── package.json
├── main.js
└── index.html
```
Затем запустите `Electron.app` (или `electron` на Linux, `electron.exe` на Windows),
и Electron запустится как ваше приложение. Теперь папка `electron` и есть дистрибутив,
который вы должны распространять пользователям.
## Упаковка вашего приложения в файл
Если вы не хотите распространять исходные коды вашего проект, вы можете
упаковать его в архив [asar](https://github.com/atom/asar), чтобы не
показывать пользователям исходные коды.
Чтобы использовать `asar` для замены папки `app` на архив вам нужно
переименовать архив в `app.asar` и положить его в папку ресурсов Electron,
после чего Electron попробует считать ресурсы и запустить архив.
На OS X:
```text
electron/Electron.app/Contents/Resources/
└── app.asar
```
На Windows и Linux:
```text
electron/resources/
└── app.asar
```
Больше деталей можна найти в [инстуркции по упаковке приложения](application-packaging.md).
## Ребрендирование скачанных исполняемых файлов
После того, как вы подключили ваше приложение к Electron,
вам наверняка захочеться ребрендировать его перед распространением.
### Windows
Вы можете переименовать `electron.exe` как пожелаете и поменять иконку и прочую
информацию приложениями вроде [rcedit](https://github.com/atom/rcedit).
### OS X
Вы можете переименовать `Electron.app` как пожелаете, а также изменить
поля `CFBundleDisplayName`, `CFBundleIdentifier` и `CFBundleName` в следующих
файлах:
* `Electron.app/Contents/Info.plist`
* `Electron.app/Contents/Frameworks/Electron Helper.app/Contents/Info.plist`
Вы таже можете переименовать приложение-помощник, чтобы оно не показывало `Electron Helper`,
убедитесь, что вы переименовали его исполняемый файл.
Структура переименованного приложения выглядит примерно так:
```
MyApp.app/Contents
├── Info.plist
├── MacOS/
│   └── MyApp
└── Frameworks/
├── MyApp Helper EH.app
| ├── Info.plist
| └── MacOS/
|    └── MyApp Helper EH
├── MyApp Helper NP.app
| ├── Info.plist
| └── MacOS/
|    └── MyApp Helper NP
└── MyApp Helper.app
├── Info.plist
└── MacOS/
   └── MyApp Helper
```
### Linux
Вы можете переименовать исполняемый файл `electron` как пожелаете.
## Rebranding by Rebuilding Electron from Source
Вы также можете ребрендировать Electron изменив имя продукиа и собрав его
из исходных кодов. Чтобы сделать это вам нужно изменить `atom.gyp` и полностью
пересобрать Electron.
### grunt-build-atom-shell
Проверка и пересборка кода Electron довольно сложная задача, так что мы
мы сделали файл-инструкцию для Grunt, который будет делать это автоматически:
[grunt-build-atom-shell](https://github.com/paulcbetts/grunt-build-atom-shell).
Этот файл автоматически просмотрит изменения в `.gyp` фалле, соберёт
Electron из исходных кодов и пересоберёт модули Node, чтобы всё подходило
под новое имя.
## Инструменты
Вы также можете использовать инструменты оттретьих лиц,
которые сделают работу за вас:
* [electron-packager](https://github.com/maxogden/electron-packager)
* [electron-builder](https://github.com/loopline-systems/electron-builder)

View file

@ -0,0 +1,179 @@
# Упаковка приложения
Чтобы смягчить [проблемы](https://github.com/joyent/node/issues/6960) с длинными
именами под Windows, немного ускорить `require` и скрыть ваши исходные коды, вы
можете упаковать его в архив [asar][asar], немного поменяв исходный код.
## Генерация архива `asar`
Архив [asar][asar] - простой фомат похожий на tar, который собирает много файлов
в один. Electron может читать такой файл без распаковки.
Шаги для упавки вашего приложения архив `asar`:
### 1. Установите саму утилиту asar
```bash
$ npm install -g asar
```
### 2. Упакуйте с помощью `asar pack`
```bash
$ asar pack your-app app.asar
```
## Использование архивов `asar`
В Electron есть два вида API: API Node, которые устанавливаются с помощью Node.Js и
веб API, которые предоставляюся Chromium. Оба предоставляют возможность считывать из
архивов `asar`.
### Node API
С специальными патчами в Electron, части Node API вроде `fs.readFile` и `require`
считают архивы `asar` виртуальными папками и файлы в них доступны как в обычных.
Например, у нас есть арихив `example.asar` в `/path/to`:
```bash
$ asar list /path/to/example.asar
/app.js
/file.txt
/dir/module.js
/static/index.html
/static/main.css
/static/jquery.min.js
```
Прочитаеем файл в архиве `asar`:
```javascript
const fs = require('fs');
fs.readFileSync('/path/to/example.asar/file.txt');
```
Список всех файлов начиная от корня архива:
```javascript
const fs = require('fs');
fs.readdirSync('/path/to/example.asar');
```
Ичпользуем модуль из архива:
```javascript
require('/path/to/example.asar/dir/module.js');
```
Вы также можете показывать веб страницы из архива `asar` через `BrowserWindow`:
```javascript
const BrowserWindow = require('electron').BrowserWindow;
var win = new BrowserWindow({width: 800, height: 600});
win.loadURL('file:///path/to/example.asar/static/index.html');
```
### Веб API
На веб страницах файлы запрашиваются с помощью протокола `file:`. Как и в Node API
архивы `asar` считаются за директории.
Пример получения файла с помощью `$.get`:
```html
<script>
var $ = require('./jquery.min.js');
$.get('file:///path/to/example.asar/file.txt', function(data) {
console.log(data);
});
</script>
```
### Использование архива `asar` в качестве обычного файла
Для случаев, когда вам, например, нужно проверить хэш-сумму архива `asar`,
нужно использовать архив как файл. Для этой цели существует встроенный модуль
`original-fs`, который предоставляет доступ к `fs` без поддежки `asar`:
```javascript
var originalFs = require('original-fs');
originalFs.readFileSync('/path/to/example.asar');
```
Вы также можете выставить `process.noAsar` в `true`, чтобы выключить поддержку `asar`
в модуле `fs`:
```javascript
process.noAsar = true;
fs.readFileSync('/path/to/example.asar');
```
## Ограничения Node API
Хотя мы и старались как могли, чтобы сделать `asar` максимально похожим на папки,
всё ещё существуют некоторые ограничения из-за низкоуровневой натуры Node API.
### Архивы только для чтения
Архивы не могут быть изменены, так что все функции API Node, которые меняют файлы,
не буду работать с архивами `asar`.
### Нельзя установить рабочую директорию в архиве
Хотя архивы `asar` и считаются папками, они ими на самом деле не являются,
так что вы не можете установить в них рабочую директорию. Передача
архивов `asar` в качестве аргумента `cwd` некоторым API также может вызывать ошибки.
### Распаковка для некоторых API
Большинство API `fs` могут читать файлы или получить сведения о них прямо из
архива, без распаковки, однако для некоторых, которые передают путь к системным
вызовам, Electron распакует нужный файл в временную папку и передаст путь к этому
файлу.
API которым нужна распаковка:
* `child_process.execFile`
* `child_process.execFileSync`
* `fs.open`
* `fs.openSync`
* `process.dlopen` - используется `require` на нативных модулях
### Подельная информация для `fs.stat`
Объект `Stats`, возвращаемый `fs.stat`, и его друзья для остальных файлов
в архиве `asar` специально генерируются, потому что на самом деле этих файлов
не существует в файловой системе. Вам не стоит доверять информации
из объектов `Stats`, кроме, разве что, размера и типа файлов.
### Запуск исполняемых файлов из архивов `asar`
Существуют некоторые API Node, которые исполняют файлы, например `child_process.exec`,
`child_process.spawn` и `child_process.execFile`, но только `execFile` может
исполнять файлы из архивов `asar`.
Так вышло потому, что `exec` и `spawn` принимают `команду` а не `файл` как параметр,
а `команды` исполняются в оболочке. Нет никакой реальной возможности проверить,
реален ли файл или находится в архиве `asar`, и даже если мы смогли бы проверить,
то неясно, как земенить путь к файлу без побочных эффектов.
## Добавление распакованых файлов в архив `asar`
Как говорилось выше, некоторые API Node будут распаковывать файлв,
чтобы их использовать. Кроме увеличенного потребления ресурсов это также
может вызвать предупрждения от антивирусов.
Чтобы обойти это, вы можете распаковать некоторые файлы, создавая архивы,
с помощью опции `--unpack`. Пример показывает распаковку нативных модулей:
```bash
$ asar pack app app.asar --unpack *.node
```
После запуска команды выше в вашей папке, кроме `app.asar`, появится
`app.asar.unpacked`, которая будет содержать распакованные файлы, эту
папку стоит копировать вместе с `app.asar` при распространении.
[asar]: https://github.com/atom/asar