持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第24天,点击查看活动详情
一、打包图片资源
-
创建文件
-
下载安装 loader 包
npm install --save-dev html-loader url-loader file-loader
-
修改配置文件
const { resolve } = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: './src/index.js', output: { filename: 'built.js', path: resolve(__dirname, 'build') }, module: { rules: [ { test: /\.less$/, // 要使用多个 loader 处理用 use use: ['style-loader', 'css-loader', 'less-loader'] }, { // 问题:默认处理不了 html 中 img 图片 // 处理图片资源 test: /\.(jpg|png|gif)$/, // 使用一个 loader // 下载 url-loader file-loader loader: '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$/, // 处理 html 文件的 img 图片(负责引入 img,从而能被 url-loader 进行处理) loader: 'html-loader' } ] }, plugins: [ new HtmlWebpackPlugin({ template: './src/index.html' }) ], mode: 'development' }; -
运行指令: webpack
二、打包其他资源
-
创建文件
-
修改配置文件
const { resolve } = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: './src/index.js', output: { filename: 'built.js', path: resolve(__dirname, 'build') }, 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]' } } ] }, plugins: [ new HtmlWebpackPlugin({ template: './src/index.html' }) ], mode: 'development' }; -
运行指令: webpack
三、devserver
-
创建文件
-
修改配置文件
const { resolve } = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: './src/index.js', output: { filename: 'built.js', path: resolve(__dirname, 'build') }, 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]' } } ] }, plugins: [ new HtmlWebpackPlugin({ template: './src/index.html' }) ], mode: 'development', devServer: { // 项目构建后路径 contentBase: resolve(__dirname, 'build'), // 启动 gzip 压缩 compress: true, // 端口号 port: 3000, // 自动打开浏览器 open: true } }; -
运行指令: npx webpack-dev-server
四、开发环境配置
1.创建文件
-
修改配置文件
const { resolve } = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: './src/js/index.js', output: { filename: 'js/built.js', path: resolve(__dirname, 'build') }, module: { rules: [ // loader 的配置 { // 处理 less 资源 test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] }, { // 处理 css 资源 test: /\.css$/, use: ['style-loader', 'css-loader'] }, { // 处理图片资源 test: /\.(jpg|png|gif)$/, loader: 'url-loader', options: { limit: 8 * 1024, name: '[hash:10].[ext]', // 关闭 es6 模块化 esModule: false, outputPath: 'imgs' } }, { // 处理 html 中 img 资源 test: /\.html$/, loader: 'html-loader' }, { // 处理其他资源 exclude: /\.(html|js|css|less|jpg|png|gif)/, loader: 'file-loader', options: { name: '[hash:10].[ext]', outputPath: 'media' } } ] }, plugins: [ // plugins 的配置 new HtmlWebpackPlugin({ template: './src/index.html' }) ], mode: 'development', devServer: { contentBase: resolve(__dirname, 'build'), compress: true, port: 3000, open: true } }; -
运行指令: npx webpack-dev-server
五、webpack 生产环境的基本配置
提取 css 成单独文件
-
下载安装包
-
下载插件
npm install --save-dev mini-css-extract-plugin
-
修改配置文件
const { resolve } = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); module.exports = { entry: './src/js/index.js', output: { filename: 'js/built.js', path: resolve(__dirname, 'build') }, module: { rules: [ { test: /\.css$/, use: [ // 创建 style 标签,将样式放入 // 'style-loader', // 这个 loader 取代 style-loader。作用:提取 js 中的 css 成单独文件 MiniCssExtractPlugin.loader, // 将 css 文件整合到 js 文件中 'css-loader' ] } ] }, plugins: [ new HtmlWebpackPlugin({ template: './src/index.html' }), new MiniCssExtractPlugin({ // 对输出的 css 文件进行重命名 filename: 'css/built.css' }) ], mode: 'development' };
六、总结
本篇主要介绍了webpack开发环境中的打包图片资源、打包其他资源、devserver等,以及webpack生产环境的基本配置中的提取css成单独文件,下一篇主要webpack生产环境下的其他配置项。