предисловие
Первоначальное намерение:Поделитесь несколькими полезными вещами на работе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? 》