通过loader打包非js模块
在实际开发过程中,webpack 默认只能打包处理以 .js 后缀结尾的模块,其他非 .js结尾的模块,webpack默认处理不了,需要调用loader加载器才可以正在打包。
loader 加载器可以协助 webpack打包处理特定的文件路径
- less-loader 可以打包处理 .less 相关的文件
- sass-loader 可以打包处理 .scss 相关的文件
- url-loader 可以打包处理 css 中与 url 路径相关的文件
打包处理css文件
- 安装
style-loader
&css-loader
npm i style-loader css-loader -D
- 在
webpack.config.js
的module -> rules 数组中,添加 loader 规则如下
module.exports = {
module: {
rules: [
{
test: /\.css$/, // test属性,规定哪些文件会被转换
use: [ // use属性,在进行转换时,应用哪些 loader
{ loader: 'style-loader'},
{ loader: 'css-loader'}
],
}
]
}
}
use 数组中指定的loader
顺序是固定的
多个loader
的顺序是 从后往前调用
打包处理less
文件
- 安装
npm i less-loader less -D
- 在
webpack.config.js
的module -> rules 数组中,添加 loader 规则如下
module.exports = {
module: {
rules: [
{
test: /\.less$/, // test属性,规定哪些文件会被转换
use: [ // use属性,在进行转换时,应用哪些 loader
{ loader: 'style-loader'},
{ loader: 'css-loader'},
{ loader: 'less-loader'}
],
}
]
}
}
打包处理scss文件
- 安装
sass-loader node-sass
npm i sass-loader node-sass -D
- 在
webpack.config.js
的module -> rules 数组中,添加 loader 规则如下
module.exports = {
module: {
rules: [
{
test: '/\.scss$/',
use: [
{
{loader: 'style-loader'},
{loader: 'css-loader'},
{loader: 'scss-loader'}
}
]
}
]
}
}
配置postCSS自动添加css的兼容前缀
- 安装
postcss-loader
&autoprefixer
npm i postcss-loader autoprefixer -D
- 在项目根目录中创建
postcss
配置文件postcss.config.js
const autoprefixer = require('autoprefixer')
module.exports = {
plugins: [autoprefixer] // 挂载插件
}
- 在webpack.config.js的module -> rules 数组中,添加 loader 规则如下
module.exports = {
module: {
rules: [
{
test: /\.css$/, // test属性,规定哪些文件会被转换
use: [ // use属性,在进行转换时,应用哪些 loader
{ loader: 'style-loader'},
{ loader: 'css-loader'},
{ loader: 'postcss-loader'}
],
}
]
}
}
打包样式表中的图片和字体文件
- 安装
npm i url-loader file-loader -D
webpack.config.j
的module
->rules
添加 loader 规则如下
module.exports = {
module: {
rules: [
{
test: /\.jpg|png|gif|bmp|ttf|eot|svg|woff|woff2$/,
use: 'url-loader?limit=16940'
}
]
}
}
打包处理js文件中的高级语法
- 安装
babel
转换器相关的包babel-loader
&@babel/core
@babel/runtime
npm i babel-loader @babel/core @babel/runtime -D
- 安装
babe;
语法插件相关的包:@babel/preset-env
@babel/plugin-transform-runtime
@babel/plugin-proposal-class-properties
npm i @babel/preset-env @babel/plugin-transform-runtime @babel/plugin-proposal-class-properties -D
- 在项目根目录,创建
babel
配置文件babel.config.js
并初始化基本配置如下
module.exports = {
presets: ['@babel/preset-env'],
plugins: ['@babel/plugin-transform-runtime', '@babel/plugin-proposal-class-properties'],
rules: [
{
test: /\.js$/,
use: 'babel-loader', exclude: /node_modules/
}
]
}
vue组件加载器
- 安装
vue-loader
&vue-template-compiler
npm i vue-loader vue-template-compiler -D
- 在
webpack.config.js
配置文件中,添加vue-loader
的配置项
const VueLoaderPlugin = require('vue-loader/lib/plugin')
module.exports = {
module: {
rules: [
{test: /\.vue$/, loader: 'vue-loader'}
]
},
plugins: [
new VueLoaderPlugin()
]
}
打包与发布
- 修改
package.json
文件中配置webpack
打包命令
scripts: {
"build": "webpack -p",
}
html-webpack-plugin
html-webpack-plugin
的主要作用就是在webpack构建后生成html文件,同时把构建好入口js文件引入到生成的html文件中
安装
Webpack 5
npm i --save-dev html-webpack-plugin yarn add --dev html-webpack-plugin
Webpack 4
npm i --save-dev html-webpack-plugin@4 yarn add --dev html-webpack-plugin@4
webpack.config.js
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
mode:"development",
plugins: [
new HtmlWebpackPlugin({
filename:'index.html',
template:'./public/index.html'
})
]
}