一、创建配置文件
1.创建文件 webpack.config.js
webpack.config.js 是 webpack 的配置文件
作用: 指示 webpack 干哪些活(当运行 webpack 指令时,会加载里面的配置)
所有构建工具都是基于 nodejs 平台运行的——模块化默认采用commonjs。
2.配置内容
module.exports = {entry: './src/js/index.js', // 入口文件output: { // 输出配置filename: './built.js', // 输出文件名path: resolve(__dirname, 'build/js') // 输出文件路径配置},// loader 的配置module:{rules:[// 详细 loader 配置// 不同文件必须配置不同 loader 处理]},// plugins 的配置plugins: [// 详细 plugins 的配置],mode: 'development' //开发环境};
use 数组中 loader 执行顺序:从右到左,从下到上 依次执行
loader: 1. 下载 2. 使用(配置loader)
plugins: 1. 下载 2. 引入 3. 使用
要使用多个 loader 处理用 use,使用一个 loader 处理用loader
3.打包样式资源(css和less)
// loader的配置module: {rules: [// 详细loader配置// 不同文件必须配置不同loader处理{test: /\.css$/,// 使用哪些loader进行处理use: ['style-loader','css-loader']},{test: /\.less$/,use: ['style-loader','css-loader',// 需要下载 less-loader和less'less-loader']}]},
3.创建style标签,将js中的样式资源插入进行,添加到head中生效'style-loader'
2.将css文件变成commonjs模块加载js中,里面内容是样式字符串'css-loader'
1.将less文件编译成css文件'less-loader'
4.打包 HTML 资源
引入打包 HTML 的插件const HtmlWebpackPlugin = require('html-webpack-plugin');
功能:默认会创建一个空的HTML,自动引入打包输出的所有资源(JS/CSS)
可以传入配置对象(template 模板复制 ‘./src/index.html’ 文件,并自动引入打包输出的所有资源(JS/CSS))
plugins: [// plugins的配置// 需求:需要有结构的HTML文件new HtmlWebpackPlugin({template: './src/index.html'})],
5.打包图片资源
module:{rules:[{// 问题:默认处理不了html中img图片// 处理图片资源test: /\.(jpg|png|gif)$/,// 下载 url-loader file-loaderloader: 'url-loader',options: {// 图片大小小于8kb,就会被base64处理// 优点: 减少请求数量(减轻服务器压力)// 缺点:图片体积会更大(文件请求速度更慢)limit: 8 * 1024,// 问题:因为url-loader默认使用es6模块化解析,而html-loader引入图片是commonjs// 解析时会出问题:[object Module]// 解决:关闭url-loader的es6模块化,使用commonjs解析esModule: false,// 给图片进行重命名// [hash:10]取图片的hash的前10位// [ext]取文件原来扩展名name: '[hash:10].[ext]'}},{test: /\.(html|htm)$/,// 处理html文件的img图片(负责引入img,从而能被url-loader进行处理)loader: 'html-loader'}]}
6.打包其他资源(如字体图标)
module: {rules: [{test: /\.css$/,use: ['style-loader', 'css-loader']},// 打包其他资源(除了html/js/css资源以外的资源){// 排除css/js/html资源exclude: /\.(css|js|html|less)$/,loader: 'file-loader',options: {name: '[hash:10].[ext]'}}]},
7.devserver
开发服务器 devServer:用来自动化(自动编译,自动打开浏览器,自动刷新浏览器~~)
特点:只会在内存中编译打包,不会有任何输出
启动 devServer 指令为:npx webpack-dev-server
devServer: {// 项目构建后路径contentBase: resolve(__dirname, 'build'),// 启动gzip压缩compress: true,// 端口号port: 3333,// 自动打开浏览器open: true}
二、目的
开发环境配置:能让代码运行
运行项目指令:
webpack 会将打包结果输出出去
npx webpack-dev-server 只会在内存中编译打包,没有输出
