arui-scripts 15.6.0 → 15.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,58 @@
1
+ Настройки сборки артефакта
2
+ ===
3
+
4
+ ## docker
5
+
6
+ По-умолчанию, базовым образом для сборки артефакта является [alpine-node-nginx](../../alpine-node-nginx).
7
+
8
+ На `8080` порту будет поднят nginx, который будет раздавать статику и проксировать все остальные запросы к `nodejs`.
9
+
10
+ Вы также можете переопределить полностью процесс сборки docker-образа используя механизм [overrides](#тонкая-настройка)
11
+ или создав в корневой директории проекта `Dockerfile` содержащий необходимый набор инструкций.
12
+ Пример [Dockerfile](src/templates/dockerfile.template.ts).
13
+
14
+ `Dockerfile` в корне проекта имеет приоритет над overrides.
15
+
16
+ Чтобы переопределить скрипт запуска, воспользуйтесь механизмом [overrides](#тонкая-настройка)
17
+ или создайте в корневой директории проекта `start.sh` файл содержащий необходимый набор инструкций.
18
+ Пример [start.sh](src/templates/start.template.ts).
19
+
20
+ `start.sh` в корне проекта имеет приоритет над overrides.
21
+
22
+
23
+ ## Концигурация nginx
24
+ Несмотря на то, что nginx имеет готовый конфиг с роутингом, иногда возникает необходимость добавлять свои роуты.
25
+ Вы можете использовать механизм [overrides](overrides.md).
26
+ Так же вы можете создать `nginx.conf` на уровне проекта со своими роутами. Пример конфига [тут](../src/templates/nginx.conf.template.ts).
27
+ Файл nginx.conf имеет приоритет над оверрайдами.
28
+
29
+ ### Использование env переменных в nginx.conf
30
+
31
+ Иногда у вас может возникнуть потребность переопределять какие-то из настроек nginx в зависимости
32
+ от среды, на которой запущен контейнер. Это можно сделать задав свой `nginx.conf` и передав ENV переменные
33
+ в контейнер. По умолчанию конфигурация nginx прогоняется при старте
34
+ через [envsubst](https://www.gnu.org/software/gettext/manual/html_node/envsubst-Invocation.html).
35
+
36
+ Если вы используете свой базовый docker-образ для работы приложения - убедитесь что в нем доступен `envsubst`.
37
+ Для alpine он является частью пакета [`gettext`](https://pkgs.alpinelinux.org/contents?branch=edge&name=gettext&arch=x86&repo=main)
38
+
39
+ **Важно**. Для того чтобы сохранить нормальную работу специальных переменных nginx, типа `$proxy_add_x_forwarded_for`
40
+ перед запуском envsubst они будут заменены на `~~proxy_add_x_forwarded_for~~`, а затем возвращены в исходный вид.
41
+ envsubst будет заменять переменные записанные **только** как `${MY_VAR}`.
42
+
43
+
44
+ Вы можете использовать это так:
45
+
46
+ ```nginx.conf
47
+ server {
48
+ listen 8080;
49
+ server_name ${SERVICE_NAME};
50
+ ...
51
+ }
52
+ ```
53
+
54
+ ```shell
55
+ docker run my-awesome-app --env SERVICE_NAME=my-app
56
+ ```
57
+
58
+ После запуска nginx будет иметь server_name `my-app`.
@@ -0,0 +1,30 @@
1
+ Особенности поведения
2
+ ===
3
+
4
+ ## node-externals
5
+
6
+ Сборка серверной части устроена таким образом, что большая часть `node_modules` не попадает в сборку (в файл `.build/server.js`),
7
+ а загружается стандартным `require` node.js.
8
+ Основной мотивацией для это являются многие старые пакеты, которые делают "странные" вещи с require - например, пытаются
9
+ подключать файлы динамически, используют `require.extensions` и т.д. Это может приводить к ошибкам сборки или даже к
10
+ ошибкам во время выполнения.
11
+
12
+ Но в случае react-компонентов, мы зачастую запрашиваем кроме кода компонентов еще и `.css`, `.png` и другие файлы.
13
+ `require` из node.js на таких местах ломается. Поэтому наши внутренние библиотеки компонентов все же должны попадать в
14
+ собранный файл `.build/server.js`. Всё это сделано с помощью [добавления их в исключение](src/configs/webpack.server.dev.ts#L59)
15
+ плагина [webpack-node-externals](https://www.npmjs.com/package/webpack-node-externals).
16
+ В случае, если вам необходима обработка не-js файлов из других внешних модулей - вы можете
17
+ воспользоваться механизмом `overrides`, и ключом `serverExternalsExemptions`.
18
+ По умолчанию же все не-js файлы из внешних модулей будут проигнорированы.
19
+
20
+ ## Кеширование сборки
21
+ В dev сборке для сервера и клиента настроено кеширование. Оно должно нормально работать когда вы просто работаете
22
+ над проектом - меняете ваш код, ставите новые зависимости и тд.
23
+
24
+ Но когда вы руками меняете код внутри node_modules - вы не сможете увидеть ваши изменения, так как webpack будет
25
+ использовать данные из кеша. Для того чтобы ваши изменения применились в сборке вам необходимо очистить кеш
26
+ webpack и перезапустить сборку. Кеши хранятся в папке `.cache` внутри `node_modules` вашего проекта.
27
+
28
+ ```
29
+ rm -rf ./node_modules/.cache
30
+ ```
@@ -0,0 +1,123 @@
1
+ Доступные команды
2
+ ===
3
+
4
+ ### start
5
+ Запускает dev-сервер для клиентского кода и серверный код в watch-режиме.
6
+
7
+ **Как запустить?**
8
+ ```bash
9
+ arui-scripts start
10
+ ```
11
+
12
+ ### start:prod
13
+ Запускает dev-сервер для клиентского кода и серверный код в watch-режиме. При этом использует production-конфигурацию для webpack.
14
+ Может быть полезна для сбора метрик производительности.
15
+
16
+ **Как запустить?**
17
+ ```bash
18
+ arui-scripts start:prod
19
+ ```
20
+
21
+ ### build
22
+ Собирает клиентский и серверный код в production-режиме.
23
+
24
+ **Как запустить?**
25
+ ```bash
26
+ arui-scripts build
27
+ ```
28
+
29
+ ### test
30
+ Команда `arui-scripts test` внутри запускает jest с дополнительной конфигурацией.
31
+
32
+ Конфигурация включает в себя:
33
+ - Использование `jest-snapshot-serializer-class-name-to-string` для правильной работы с `cn`
34
+ - Замену всех импортов css файлов на пустые файлы
35
+ - Компиляцию .js/.jsx файлов используя babel
36
+ - Компиляцию .ts/.tsx файлов используя tsc
37
+ - Замену импортов остальных типов файлов на импорт строк с названием файла
38
+
39
+ По умолчанию под маску для поиска тестов попадают все файлы `*test*.(js|jsx|ts|tsx)`, `*spec*.((js|jsx|ts|tsx))`, `*/__test__/*.(js|jsx|ts|tsx)`.
40
+
41
+ Вы можете переопределять любые настройки jest в `package.json`, [документация](https://facebook.github.io/jest/docs/en/configuration.html).
42
+
43
+ Если какие либо из ваших инструментов (например VSСode или WebStorm) не могут запустить тесты поскольку не находят конфигурацию, вы можете так же указать `arui-scripts` как preset для jest.
44
+ Таким образом будет работать как запуск тестов через arui-script, так и любые сторонние инструменты, запускающие jest.
45
+
46
+ _package.json_
47
+ ```json
48
+ {
49
+ "jest": {
50
+ "preset": "arui-scripts"
51
+ }
52
+ }
53
+ ```
54
+
55
+ **Как запустить?**
56
+ ```bash
57
+ arui-scripts test
58
+ ```
59
+
60
+ ### docker-build
61
+ Собирает клиентский и серверный код в production-режиме, создает docker-образ и пушит его в docker-репозиторий.
62
+
63
+ **Как запустить?**
64
+ ```bash
65
+ arui-scripts docker-build
66
+ ```
67
+
68
+ Имя контейнера определяется как `{configs.dockerRegistry}/{name}:{version}`. Переменные `name` и `version` по умолчанию берутся из package.json,
69
+ но вы так же можете переопределить их из командной строки, например
70
+ `arui-scripts docker-build name=container-name version=0.1-beta`.
71
+
72
+ Команда предполагает наличие установленных `node_modules` перед сборкой, в процессе работы же очищает дев зависимости используя `yarn` или `npm`.
73
+ yarn будет использоваться когда в рутовой папке проекта есть `yarn.lock` и `yarn` доступен в системе.
74
+ Если вы используете yarn 2, для выполнения команды очистки используется плагин [workspace-tools](https://github.com/yarnpkg/berry/blob/HEAD/packages/plugin-workspace-tools/README.md), поэтому он должен быть установлен и указан в `.yarnrc.yml` вашего проекта.
75
+
76
+ Итоговый контейнер будет содержать `nginx` и скрипт для запуска `nginx` одновременно с `nodejs` сервером.
77
+
78
+ В итоге, для корректного запуска вашего докер-контейнера вам надо будет выполнить команду
79
+
80
+ ```bash
81
+ docker run -p 8080:8080 container-name:version ./start.sh
82
+ ```
83
+
84
+ ### docker-build:compiled
85
+
86
+ Команда `arui-scripts docker-build:compiled` во многом аналогична `docker-build`, но вместо сборки проекта использует уже скомпилированный в папку `.build` код.
87
+ При этом в контейнер будут устанавливаться только production зависимости.
88
+ Команду предполагается использовать в CI/CD, когда проект собирается в отдельном шаге и результат сборки уже доступен.
89
+ За счет того, что в контейнер папки node_modules не копируются, а устанавливаются только production зависимости, скорость сборки контейнера значительно увеличивается.
90
+ В процессе сборки так же будет модифицироваться файл `.dockerignore` для того чтобы гарантировано исключить папку `node_modules` из контекста сборки докера.
91
+
92
+ `arui-scripts docker-build:compiled` имеет те же опции, что и `arui-scripts docker-build`.
93
+ Dockerfile при этом будет сгенерирован автоматически, но вы можете переопределить его используя механизм [overrides](overrides.md).
94
+ Локальный `Dockerfile` в корне проекта в данном случае полностью игнорируется.
95
+
96
+ **Как запустить?**
97
+ ```bash
98
+ arui-scripts docker-build:compiled
99
+ ```
100
+
101
+ ### archive-build
102
+
103
+ Собирает архив с production сборкой.
104
+
105
+ Этот вариант может быть полезен если вы хотите деплоить ваше приложение через подключение архива в марафоне.
106
+
107
+ Команда предполагает наличие установленных `node_modules` перед сборкой, в процессе работы же очищает дев зависимости используя `yarn` или `npm`.
108
+ yarn будет использоваться когда в рутовой папке проекта есть `yarn.lock` и `yarn` доступен в системе.
109
+ Если вы используете yarn 2, для выполнения команды очистки используется плагин [workspace-tools](https://github.com/yarnpkg/berry/blob/HEAD/packages/plugin-workspace-tools/README.md), поэтому он должен быть установлен и указан в `.yarnrc.yml` вашего проекта.
110
+
111
+ Итоговый архив будет содержать в себе `.build`, `node_modules`, `package.json` и `config` папки вашего проекта.
112
+
113
+ **Как запустить?**
114
+ ```bash
115
+ arui-scripts archive-build
116
+ ```
117
+
118
+ ### bundle-analyze
119
+
120
+ Запускает [webpack-bundle-analyzer](https://www.npmjs.com/package/webpack-bundle-analyzer) для анализа размера бандлов.
121
+ Так же при запуске будет генерироваться [stats-файл](https://webpack.js.org/api/stats/), который можно использовать в
122
+ [сторонних](http://webpack.github.io/analyse/) инструментах, например для понимания почему тот или иной модуль попал в бандл.
123
+ По умолчанию файл будет писаться в `.build/stats.json`, вы можете поменять это через отдельную [настройку statsOutputFilename](settings.md#statsOutputFilename).
@@ -0,0 +1,18 @@
1
+ ## Конфигурация typescripts
2
+
3
+ Компиляция TS работает из коробки, если в корне проекта есть файл `tsconfig.json`.
4
+ За основу можно использовать дефолтный конфиг:
5
+
6
+ ```json
7
+ {
8
+ "extends": "./node_modules/arui-scripts/tsconfig.json"
9
+ }
10
+ ```
11
+
12
+ По умолчанию TS будет компилироваться через babel, но у этого есть ряд ограничений:
13
+ - нельзя использовать namespace
14
+ - Нельзя использовать устаревший синтаксис import/export (`import foo = require(...)`, `export = foo`)
15
+ - enum merging
16
+
17
+ Если вы используете что-то из вышеперечисленного - вы можете вернуться к использованию tsc для компиляции ts файлов используя
18
+ настройку [`useTscLoader`](settings.md#usetscloader).
@@ -0,0 +1,100 @@
1
+ Примеры входных точек для сервера и клиента
2
+ ===
3
+
4
+ ## Клиент
5
+ Для корректной работы hot-module-replacement на клиенте вам надо добавить примерно такой код:
6
+
7
+ _./src/index.tsx_
8
+ ```tsx
9
+ import React from 'react';
10
+ import ReactDOM from 'react-dom';
11
+ import { App } from './components/app';
12
+
13
+ const targetElement = document.getElementById('react-app');
14
+
15
+ ReactDOM.render(
16
+ <App />,
17
+ targetElement
18
+ );
19
+
20
+ if (process.env.NODE_ENV !== 'production' && module.hot) {
21
+ module.hot.accept('./components/app', () => {
22
+ let NextAppAssignments = require('./components/app').App;
23
+
24
+ ReactDOM.render(
25
+ <NextAppAssignments />,
26
+ targetElement
27
+ );
28
+ });
29
+ }
30
+ ```
31
+
32
+ ## Сервер
33
+
34
+ ### Использование hot-module-replacement
35
+ По умолчанию серверная часть приложения будет просто перезапускаться после каждого изменения кода,
36
+ для использования hot module replacement на сервере можно использовать настройку [`useServerHMR`](settings.md#useserverhmr).
37
+
38
+ Ваша входная точка сервера должна выглядеть примерно так (на примере hapi):
39
+
40
+ _./src/server/index.ts_
41
+ ```ts
42
+ import server from './server';
43
+
44
+ let currentServer = server;
45
+
46
+ async function startServer() {
47
+ try {
48
+ await currentServer.start();
49
+ } catch (error) {
50
+ console.error('Failed to start server', error);
51
+ process.exit(1);
52
+ }
53
+ }
54
+
55
+ startServer();
56
+
57
+ if (module.hot) {
58
+ module.hot.accept(['./server'], async () => {
59
+ try {
60
+ await currentServer.stop();
61
+
62
+ currentServer = server; // импорт из сервера заменится самостоятельно
63
+ await startServer();
64
+ } catch (error) {
65
+ console.log('Failed to update server. You probably need to restart application', error);
66
+ }
67
+ });
68
+ }
69
+ ```
70
+
71
+ _./src/server/server.ts_
72
+ ```ts
73
+ import hapi from 'hapi';
74
+ const server = new hapi.Server();
75
+
76
+ server.ext('onPostStart', (_, done) => {
77
+ console.log(`Server is running: ${server.info.uri}`);
78
+ done();
79
+ });
80
+
81
+ (async () => {
82
+ server.connection({ port: 3000 });
83
+
84
+ // ...
85
+ // конфигурация вашего сервера
86
+ // ...
87
+ })();
88
+
89
+ export default server;
90
+ ```
91
+
92
+ Таким образом после изменения кода сервер не будет полностью пререзагружаться, что во многих случаях быстрее.
93
+ В случае изменения входной точки сервера при использовании HMR вам надо будет перезапускать сервер вручную.
94
+
95
+ ### Формирование html для серверного рендеринга
96
+
97
+ Для того чтобы корректно формировать html вам нужно знать имена чанков, которые будут сгенерированы вебпаком.
98
+ Для этого рекомендуется использовать метод `readAssetsManifest` из `@alfalab/scripts-server`, который возвращает объект с именами чанков.
99
+
100
+ Документация по `readAssetsManifest` доступна [здесь](../../arui-scripts-server/README.md#readassetsmanifest).
@@ -0,0 +1,122 @@
1
+ Тонкая настройка
2
+ ===
3
+
4
+ Если вам не хватает гибкости при использовании `arui-scripts`, например вы хотите добавить свой плагин для вебпака -
5
+ вы можете воспользоваться механизмом `overrides`.
6
+
7
+ Для этого вам необходимо создать в корне вашего проекта файл `arui-scripts.overrides.js` или `arui-scripts.overrides.ts`, из которого вы сможете управлять
8
+ конфигурацией почти всех инструментов, используемых в `arui-scripts`.
9
+
10
+ Принцип работы тут следующий. Для всех конфигураций определен набор ключей, которые они будут искать в `arui-scripts.overrides.js`,
11
+ В случае если такой ключ найден и это функция - она будет вызвана, и в качестве аргументов ей будут переданы
12
+ существующая конфигурация и полный конфиг приложения (см [AppConfig](../src/configs/app-configs/types.ts)).
13
+ Возвращать такая функция должна так же конфигурацию.
14
+
15
+ Пример `arui-scripts.overrides.js`:
16
+ ```javascript
17
+ const path = require('path');
18
+ module.exports = {
19
+ webpack: (config, applicationConfig) => {
20
+ config.resolve.alias = {
21
+ components: path.resolve(__dirname, 'src/components')
22
+ };
23
+ return config;
24
+ }
25
+ };
26
+ ```
27
+
28
+ Пример `arui-scripts.overrides.ts`:
29
+ ```ts
30
+ import type { OverrideFile } from 'arui-scripts';
31
+ import path from 'path';
32
+
33
+ const overrides: OverrideFile = {
34
+ webpack: (config, applicationConfig) => {
35
+ config.resolve.alias = {
36
+ components: path.resolve(__dirname, 'src/components')
37
+ };
38
+ return config;
39
+ }
40
+ };
41
+
42
+ export default overrides;
43
+ ```
44
+
45
+ **В случае, если у вас на проекте лежит и ts, и js файл с overrides, использоваться будет js версия.**
46
+
47
+ С помощью этой конфигурации ко всем настройкам вебпака будет добавлен `alias` *components*.
48
+
49
+ На данный момент можно переопределять следующие конфигурации:
50
+ - `babel-client` - конфигурация `babel` для клиентского кода. Ключи: `babel`, `babelClient`.
51
+ - `babel-server` - конфигурация `babel` для серверноого кода. Ключи: `babel`, `babelServer`.
52
+ - `dev-server` - конфигурация `webpack-dev-server`. Ключи: `devServer`.
53
+ - `postcss` - конфигурация для `postcss`. Ключи: `postcss`.
54
+ > `config` postcss содержит массив с уже инициализированными плагинами, параметры которых уже зафиксированны. Если необходимо изменить параметры плагинов можно пересоздать конфиг, таким образом:
55
+ ```javascript
56
+ import {
57
+ createPostcssConfig, // функция для создания конфигурационного файла postcss
58
+ postcssPlugins, // список плагинов
59
+ postcssPluginsOptions, // коллекция конфигураций плагинов
60
+ } from 'arui-scripts/build/configs/postcss.config';
61
+
62
+ module.exports = {
63
+ postcss: (config) => {
64
+ const { files } = postcssPluginsOptions['@csstools/postcss-global-data'];
65
+ const newOption = {
66
+ ...postcssPluginsOptions,
67
+ '@csstools/postcss-global-data': {
68
+ files:files.concat(['./vars.css'])
69
+ }
70
+ };
71
+ return createPostcssConfig(postcssPlugins, newOption);
72
+ },
73
+ };
74
+ ```
75
+ - `stats-options` - конфигурация для [webpack-stats](https://webpack.js.org/configuration/stats/). Ключи: `stats`.
76
+ - `webpack.client.dev` - конфигурация для клиентского webpack в dev режиме.
77
+ Ключи: `webpack`, `webpackClient`, `webpackDev`, `webpackClientDev`.
78
+ - `webpack.client.prod` - конфигурация для клиентского webpack в prod режиме.
79
+ Ключи: `webpack`, `webpackClient`, `webpackProd`, `webpackClientProd`.
80
+ - `webpack.server.dev` - конфигурация для серверного webpack в dev режиме.
81
+ Ключи: `webpack`, `webpackServer`, `webpackDev`, `webpackServerDev`.
82
+ - `webpack.server.prod` - конфигурация для серверного webpack в prod режиме.
83
+ Ключи: `webpack`, `webpackServer`, `webpackProd`, `webpackServerProd`.
84
+ - `supporting-browsers` - список поддерживаемых браузеров в формате [browserslist](https://github.com/browserslist/browserslist).
85
+ Ключи: `browsers`, `supportingBrowsers`
86
+ - `Dockerfile` - докерфайл, который будет использоваться для сборки контейнера.
87
+ Базовый шаблон [тут](../src/templates/dockerfile.template.ts).
88
+ [`Dockerfile` в корне проекта](#docker) имеет приоритет над overrides.
89
+ - `DockerfileCompiled` - докерфайл, который будет использоваться для сборки контейнера при использовании команды `arui-scripts docker-build:compiled`
90
+ - `nginx` - шаблон конфигурации для nginx внутри контейнера.
91
+ Базовый шаблон [тут](../src/templates/nginx.conf.template.ts).
92
+ [Файл `nginx.conf`](nginx.md) в корне имеет приоритет над оверрайдами.
93
+ - `start.sh` - шаблон entrypoint докер контейнера. Базовый шаблон [тут](../src/templates/start.template.ts).
94
+ - `serverExternalsExemptions` - список модулей, которые не будут добавлены в список внешних зависимостей сервера. [Подробнее](caveats.md#node-externals).
95
+
96
+ Для некоторых конфигураций определены несколько ключей, они будут применяться в том порядке, в котором они приведены в этом файле.
97
+
98
+ ### Создание дополнительных конфигураций для webpack
99
+ На некоторых проектах может потребоваться создать дополнительные конфигурации для webpack. Например, для создания
100
+ service worker'а (или любых других кейсов). Для этого можно использовать функцию-хелпер `createSingleWebpackConfig`:
101
+
102
+ ```ts
103
+ import type { OverrideFile } from 'arui-scripts';
104
+
105
+ const overrides: OverrideFile = {
106
+ webpackClient: (config, appConfig, { createSingleClientWebpackConfig }) => {
107
+ return [
108
+ config,
109
+ createSingleClientWebpackConfig(
110
+ './src/sw.js', // entrypoint, может быть массивом/объектом
111
+ 'sw', // наименование сборки, влияет на имена чанков
112
+ ),
113
+ ];
114
+ }
115
+ };
116
+
117
+ export default overrides;
118
+ ```
119
+ Эта функция вернет независимую конфигурацию для webpack, которую можно использовать в качестве оверрайда. Вы так же можете ее модифицировать,
120
+ не боясь что это повлияет на другие конфигурации.
121
+
122
+ Созданная таким образом конфигурация будет шарить с оригинальной конфигурацией только плагин для формирования assets-manifest'а.
@@ -0,0 +1,65 @@
1
+ Пресеты
2
+ ===
3
+
4
+ В случае, если вы хотите использовать определенный набор конфигураций и оверрайдов сразу в нескольких проектах - вам может
5
+ помочь механизм пресетов. Он позволяет выносить конфигурацию и оверрайды в отдельный пакет.
6
+ Для того чтобы использовать персеты на проекте вы должны указать в настройках проекта имя пакета с пресетами:
7
+
8
+ ```json
9
+ {
10
+ "aruiScripts": {
11
+ "presets": "my-company-presets"
12
+ }
13
+ }
14
+ ```
15
+
16
+ Как пресет должен быть указан путь до папки с общими настройками (для поиска пути будет использоваться `require.resolve`
17
+ от папки, содержащей package.json. Так что это может быть как папка в проекте, так и пакет из node_modules).
18
+
19
+ Сам пакет с пресетами может содержать два файла:
20
+ - `arui-scirpts.config.js` (или `arui-scripts.config.ts`)
21
+ - `arui-scripts.overrides.js` (или `arui-scirpts.overrides.ts`)
22
+
23
+ ### arui-scripts.config (js | ts)
24
+ С помощью этого файла можно задать любые ключи [конфигурации](settings.md).
25
+ ```js
26
+ module.exports = {
27
+ baseDockerImage: 'my-company-artifactory.com/arui-scripts-base:11.2'
28
+ };
29
+ ```
30
+
31
+ Или в виде ts:
32
+ ```ts
33
+ import type { PackageSettings } from 'arui-scripts';
34
+
35
+ const settings: PackageSettings = {
36
+ baseDockerImage: 'my-company-artifactory.com/arui-scripts-base:11.2'
37
+ };
38
+
39
+ export default settings;
40
+ ```
41
+
42
+ На проекте конфиурация будет загружаться в следующем порядке:
43
+ 1. базовые настройки из arui-scripts
44
+ 2. настройки из presets
45
+ 3. настройки из package.json проекта
46
+ 4. настройки, переданные через env переменную.
47
+
48
+ **Важно!**
49
+
50
+ Если вы будете задавать относительные пути через общие конфигурации (например `serverEntry`, `additionalBuildPath` и другие)
51
+ они будут вычисляться относительно корня проекта, а не вашей конфигурации.
52
+ Вы можете использовать абсолютные пути при необходимости задать путь до файла внутри пакета с пресетами.
53
+
54
+ ### arui-scripts.overrides (js | ts)
55
+ С помощью этого файла можно задать базовые оверрайды проекта, аналогично [заданию оверрайдов на проекте](overrides.md).
56
+ ```js
57
+ module.exports = {
58
+ babelClient(config) {
59
+ config.plugins.push('my-awesome-babel-plugin');
60
+ return config;
61
+ }
62
+ };
63
+ ```
64
+
65
+ На проекте оверрайды из пресетов будут выполняться в первую очередь, после них будут выполняться оверрайды из проекта.