一、开发环境快速入门
参考网址:
中文:https://webpack.docschina.org/
英文:https://webpack.js.org/
参考视频:https://www.bilibili.com/video/BV1e7411j7T5?p=17&spm_id_from=pageDriver
开发环境介绍
能让代码本地调试运行的环境,不需要注意优化,兼容等方面
初步使用:
参考网址:https://webpack.docschina.org/guides/getting-started/
基本安装
首先我们创建一个目录,初始化 npm,然后 在本地安装 webpack,接着安装 webpack-cli(此工具用于在命令行中运行 webpack):
npm init -y npm install webpack webpack-cli -D
目录创建
src/index.js
import bar from './bar.js'; bar();
src/bar.js
export default function bar() { console.log("hello,webpack!") }
webpack.config.js
const path = require('path'); module.exports = { entry: './src/index.js', // 入口文件 output: { // 输出配置 filename: 'bundle.js', // 输出文件名 path: path.resolve(__dirname, 'dist'), // 输出文件路径配置 }, mode: 'development' //开发环境 // mode: 'production' 生产环境 };
index.html
起步
命令:npx webpack
当前webpack版本
"webpack": "^5.36.2", "webpack-cli": "^4.6.0",
打包样式资源
安装包
npm i -D webpack webpack-cli style-loader css-loader less less-loader
#指定版本,命令输入在一行 npm i -D webpack@5.36.2 webpack-cli@4.7.0 style-loader@2.0.0 css-loader@5.2.4 less@4.1.1 less-loader@8.1.1 #或者一个一个安装 npm i -D webpack@5.36.2 npm i -D webpack-cli@4.7.0 npm i -D style-loader@2.0.0 npm i -D css-loader@5.2.4 npm i -D less@4.1.1 npm i -D less-loader@8.1.1
配置
webpack.config.js中添加module
//webpack.config.js中 const path = require('path'); module.exports = { entry: './src/index.js', // 入口文件 output: { // 输出配置 filename: 'bundle.js', // 输出文件名 path: path.resolve(__dirname, 'dist'), // 输出文件路径配置 }, mode: 'development', //开发环境 // mode: 'production' 生产环境 module: { rules: [ // 不同文件必须配置不同loader处理 { // 匹配哪些文件 test: /\.css$/, // 使用哪些loader进行处理 use: [ // use数组中loader执行顺序:从右到左,从下到上 依次执行 'style-loader', 'css-loader' ] }, { test: /\.less$/, use: [ 'style-loader', 'css-loader', 'less-loader' ] } ] } };
说明
功能:
把css打包到js中
打包命令:
npx webpack
npx主要用局部安装的命令执行
打包html资源
安装包
# 接打包样式资源的基础上继续安装 npm i -D html-webpack-plugin # 指定版本 npm i -D html-webpack-plugin@5.3.1
配置
//webpack.config.js const path = require('path'); //导入包 const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: './src/index.js', output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist'), }, mode: 'development', module: { rules: [ { test: /\.css$/, use: [ 'style-loader', 'css-loader' ] }, { test: /\.less$/, use: [ 'style-loader', 'css-loader', 'less-loader' ] } ] }, plugins: [ // 设置相应插件 new HtmlWebpackPlugin({ // 复制 './src/index.html' 文件,并自动引入打包输出的所有资源(JS/CSS) template: './src/index.html' }) ] };
说明
作用:
复制设置模板中的html(没有设置,则会创建一个空的HTML),并自动引入打包输出的所有资源(JS/CSS),存放到output设置的目录下
打包命令:
npx webpack
打包图片资源
作用:本质上来讲,创建一个HTML,把图片资源打包到导出目录下,并自动配置好引用
安装包
npm i html-loader url-loader file-loader -D #指定版本,命令输入在一行 npm i -D html-loader@2.1.2 file-loader@6.2.0 url-loader@4.1.1 #或者一个一个安装 npm i -D html-loader@2.1.2 npm i -D file-loader@6.2.0 npm i -D url-loader@4.1.1
配置
const { resolve } = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: './src/index.js', output: { filename: 'bundle.js', path: resolve(__dirname, 'dist') }, module: { rules: [ { test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] }, { // 处理图片资源 test: /\.(jpg|png|gif)$/, // 使用一个loader loader: 'url-loader', options: { // 图片大小小于limit,就会被base64处理 limit: 8 * 1024, // 解析时会出问题:[object Module] esModule: false, // 给图片进行重命名 name: '[hash:10].[ext]' } }, { test: /\.html$/, // 处理html文件的img图片(负责引入img,从而能被url-loader进行处理) loader: 'html-loader', options: { // webpack5需要html-loader也配置 esModule:false esModule: false, } } ] }, plugins: [ new HtmlWebpackPlugin({ template: './src/index.html' }) ], mode: 'development' };
打包字体图标和其他资源
安装包
#打包图片资源的时候已经安装
配置
const { resolve } = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: './src/index.js', output: { filename: 'bundle.js', path: resolve(__dirname, 'dist') }, 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
安装包
npm i -D webpack-dev-server@3.11.2
配置
const { resolve } = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: './src/index.js', output: { filename: 'build.js', path: resolve(__dirname, 'dist') }, 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, 'dist'), // 启动gzip压缩 compress: true, // 端口号 port: 3000, // 自动打开浏览器 open: true } };
说明
作用:
用来自动化(自动编译,自动打开浏览器,自动刷新浏览器...)
特点:
只会在内存中编译打包,不会有任何输出
启动devServer命令:
npx webpack serve
二、开发环境基本配置(综合配置)
初始化
最新版本安装(可能出现兼容性问题)
npm init -y npm i webpack webpack-cli css-loader style-loader less-loader less html-webpack-plugin html-loader url-loader file-loader webpack-dev-server -D
指定版本安装
#指定版本,命令输入在一行 npm i -D webpack@5.36.2 webpack-cli@4.6.0 css-loader@5.2.4 style-loader@2.0.0 less-loader@8.1.1 less@4.1.1 html-webpack-plugin@5.3.1 html-loader@2.1.2 url-loader@4.1.1 file-loader@6.2.0 webpack-dev-server@3.11.2 #或者一个一个安装 npm i -D webpack@5.36.2 npm i -D webpack-cli@4.7.0 npm i -D style-loader@2.0.0 npm i -D css-loader@5.2.4 npm i -D less@4.1.1 npm i -D less-loader@8.1.1 npm i -D html-webpack-plugin@5.3.1 npm i -D html-loader@2.1.2 npm i -D file-loader@6.2.0 npm i -D url-loader@4.1.1 npm i -D webpack-dev-server@3.11.2
当前版本(防止版本不同造成的错误)
"devDependencies": { "css-loader": "^5.2.4", "file-loader": "^6.2.0", "html-loader": "^2.1.2", "html-webpack-plugin": "^5.3.1", "less": "^4.1.1", "less-loader": "^8.1.1", "style-loader": "^2.0.0", "url-loader": "^4.1.1", "webpack": "^5.36.2", "webpack-cli": "^4.6.0", "webpack-dev-server": "^3.11.2" },
配置
/* 开发环境配置:能让代码运行 运行项目指令: npx webpack 会将打包结果输出出去 npx webpack serve 只会在内存中编译打包,没有输出 */ const { resolve } = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: './src/js/index.js', output: { filename: 'js/bundle.js', path: resolve(__dirname, 'dist') }, 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', options: { // webpack5需要html-loader也配置 esModule:false esModule: false, } }, { // 处理其他资源 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, 'dist'), compress: true, port: 3000, open: true } };
说明
入口路径: './src/js/index.js'
js输出路径: './dist/js/bundle.js'
输出目录: path: resolve(__dirname, 'dist')
index.html模板入口路径: './src/index.html'
index.html模板输出路径:'./dist/index.html'
处理图片资源配置中出现的outputPath: 'imgs'为设置图片输出目录,在'./dist/imgs/'目录里
处理其他资源配置中出现的outputPath: 'media'为设置其他资源输出目录,在'./dist/media/'目录里
样式都打包在'./dist/js/bundle.js'中,不需要另外设置目录
目录划分
- ./scr/js 存放js文件
- ./src/imgs 存放图片
- ./src/css 存放css
- ./src/media 存放其他资源,比如字体
执行命令:npx webpack serve