webpack作为模块加载和打包神器
安装node就有npm了,用npm安装webpack
npm i webpack webpack-cli -g 安装全局的webpack
到项目目录下,npm init -y 初始化模块
npm i webpack webpack-cli -D 安装项目局部的webpack,-D是–save-dev的意思,推荐使用
webpack 入口文件名 最后输出到哪个文件的文件名,例如:
npx webpack A.js B.js
那么就会编译A.js,输出到B.js
webpack只能处理JavaScript,处理其他类型的文件,需要安装几个包
npm install css-loader style-loader
假设有个一个abc.css文件,里面定好了样式
那么修改A.js
require("!style-loader!css-loader!./abc.css"); document.write(require("./C.js"));
再打包一次
npx webpack A.js B.js
会出现一个C.js
配置webpack.config.js
module.exports = {
entry: '入口文件的路径',
output: {
path:__dirname,
filename: '最后输出到哪个文件的文件名'
},
module: {
rules: [{
test: '处理什么格式的文件',
use:[
{
loader: '依赖包'
}
]
}
]
}
};
模块化
import $ from “jquery” // 导入jQuery,只需要src当前js文件就可以导入jQuery依赖
loader加载器打包非js模块,比如:
less-loader:打包.less相关文件
sass-loader:打包.scss相关文件
url-loader:打包处理css中与url路径相关的文件
webpack打包处理过程:
先判断是否为js模块,不是就检查是否配置了对应的loader,配置了就是调用loader处理,没有配置就是报错
如果是js模块就判断是否包含了高级js语法,没有包含就直接调用webpack处理,包含了就检查是否配置了babel,配置了就是调用loader处理,没有配置就报错
加载器的使用
npm i style-loader css-loader -D // 安装处理css文件的loader
在webpack.config.js的module -> rules数组中,添加loader规则,例如:
module: {
rules: [
{
test: /\.css$/, use: ["style-loader","css-loader"]
}
]
}
注意:
test表示匹配的文件类型,use表示要调用的loader
use数组中指定的loader顺序是固定的,调用顺序是从后往前调用的
less loader
npm i less-loader less -D
test: /.less$/, use: [“style-loader”,“css-loader”,“less-loader”]
先把less解析为css文件,然后再解析css文件
scss loader
npm i sass-loader node-sass -D
test: /.scss$/, use: [“style-loader”,“css-loader”,“sass-loader”]
打包样式表的图片和字体
npm i url-loader file-loader -D
test: /.jpg|png|gif|bmp|ttf|eot|svg|woff|woff2$/, use: “url-loader?limit=1024”
limit是用来指定图片的大小的,单位是字节(b),只有小于limit大小的图片,才被转换为base64图片
打包js高级语法
安装babel转换器相关的包
npm i babel-loader @babel/core @babel/runtime -D
安装babel语法插件相关的包
npm i @babel/preset-env @babel/plugin-transform-runtime @babel/plugin-proposal-properties -D
配置babel.config.js并初始化
module.exports = {
presets: ["@babel/preset-env"],
plugins: ["@babel/plugin-transform-runtime","@babel/plugin-proposal-properties"]
}
配置webpack.config.js
test: /.js$/, use: “babel-loader”, exclude: /node_modules/
excludes是排除项,表示babel-loader不需要处理node_modules中的js文件
配置postCSS,自动添加css兼容性
npm i postcss-loader autoprefixer -D
配置postcss.config.js,并且初始化
const autoprefixer = require("autoprefixer") // 导入插件
module.exports = {
plugins: [autoprefixer] // 加载插件
}
配置webpack.config.js
test: /.css$/, use: [“style-loader”,“css-loader”,“postcss-loader”]
导入vue单文件组件
import App from “./App.vue”
安装处理vue单文件的loader
npm i vue-loader vue-template-compile -D
添加loader配置文件
处理vue文件的loader需要VueLoaderPlugin插件
const VueLoaderPlugin = require("vue-loader/lib/plugin");
test: /\.vue$/, loader: "vue-loader"
plugins: [
new VueLoaderPlugin()
]
webpack dev-Server和proxy代理
loaders及plugins的处理
resolve/sourceMap
webpack性能优化(TreeShaking,热更新)
具体请看webpack官方文档