Translated application distribution and application packaging to ru_RU
This commit is contained in:
parent
dae63ec4f1
commit
6cb8f278a2
2 changed files with 305 additions and 0 deletions
126
docs-translations/ru-RU/tutorial/application-distribution.md
Normal file
126
docs-translations/ru-RU/tutorial/application-distribution.md
Normal 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)
|
179
docs-translations/ru-RU/tutorial/application-packaging.md
Normal file
179
docs-translations/ru-RU/tutorial/application-packaging.md
Normal 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
|
Loading…
Reference in a new issue