предисловие
Первоначальное намерение:Поделитесь несколькими полезными вещами на работеPlugin
, я надеюсь, что это поможет всем, если вам это не нравится, не распыляйте его.
html-webpack-plugin
использовать:Упакуйте шаблон страницы в каталог dist, и по умолчанию автоматически импортируется js или css.
Установить
cnpm i html-webpack-plugin@3.2.0 -D
настроить
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>首页</title>
</head>
<body>
<div id="app"></div>
</body>
</html>
webpack.config.js
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
plugins: [
new HtmlWebpackPlugin({
template: './index.html', // 以咱们本地的index.html文件为基础模板
filename: "index.html", // 输出到dist目录下的文件名称
}),
]
}
HtmlWebpackPlugin
Получите объект и настройте его самостоятельно, подробнее см.здесь
clean-webpack-plugin
использовать:Он используется для удаления каталога dist каждый раз, когда он упакован.
Установить
cnpm i clean-webpack-plugin -D
настроить
webpack.config.js
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
module.exports = {
plugins: [
new CleanWebpackPlugin()
]
}
extract-text-webpack-plugin
использовать:Будуcss
стиль отjs
Файл извлекается и, наконец, синтезируется вcss
файл, плагин поддерживает толькоwebpack4
предыдущая версия, если вы в настоящее времяwebpack4
и выше версии сообщат об ошибке.
Установить
cnpm i extract-text-webpack-plugin -D
настроить
webpack.config.js
const extractTextPlugin = require('extract-text-webpack-plugin');
module.exports = {
module: {
rules: [
{
test: /\.css$/,
use: extractTextPlugin.extract({
fallback: "style-loader",
use: "css-loader"
})
}
]
},
plugins: [
new extractTextPlugin({
filename: "[name].css",
allChunks: true
})
]
}
В приведенной выше конфигурацииextractTextPlugin.extract
внутренние параметрыfallback
выполняется, когда извлечение не удалосьstyle-loader
.use
который используется при извлеченииcss-loader
для преобразования,plugins
конфигурация внутриfilename
был окончательно объединен.css
имя файла, когдаallChunks
дляfalse
, только инициализированныйcss
файл дляtrue
извлекает асинхронноcss
документ.
mini-css-extract-plugin
использовать:Этот плагин такой же, как и вышеexract-text-webpack-plugin
Это то же самое, что и стиль css, с той лишь разницей, что использование отличается.webpack4
Рекомендуется после версии
Установить
cnpm i mini-css-extract-plugin -D
настроить
webpack.config.js
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
module: {
rules: [
{
test: /\.css$/,
use: [
MiniCssExtractPlugin.loader,
"css-loader"
]
}
]
},
plugins: [
new MiniCssExtractPlugin({
filename: "css/[name].css",
chunkFilename: "css/[name].css"
})
]
}
В приведенной выше конфигурации вы можете увидеть использование иexract-text-webpack-plugin
Разные, давайте посмотрим на их разницу.
-
loader
номер конфигурацииfallback
- существует
plugin
установить вfilename
Загрузить имя ресурса синхронно, а также указать асинхронную загрузкуcss
ресурсchunkFilename
- Плагин поддерживает настройку
publicPath
Используется для настройки асинхронной загрузкиcss
маршрут -
exract-text-webpack-plugin
будет извлекать только файл css,mini-css-extract-plugin
Он будет извлечен в соответствии с асинхронным файлом.
webpack.optimize.CommonsChunkPlugin
использовать:Он используется для извлечения общедоступного кода на странице для оптимизации скорости загрузки.CommonsChunkPlugin
только поддержкаWebpack4
До.
Установить
该插件是Webpack内置的,不需要安装。
настроить
main.js
import Vue from "vue"
webpack.config.js
module.exports = {
entry: {
main: "./main.js",
vendor: ["Vue"]
},
plugins: [
new Webpack.optimize.CommonsChunkPlugin({
name: "vendor",
filename: "[name].js"
}),
new Webpack.optimize.CommonsChunkPlugin({
name: "common",
chunks: ["vendor"],
filename: "[name].js"
})
]
}
В приведенной выше конфигурации мы поместилиmain.js
и файлы зависимостей внутри него помещаютсяVue.js
Извлеките его для оптимизации и избегайте загрузки одной из страниц каждый раз, когда вы упаковываете или посещаете другие страницы.js
файл, мы сначала помещаемVue
Извлекается базовая среда, поскольку базовая среда почти не меняется, поэтому необходима оптимизация извлечения. поставь это сноваWebpack
Код среды выполнения также извлекается, так чтоvendor
Он не изменится, даже если его снова запаковать, вы можете перейти к кешу браузера.
optimization.SplitChunks
использовать:Эта функция такая же, как и вышеwebpack.optimize.CommonsChunkPlugin
то же, толькоoptimization.SplitChunks
даwebpack4
рекомендуется для последующего использования
Установить
内置的,不需要安装。
настроить
main.js
import Vue from "vue"
console.log(Vue)
import("./news")
news.js
import Vue from "vue"
console.log(Vue)
webpack.config.js
module.exports = {
mode: "development",
entry: {
main: "./main.js"
},
output: {
filename: "[name].js",
path: __dirname + "/dist"
},
optimization: {
splitChunks: {
chunks: "all"
}
},
}
В приведенной выше конфигурацииsplitChunks
изchunks
дляall
да для всехchunk
Оба вступают в силу, по умолчанию только дляasync
Асинхронные работы.
splitChunks
Также существует автоматическое извлечение по умолчанию, и требования по умолчанию следующие:
- Извлеченные модули взяты из
node_module
содержание - Модули больше 30kb
- При загрузке по запросу максимальное значение запрашиваемых ресурсов меньше или равно 5
- Максимальное количество параллельных запросов при первой загрузке меньше или равно 3
DefinePlugin
использовать:Используется для внедрения глобальных переменных, обычно используемых в переменных среды.
Установить
无需安装,webpack内置
настроить
webpack.config.js
const Webpack = require("webpack")
module.exports = {
plugins: [
new Webpack.DefinePlugin({
STR: JSON.stringify("蛙人"),
"process.env": JSON.stringify("dev"),
name: "蛙人"
})
]
}
В приведенной выше конфигурацииDefinePlugin
получает объект сkey
значение соответствуетvalue
значение, этоvalue
Значение представляет собой фрагмент кода, вы можете видеть вышеname
Это даст ошибку蛙人 is not defined
,Обратите внимание,value
Значение должно быть переменной или фрагментом кода..
ProvidePlugin
использовать:Используется для определения глобальных переменных, таких как 100 страниц.vue
, введение каждой страницы только увеличит нагрузку, непосредственно вwebpackProvide
Смонтировать переменную на линии, не переходя к одиннадцати введенным.
Установить
无需安装,webpack内置
настроить
webpack.config.js
const Webpack = require("webpack")
module.exports = {
plugins: [
new Webpack.ProvidePlugin({
"Vue": ["vue", "default"]
})
]
}
В приведенной выше конфигурацииProvidePlugin
получает объект,key
значение - используемая переменная,value
Значение первого параметра равноVue
модуль, второй параметр берется по умолчаниюEs Module.default
характеристики.import
По умолчанию импортируетсяEs Module
объект, имеющийdefault
Это свойство является объектом объекта
hot-module-replacement-plugin
использовать:Включить горячее обновление модуля
Установить
无需安装,webpack内置
настроить
webpack.config.js
const Webpack = require("webpack")
module.exports = {
plugins: [
new Webpack.HotModuleReplacementPlugin()
]
}
IgnorePlugin
использовать:Используется для фильтрации упакованных файлов и уменьшения размера пакета.
Установить
无需安装,webpack内置
настроить
webpack.config.js
const Webpack = require("webpack")
module.exports = {
plugins: [
new Webpack.IgnorePlugin(/.\/lib/, /element-ui/)
]
}
uglifyjs-webpack-plugin
использовать:для сжатияjs
файл дляwebpack4
версия выше.
Установить
cnpm install uglifyjs-webpack-plugin -D
настроить
webpack.config.js
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
module.exports = {
optimization: {
minimizer: [
new UglifyJsPlugin({
test: /\.js(\?.*)?$/i,
exclude: /node_modules/
})
]
}
}
copy-webpack-plugin
использовать:Используется для копирования файлов в каталог
Установить
cnpm i copy-webpack-plugin@6.4.1 -D
настроить
webpack.config.js
const CopyWebpackPlugin=require('copy-webpack-plugin');
module.exports = {
plugins: [
new CopyWebpackPlugin({
patterns: [
{
from: "./main.js",
to: __dirname + "/dist/js",
toType: "dir"
}
]
})
]
}
В приведенной выше конфигурацииmain.js
скопировать вdist
в каталогеjs
внутри,toType
По умолчаниюfile
, также можно установитьdir
, потому что яdist
нет каталогаjs
содержание.
optimize-css-assets-webpack-plugin
использовать:Используется для сжатия стилей css
Установить
cnpm i optimize-css-assets-webpack-plugin -D
настроить
webpack.config.js
const OptimizeCssAssetsWebpackPlugin = require("optimize-css-assets-webpack-plugin")
module.exports = {
plugins: [
new OptimizeCssAssetsWebpackPlugin(),
]
}
imagemin-webpack-plugin
использовать:для сжатия изображений
Установить
cnpm i imagemin-webpack-plugin -D
настроить
webpack.config.js
const ImageminPlugin = require('imagemin-webpack-plugin').default
module.exports = {
plugins: [
new ImageminPlugin({
test: /\.(jpe?g|png|gif|svg)$/i
})
]
}
friendly-errors-webpack-plugin
использовать:Украсьте консоль, хорошо подскажите ошибки,. Мы не хотим, чтобы наш терминал запускался в беспорядке, как это
Установить
cnpm i friendly-errors-webpack-plugin -D
настроить
webpack.config.js
const FriendlyErrorsWebpackPlugin = require('friendly-errors-webpack-plugin');
const devServer = {
publicPath: "/",
port: 9527,
host: "localhost",
open: true,
hotOnly: true,
stats: 'errors-only'
}
module.exports = {
plugins: [
new FriendlyErrorsWebpackPlugin({
compilationSuccessInfo: {
notes: ['蛙人你好,系统正运行在http://localhost:' + devServer.port]
},
clearConsole: true,
})
],
devServer
}
Завершите выполнение приведенного выше кода. смотрите результат ниже
благодарный
Спасибо за чтение этой статьи, я надеюсь, что она может быть вам полезна, и если у вас есть какие-либо вопросы, пожалуйста, поправьте меня.
Я водолаз (✿◡‿◡), если вы считаете, что писать можно, ставьте лайк ❤.
Заинтересованные друзья могут присоединиться[Группа обмена развлекательными кругами]Приветствую всех для обсуждения
Писать нелегко,"Мне нравится" + "Смотрел" + "Ретвитнуть"Спасибо за вашу поддержку ❤
Хорошие статьи в прошлом
«Рука учит вас писать компонент VUE для публикации в NPM и может быть введен во внешнюю цепочку».
"Поделитесь 12 загрузчиками, обычно используемыми в Webpack"
«Поговорим о том, что такое CommonJs и Es Module и чем они отличаются»
«Карта с простым пониманием структуры данных»
«Знаете ли вы все приемы JavaScript, используемые в этих работах? 》
«Вы действительно понимаете функциональные особенности в ES6? 》