предисловие
Друзья группы часто спрашиваютwebpack
,react
,redux
,четноеcreate-react-app
Некоторые проблемы в настройке и т. д. мне непонятны.Я многому научился из взаимных обменов между всеми.
Попробуем сегодня поговоритьWebpack
Что ж, цель состоит в том, чтобы помочь каждому углубить свое понимание и облегчить новичкам начало пути.Они могут создавать и настраивать свои собственные леса от 0 до 1 или дополнительно консолидировать упакованные леса.Далее Сунан подробно объяснит .webpack
Роль каждого поля конфигурации в (частичноwebpack4
новый).
В последние два года интерфейс развивался с высокой скоростью и непрерывно, и пользователи сети часто высмеивают, что они старые и неспособные учиться.
Хотя он и шутит, но косвенно излагает свою беспомощность: из-за давления жизни ему приходится двигаться быстрее.
Потому что никто не остановится для вас, компания не остановится, общество не остановится, коллеги не остановятся... Остановка может означать устранение ——理想很丰满,现实很骨感
, так что давайте вместе добиваться прогресса, вместе повышать зарплату, бороться изо всех сил и вперед. .
~~Плевка окончена, поговорим о делах~~.
Простите меня за то, что я не в состоянии контролировать себя, я хочу спросить вас, ребята, вы только вчера выпустили сингл на Double Eleven?
- Если жизнь так же, как в первый раз, что такое осенний ветер и грустный веер живописи;
- Легко измениться, но сердце ветхого человека, но сердце ветхого человека переменчиво;
- Лишань сказал, что сейчас половина первого ночи, и Е Юйлиньлин никогда не жаловалась.
Доброе утро, ребята, вот@IT · Союз братьев Пинтоу,ЯДиректор по заполнению · Сунан, поделись с сердцем и будь теплым осадным львом.
Публичный номер Z:honeyBadger8
, группа: 912594095
entry
- Это не нужно объяснять, просто посмотрите на имя, чтобы знать, это путь в рай/ад
入口
, все страдания начинаются и заканчиваются здесь. - Несколько простых способов написать:
//方式一:单文件写法
entry: {
index: './src/pages/route.js',
//about: './src/pages/about.js',
//other:()=>{...}
}
//方式二:多文件写法
entry: {
/*index:[
'webpack-hot-middleware/client',
'./src/root.js'
],*/
index: ['./src/root.js'],
vendors : ['react','react-dom','redux','react-router','classnames'],
}
//首席填坑官∙苏南的专栏,公Z好:honeyBadger8
выход - выход
- Это ключ верхнего уровня объекта (очень важно), если сказать
entry
это дверь,output
Судья решает, попадете ли вы в рай или в ад; - Инструктировать webpack, как выводить, куда выводить, формат вывода и т. д.;
-
path
: каталог выходного файла, -
filename
: имя выходного файла, за которым обычно следуетentry
Конфигурация соответствует, например:js/[name].js
имя здесь означает [index
,vendors
], -
chunkFilename
: блокировка, с ней настроено, без входаentry
Модуль поможет автоматически разделить файл, который часто называют загрузкой по требованию, и маршрутизацию.require.ensure
соответствуют друг другу -
publicPath
: общедоступный путь для вывода файла, -
pathinfo
: то есть, чтобы сохранить информацию о комментариях во взаимозависимых пакетах, в основном не нужно устанавливать ее активно, по умолчаниюdevelopment
Значение по умолчанию true в режиме, в то время как вproduction
Значение по умолчанию в режиме равно false, - Это основные и некоторые другие.
library
,libraryTarget
,auxiliaryComment
Подождите, желающие могут узнать об этом сами.
output: {
path: path.resolve(__dirname, '../assets'),
filename: 'js/[name].js',
chunkFilename: 'js/[name].[chunkhash:8].js',
publicPath: '/_static_/', //最终访问的路径就是:localhost:3000/_static_/js/*.js
//pathinfo:true,
}
hash
- Обычно используются три:
шаблон | описывать |
---|---|
hash |
Хэш идентификатора модуля, обычно используемый дляfilename : '[имя].[хэш].js' |
chunkhash |
Хэш содержимого блока загружается по запросу, согласноchunk Рассчитывается на основе собственного содержимого 'js/[name].[chunkhash:8].js' |
contenthash |
Я этим раньше не пользовался.Прочитал документ.Рассчитывается по содержимому при извлечении файла css.hash , в сочетании сExtractTextWebpackPlugin использование плагина |
длина хеша | По умолчанию 20, можно настроить: [hash:8], [chunkhash:16] |
mode
- Это новое дополнение к webpack 4. До 4 его вообще все использовали.
DefinePlugin
Настройки плагина - Режим:
development``,production
,none
, - development : режим разработки, упакованный код не будет сжат, включена отладка кода,
- производство : режим производства и наоборот.
//方法一
webpack --mode development/production
//方法二
……
mode:'development/production'
……
devtool
- Определяет, генерировать ли и как генерировать файлы исходной карты, что более удобно для обнаружения проблем в среде разработки.
- Конечно, его открытие также повлияет на скорость компиляции, поэтомуПроизводственная средаНе забудьте закрыть;
- Общие значения:
cheap-eval-source-map
,eval-source-map
,cheap-module-eval-source-map
,inline-cheap-module-source-map
Подождите, подробности можно найти наОфициальный вид; - Я обычно использую:
eval-source-map
Их много, и каждый имеет свои особенности, заинтересованные студенты могут попробовать их один за другим.
optimization
-
optimization
Это новое дополнение к webpack 4. Оно в основном используется для того, чтобы позволить разработчикам настраивать некоторые конфигурации стратегии для оптимизации конструкции и упаковки в соответствии со своими потребностями. -
minimize
: true/false, указывает веб-пакету, следует ли включать сжатие минимизации кода, -
minimizer
: Настройте конфигурацию оптимизации js, которая переопределит конфигурацию по умолчанию в сочетании сUglifyJsPlugin
использование плагина, -
removeEmptyChunks
: логическое значение, которое обнаруживает и удаляет пустые блоки. Установка значения false отключит эту оптимизацию, -
nodeEnv
: это не переменная среды в узле. После настройки вы можете использовать process.env.NODE_ENV === 'development' в коде, чтобы судить о некоторой логике. Производственная среда UglifyJsPlugin автоматически удалит бесполезный код. -
splitChunks
:замененыCommonsChunkPlugin
, автоматическое разделение подпакетов, разделение кода, подробная конфигурация по умолчанию: - Конфигурация по умолчанию работает только с асинхронно загружаемыми блоками кода — чанками: 'async', который имеет три значения: all, async, initial
//环境变更也可以直接 在启动中设置
//webpack --env.NODE_ENV=local --env.production --progress
//splitChunks 默认配置
splitChunks: {
chunks: 'async',
minSize: 30000,
maxSize: 0,
minChunks: 1,
maxAsyncRequests: 5,
maxInitialRequests: 3,
automaticNameDelimiter: '~',
name: true,
cacheGroups: {
vendors: {
test: /[\\/]node_modules[\\/]/,
priority: -10
},
default: {
minChunks: 2,
priority: -20,
reuseExistingChunk: true
}
}
}
-
runtimeChunk
: извлечение кода времени выполнения веб-пакета, для него можно задать: логическое значение, объект - Когда эта конфигурация включена, она переопределит имя, указанное в записи! ! !
optimization: {
runtimeChunk:true,//方式一
runtimeChunk: {
name: entrypoint => `runtimechunk~${entrypoint.name}` //方式二
}
}
разрешить - настроить, как разрешаются модули
-
extensions
: автоматически анализирует определенные расширения, избавляя вас от необходимости писать суффиксы при импорте компонентов, -
alias
: очень важная конфигурация, она может настроить некоторые короткие пути, -
modules
: каталоги, которые вебпак должен искать при разборе модулей, - разное
plugins
,unsafeCache
,enforceExtension
, в принципе бесполезен,
//extensions 后缀可以省略,
import Toast from 'src/components/toast';
// alias ,短路径
import Modal from '../../../components/modal'
//简写
import Modal from 'src/components/modal'
resolve: {
extensions: ['.js', '.jsx','.ts','.tsx', '.scss','.json','.css'],
alias: {
src :path.resolve(__dirname, '../src'),
components :path.resolve(__dirname, '../src/components'),
utils :path.resolve(__dirname, '../src/utils'),
},
modules: ['node_modules'],
},
module.rules - правила компиляции,
-
rules
: То есть предыдущие загрузчики, -
test
: регулярное выражение, сопоставление скомпилированных файлов, -
exclude
: исключить определенные условия, такие как обычно пишутnode_modules
, то есть для фильтрации определенных каталогов/файлов, -
include
: это полная противоположность исключению, - use -
loader
: должен иметь это, это эквивалентноtest
Парсер, соответствующий совпадающему файлу,babel-loader
,style-loader
,sass-loader
,url-loader
и т.д, - use -
options
: Используется совместно с загрузчиком, который может быть строкой или объектом.Его конфигурация может быть сокращена непосредственно в загрузчике.Есть такжеpresets
,plugins
и другие атрибуты; - Давайте посмотрим на пример:
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
use: [
{
loader: 'babel-loader',
options: {
presets: [
['env',
{
targets: {
browsers: CSS_BROWSERS,
},
}],'react', 'es2015', 'stage-0'
],
plugins: [
'transform-runtime',
'add-module-exports',
],
},
},
],
},
{
test: /\.(scss|css)$/,
use: [
'style-loader',
{loader: 'css-loader',options:{plugins: [require('autoprefixer')({browsers: CSS_BROWSERS,}),],sourceMap: true}},
{loader: 'postcss-loader',options:{plugins: [require('autoprefixer')({browsers: CSS_BROWSERS,}),],sourceMap: true}},
{loader: 'sass-loader',options:{sourceMap: true}}
]
},
{
test: /\.(png|jpg|jpeg|gif)$/,
exclude: /node_modules/,
use: [
{
loader: 'url-loader?limit=12&name=images/[name].[hash:8].[ext]',
},
],
},
{
test: /\.(woff|woff2|ttf|eot|svg)$/,
exclude: /node_modules/,
use: [
{
loader: 'file-loader?name=fonts/[name].[hash:8].[ext]',
},
],
},
],
},//首席填坑官∙苏南的专栏
Часто используемые загрузчики в проектах
- компиляция babel-loader, awesome-typescript-loader js*/ts,
- Обработка стилей CSS, таких как css-loader, postcss-loader, sass-loader, less-loader, style-loader
- File-loader, url-loader, html-loader и другая обработка изображений/svg/html,
плагины - плагины
- UglifyJsPlugin
- HotModuleReplacementPlugin
- NoEmitOnErrorsPlugin
- HtmlWebPackPlugin
- ExtractTextPlugin
- PreloadWebpackPlugin
- Подождите, много, много, подробное объяснение плагина будет представлено в следующей главе, пожалуйста, продолжайте обращать внимание.
разница в плагинах/загрузчике
- У некоторых новичков могут возникнуть сомнения.
loader
Пока что? почему до сих порplugins
Ну, что еще вы хотите, чтобы он сделал? -
loader
Роль состоит в том, чтобы проанализировать файл, например, поместитьES6
преобразовать вes5
,четноеES3
, ведь есть злоIE
Хорошо сказаноSass
,Less
анализируется вCSS
,даватьCSS
Автоматически добавлять совместимый префикс, выполнять синтаксический анализ изображения и т. д.; -
plugins
Шерстяная ткань? что он делает? Это дуть на воду, пить чай, грызть дынные семечки и болтать, конечно же этоloader
Прежде чем закончить проект,loader
нерабочее время этоplugins
Начало страданий, оно должно быть правильнымloader
Оптимизация и классификация работы, извлечение сущности (извлечение публичного кода), выполнение обработки сжатия (сжатие js/css/html), вывод указанной директории и т.д..., в любом случае это очень сложно!
webpack-dev-server
- Это немного старомодно и обычно полезно для новичков в дороге.
- Теперь компания объединена
微服务
, весь процесс строится и компилируется онлайн вместе с Dockerfile, nodejs, экспрессом и т.д., поэтому большинство проектов не пойдетwebpack-dev-server
; - Наша среда разработки должна использовать
express
+webpack-dev-middleware
+webpack-hot-middleware
+ '...'; -
contentBase
: Сообщить сервису (серверу разработки) где искать файлы.По умолчанию, если не указано, это будет текущий корневой каталог проекта. -
historyApiFallback
: возможноboolean
,object
, сюда будет указывать входной файл ответа по умолчанию, включая 404, см. следующий пример для объекта: -
compress
: включить сжатие gzip, -
publicPath
: на самом деле это output.publicPath, когда вы его измените, он будет перезаписанoutput
Конфигурация, -
stats
: Вы можете настроить отображаемые сведения о компиляции, -
proxy
: это на самом делеhttp-proxy-middleware
, который может обрабатывать некоторые прокси-запросы.
//方式一:不配置方式二的内容
webpack-dev-server --config webpack/webpack.config.dev.js
//指定 端口: --port=8080
//开启热更新:--hot
//gzip: --compress
//方式二
devServer :
contentBase:'./assets',
host: '0.0.0.0',
port: 9089,
publicPath: '/assets/',
historyApiFallback: {
index: '/views/index.html'
},
/*
匹配路径,进入不同的入口文件,首席填坑官∙苏南的专栏,公Z好:honeyBadger8
rewrites: [
{ from: /^\/$/, to: '/views/landing.html' },
{ from: /^\/subpage/, to: '/views/subpage.html' },
{ from: /./, to: '/views/404.html' }
]
}
*/
compress: true,
noInfo: true,
inline: true,
hot: true,
stats: {
colors: true,
chunks: false
},
proxy:{
'/mockApi': 'https://easy-mock.com/project/5a0aad39eace86040263d' ,//请求可直接写成 /mockApi/api/login...
}
}
Очки, удаленные webpack4:
- module.loaders
- NoErrorsPlugin
- CommonsChunkPlugin
- DefinePlugin
- OccurenceOrderPlugin
- Добро пожаловать, чтобы добавить ..., это, вероятно, то, что я обычно использую
конец:
Выше приведено краткое изложение конфигурации React Custom scaffolding в работе. Надеюсь, это может быть вам полезно. Изменения в webpack4 довольно большие, функции менее мощные, чем раньше, и это также избавляет разработчиков от многих проблем. , и эффективность значительно повышается, но в то же время это означает, что мы меньше знаем о лежащих в основе вещах,Следующая главаЯ поделюсь с вами некоторыми часто используемыми плагинами / анализами использования, добро пожаловать, чтобы продолжать обращать внимание, не забудьте поставить лайк, конечно, вы можете двигать пальцами, чтобы следовать нижепубликаТем более, спасибо за поддержку!
Автор: Сунан-Главный специалист по заполнению карьеров
Ссылка на сайт:blog.CSDN.net/WeChat_4325…
Связь: 912594095, общественное благо:
honeyBadger8
Данная статья является оригинальной и авторские права принадлежат автору. Для коммерческой перепечатки обращайтесь
@IT·平头哥联盟
Авторизованная, некоммерческая перепечатка, просьба указывать оригинальную ссылку и источник.
Дополнительные инструкции:
- Некоторые боссы комментируют, является ли статья оригинальной или нет, и считают необходимым объяснить.Контент, опубликованный выше, представляет собой основу проекта, используемую в настоящее время компанией, Docker, Jenkins, nodejs, экспресс и онлайн-публикацией.
- На следующем рисунке показан пример рендеринга на стороне сервера SSR, предоставленный ранее в этом году.Конфигурация основана на webpack3, но конфигурация, плагины и общая структура каркаса такие же, как и сегодня.
- Новичок в пути, а это тоже front-end разработка.Хотя это относительно несложно, но я не утруждаю себя копировать чужие вещи, спасибо!
- Адрес gitHub: каркас рендеринга на стороне сервера