# Публикация на production
Информация
Большинство описанных ниже советов уже учтены, если используете Vue CLI (opens new window). Этот раздел актуален только в случае использования собственной конфигурации сборки.
# Включение режима для production
Во время разработки Vue отображает множество полезных предупреждений, чтобы помочь справиться с типичными ошибками и подводными камнями. Однако они уже бессмысленны в режиме production и лишь увеличивают размер приложения. Кроме того, некоторые из этих проверок добавляют небольшие затраты к времени выполнения, чего следует избегать в режиме production (opens new window).
# Без использования систем сборки
При использовании полной сборки, т.е. подключении Vue напрямую через тег <script>
без использования каких-либо систем сборки, убедитесь что используется минифицированная версия для production. Эти версии можно найти на странице установки.
# С использованием системы сборки
При использовании систем сборки, таких как Webpack или Browserify, режим production определяется в исходном коде Vue значением переменной process.env.NODE_ENV
и по умолчанию используется режим для разработки. Обе системы предоставляют способы переопределения этой переменной — чтобы включить режим production во Vue и удалить всё лишнее минификатором на этапе сборки. Во Vue CLI это уже предварительно настроено, но полезно знать как это делается:
# Webpack
В версиях Webpack 4+ можно использовать опцию mode
:
module.exports = {
mode: 'production'
}
2
3
# Browserify
Запустите сборку, указав в команде переменную
NODE_ENV
со значением"production"
. Это позволитvueify
исключить из сборки код для горячей замены модулей, а также код, относящийся только к разработке.Примените глобальную трансформацию envify (opens new window) к сборке. Это позволит минификатору удалить все предупреждения из исходного кода Vue, а также блоки кода, обёрнутые в условия с проверкой переменной окружения. Например:
NODE_ENV=production browserify -g envify -e main.js | uglifyjs -c -m > build.js
1Или используйте envify (opens new window) вместе с Gulp:
// Пользовательский модуль envify для указания переменных окружения const envify = require('envify/custom') browserify(browserifyOptions) .transform(vueify) .transform( // Порядок важен для обработки файлов node_modules { global: true }, envify({ NODE_ENV: 'production' }) ) .bundle()
1
2
3
4
5
6
7
8
9
10
11Или используя envify (opens new window) вместе с Grunt и grunt-browserify (opens new window):
// Пользовательский модуль envify для указания переменных окружения const envify = require('envify/custom') browserify: { dist: { options: { // Функция grunt-browserify для изменения порядка по умолчанию configure: (b) => b .transform('vueify') .transform( // Порядок важен для обработки файлов node_modules { global: true }, envify({ NODE_ENV: 'production' }) ) .bundle() } } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Rollup
Используйте @rollup/plugin-replace (opens new window):
const replace = require('@rollup/plugin-replace')
rollup({
// ...
plugins: [
replace({
'process.env.NODE_ENV': JSON.stringify( 'production' )
})
]
}).then(...)
2
3
4
5
6
7
8
9
10
# Предварительная компиляция шаблонов
При использовании шаблонов в DOM или строковых шаблонов в JavaScript компиляция шаблона в render
-функцию будет выполняться на лету. В большинстве случаев это происходит достаточно быстро, но если приложению требуется максимальная производительность — лучше этого избегать.
Самый простой способ предварительной компиляции шаблонов — использование однофайловых компонентов. Соответствующие настройки сборки автоматически выполняют предварительную компиляцию, поэтому код сборки будет уже содержать скомпилированные render
-функции вместо необработанных строковых шаблонов.
Если используете Webpack и предпочитаете разделять JavaScript и файлы шаблонов, то можно воспользоваться vue-template-loader (opens new window), который также преобразует файлы шаблонов в render
-функции JavaScript на этапе сборки.
# Извлечение CSS из компонентов
При использовании однофайловых компонентов, CSS из них будет динамически внедряться как тег <style>
через JavaScript. Это требует небольших затрат времени выполнения и при отрисовке на стороне сервера (SSR) приведёт к «вспышке нестилизованного содержимого» (flash of unstyled content — FOUC). Извлечение CSS из всех компонентов в один файл позволит избежать этих проблем, а также добиться лучших результатов в минификации и кэшировании CSS.
Для примера реализации обратитесь к документации соответствующей системы сборки:
- Webpack + vue-loader (opens new window)
- Browserify + vueify (opens new window)
- Rollup + rollup-plugin-vue (opens new window)
# Отслеживание ошибок во время выполнения
Если во время отрисовки компонента возникает ошибка, она будет передана в глобальную функцию app.config.errorHandler
, если таковая была указана. Поэтому будет хорошей идеей использовать его вместе с сервисом отслеживания ошибок, например с Sentry (opens new window), который обеспечивает официальную интеграцию с Vue (opens new window).