在小编的上一篇博客分析之中咱们的webpack工具已经能够帮咱们实现最基本的前端页面需求,咱们本身搭建的webpack怎能这么low呢,今天再来二次完善一下咱们的工具包,这篇分享是衔接上一篇文章的。javascript
在主页中引入已有的静态资源文件,咱们在public栏中放入js文件夹(用于存放已有的静态资源文件),index
文件直接引入,那可不会容许你这样。webpack:我都已经跟你把转义和输出都写好了,你还本身引入文件,我才不在帮你把外部文件再转义好加进来了呢,太麻烦我了?那只能再给他买上礼物(安装插件),安抚一下了。 css
npm install copy-webpack-plugin -D
复制代码
一样的引入以后咱们配置一下webpack.config.js文件html
const CopyWebpackPlugin = require('copy-webpack-plugin');
module.exports = {
plugins: [
new CopyWebpackPlugin([
{
from: 'public/js/*.js',
to: path.resolve(__dirname, 'dist', 'js'),
flatten: true, // 该参数设置拷贝时不会把整个文件目录拷贝下来
},
], {
ignore: ['alone.js'] // 这边是筛选参数,写进去public下该文件不会被拷贝过去,能够没有需求能够不设置
})
]
}
复制代码
咱们知道没有抽离出来CSS文件打包,打包后样式实现是最后的js文件去实现,这样能够分担一下打包成的js文件的容量,一样的抽离出来的CSS文件咱们也进行依稀压缩,导入插件前端
npm install mini-css-extract-plugin -D
复制代码
再次配置一下webpack.config.js文件java
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
plugins: [
new MiniCssExtractPlugin({
filename: 'css/[name].css'
})
],
module: {
rules: [
{
test: /\.(le|c)ss$/,
use: [
MiniCssExtractPlugin.loader, //替换以前的 style-loader
'css-loader', {
loader: 'postcss-loader',
options: {
plugins: function () {
return [
require('autoprefixer')({
"overrideBrowserslist": [
"defaults"
]
})
]
}
}
}, 'less-loader'
],
exclude: /node_modules/
}
]
}
}
复制代码
引入压缩插件node
npm install optimize-css-assets-webpack-plugin -D
复制代码
而后配置引用一下该插件webpack
//webpack.config.js
const OptimizeCssPlugin = require('optimize-css-assets-webpack-plugin');
module.exports = {
plugins: [
// 这边直接调用就行了不须要调配什么参数
new OptimizeCssPlugin()
],
}
复制代码
这是打包工具必备的一个功能,能让咱们修改代码保存之后自动更新,webpack插件中包含此功能对象咱们直接调用web
//webpack.config.js
const webpack = require('webpack');
module.exports = {
//....
devServer: {
hot: true
},
plugins: [
new webpack.HotModuleReplacementPlugin() //热更新插件
]
}
复制代码
到目前为止页面的功能已是基本完善,那么多页面webpack又是如何处理的呢?咱们直接定义多个入口文件实现多页面打包,在配置页面的时候咱们要加上chunks参数配置,要否则界面会将入口js文件都加载而没办法对应。npm
//webpack.config.js
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: {
index: './src/index.js',
login: './src/login.js'
},
output: {
path: path.resolve(__dirname, 'dist'),
filename: '[name].[hash:6].js'
},
//...
plugins: [
new HtmlWebpackPlugin({
template: './public/index.html',
filename: 'index.html', //打包后的文件名
chunks: ['index']
}),
new HtmlWebpackPlugin({
template: './public/login.html',
filename: 'login.html', //打包后的文件名
chunks: ['login']
}),
]
}
复制代码
那么到这里基础架构功能已经完成了,后续就是对于webpack的一些优化措施。bash