在系统性的学习webpack之前,在vue.js中野稍微了解过一点webpack,因为需要用webpack结合vue进行功能的实现。
当时不是很理解webpack,所以来系统性的学习一下。
webpack他是一个模块打包工具,主要是来在浏览器中打包JavaScript代码。下面开始我们的webpack学习之旅了。
安装前先npm初始化
npm init -y
npm i webpack webpack-cli -D
当然 用yarn 也是可以的 至于要把npm换成yarn就可以了。对了,因为webpack使用nodejs封装完成的,所以用的是nodejs语法。
let path = require('path') // 相对路径变绝对路径
module.exports = {
mode: 'production', // 模式 默认 production development
entry: './src/index', // 入口
output: {
filename: 'bundle.[hash:8].js', // hash: 8只显示8位
path: path.resolve(__dirname, 'dist'),
publicPath: '' // // 给所有打包文件引入时加前缀,包括css,js,img,如果只想处理图片可以单独在url-loader配置中加publicPath
}
}
这里的path模块需要导入一下let path = require('path')
本地服务
npm i webpack-dev-server -D
devServer: {
port: 3000,
progress: true // 滚动条
contentBase: './build' // 起服务的地址
open: true // 自动打开浏览器
compress: true // gzip压缩
}
复制html
npm i html-webpack-plugin -D
let HtmlWebpackPlugin = require('html-webpack-plugin')
plugins: [ // 放着所有webpack插件
new HtmlWebpackPlugin({ // 用于使用模板打包时生成index.html文件,并且在run dev时会将模板文件也打包到内存中
template: './index.html', // 模板文件
filename: 'index.html', // 打包后生成文件
hash: true, // 添加hash值解决缓存问题
minify: { // 对打包的html模板进行压缩
removeAttributeQuotes: true, // 删除属性双引号
collapseWhitespace: true // 折叠空行变成一行
}
})
]
为什么要使用这个插件呢?
1)为html文件中引入的外部资源如script、link动态添加每次compile后的hash,防止引用缓存的外部文件问题
2)可以生成创建html入口文件,比如单页面可以生成一个html文件入口,配置N个html-webpack-plugin可以生成N个页面入口
处理css
npm i css-loader style-loader -D
// css-loader 作用:用来解析@import这种语法
// style-loader 作用:把 css 插入到head标签中
// loader的执行顺序: 默认是从右向左(从下向上)
module: { // 模块
rules: [ // 规则
// style-loader 把css插入head标签中
// loader 功能单一
// 多个loader 需要 []
// 顺便默认从右到左
// 也可以写成对象方式
{
test: /\.css$/, // css 处理
// use: 'css-loader'
// use: ['style-loader', 'css-loader'],
use: [
// {
// loader: 'style-loader',
// options: {
// insertAt: 'top' // 将css标签插入最顶头 这样可以自定义style不被覆盖
// }
// },
MiniCssExtractPlugin.loader,
'css-loader', // css-loader 用来解析@import这种语法,
'postcss-loader'
]
}
]
}
处理less
npm i less-loader
{
test: /\.less$/, // less 处理
// use: 'css-loader'
// use: ['style-loader', 'css-loader'],
use: [
// {
// loader: 'style-loader',
// options: {
// insertAt: 'top' // 将css标签插入最顶头 这样可以自定义style不被覆盖
// }
// },
MiniCssExtractPlugin.loader, // 这样相当于抽离成一个css文件, 如果希望抽离成分别不同的css, 需要再引入MiniCssExtractPlugin,再配置
'css-loader', // css-loader 用来解析@import这种语法
'postcss-loader',
'less-loader' // less-loader less -> css
// sass node-sass sass-loader
// stylus stylus-loader
]
}
插件有点多,剩下的慢慢在学习整理。感觉webpack就是要记住比较多的插件和使用方法,但是忘了使用方法也可以去npm上搜索插件使用方法.