Webpack

发布于:2024-05-14 ⋅ 阅读:(158) ⋅ 点赞:(0)

搭建开发环境

问题:之前改代码,需重新打包才能运行查看,效率很低

开发环境:配置webpack-dev-server快速开发应用程序

文档:开发环境 | webpack 中文文档

作用:启动Web服务,自动检测代码变化,热更新到网页 

注意:dist目录和打包内容是在内存里(更新快)

步骤:

1.下载webpack-dev-server软件包到当前项目

npm i webpack-dev-server --save-dev

2.在webpack.config.js文件中设置模式为开发模式

在package.json文件中配置自定义命令

3.使用npm run dev来启动开发服务器,试试热更新效果

webpack-dev-server借助http模块创建8080默认Web服务

默认以public文件夹作为服务器根目录,去显示里面名字为index的网页,如果没有该网页,则会显示成如上图,所以要加具体名称去访问页面

问题:没有css样式和js效果

解决:webpack-dev-server根据配置,打包相关代码在内存当中,以output.path的值作为服务器根目录,所以可以直接自己拼接访问dist目录下内容

 打包之后自动打开某页面:在public文件夹下新建index.html文件

打包模式

打包模式:告知Webpack使用相应模式的内置优化

分类:

设置:

方式1:在webpack.config.js配置文件设置mode选项

方式2:在package.json命令行设置mode参数

注意:命令行设置的优先级高于配置文件中的,推荐使用命令行设置

优化:把main.css打包进login文件夹中

解决:在webpack.config.js文件中找到MiniCssExtractPlugin添加如下代码,路径一定要写相对路径,否则会报错

打包模式的应用

需求:在开发模式下用style-loader内嵌更快,在生产模式下提取css代码

方案1:webpack.config.js配置导出函数,但是局限性大(只接受2种模式)

参考文档:模式(Mode) | webpack 中文文档

方案2(推荐):借助cross-env(跨平台通用)包命令,设置参数区分环境

步骤:

1.下载cross-env软件包到当前项目

npm i cross-env --save-dev

2.在package.json文件中配置自定义命令,传入参数名和值(会绑定到process.env对象下)

 3.在webpack.config.js区分不同环境使用不同配置

4.重新打包观察两种配置区别

方案3:配置不同的webpack.config.js(适用多种模式差异性较大情况)

前端-注入环境变量

需求:前端项目中,开发模式下打印语句生效,生产模式下打印语句失效

问题:cross-env设置的只在Node.js环境生效,前端代码无法访问process.env.NODE_ENV

解决:使用Webpack内置的DefinePlugin插件

文档:DefinePlugin | webpack 中文文档

在webpack.config.js中添加如下代码:

作用:在编译时,将前端代码中匹配的变量名,替换为值或表达式

应用:上线和开发的API基地址切换

开发环境调错

问题:代码被压缩和混淆,报错时无法正确定位源代码位置

source map资源地图功能:可以准确追踪errror和warning在原始代码的位置

设置:在webpack.config.js中配置devtool选项

inline-source-map选项:把源码的位置信息一起打包在js文件内

注意:source map仅适用于开发环境,不要在生产环境使用(防止被轻易查看源码位置),所以需要加判断条件

解析别名alias

问题:路径比较长且相对路径不安全

解析别名:配置模块如何解析,创建import引入路径的别名,来确保模块引入变得更简单

解决:在webpack.config.js中配置解析别名@来代表src绝对路径

如果是js文件或json文件,后面的.js/.json可以省略

配置完后要重启,否则可能修改不生效

优化-CDN使用

CDN定义:内容分发网络,指的是一组分布在各个地区的服务器

作用:把静态资源文件/第三方库放在CDN网络中各个服务器中,供用户就近请求获取

好处:减轻自己服务器请求压力,就近请求物理延迟低,配套缓存策略

需求:开发模式使用本地第三方库,生产模式下使用CDN加载引入

步骤:

1.在html中引入第三方库的CDN地址并用模板语法判断(插入js语法)

2.配置webpack.config.js中externals外部扩展选项(防止某些import的包被打包)

value不能写空字符串或为空

import 'bootstrap/dist/css/bootstrap.min.css'=>'bootstrap/dist/css/bootstrap.min.css':'bootstrap'

import axios from 'axios'=>'axios':'axios'

3.两种模式下打包观察效果

免费前端开源项目CDN:BootCDN - Bootstrap 中文网开源项目免费 CDN 加速服务

也可以使用:https://unpkg.com/+你要查找的项目名,自动生成的链接就可以作为导入的CDN

多页面打包

单页面:单个html文件,切换DOM的方式实现不同业务逻辑展示

多页面:多个html文件,切换页面实现不同业务逻辑展示

步骤:

1.准备源码(html,css,js)放入相应位置,并改用模块化语法导入导出

注意:没有到导入和导出,只是为了让目标js代码被一起打包进来,参与html最后的运行,直接导入js文件即可

import 'js文件路径'

 wangeditor比较特殊,使用如下代码导入:

const wangEditor=require('@wangeditor/editor')

2.下载form-serialize包并导入到核心代码中使用

3.配置webpack.config.js多入口和多页面的设置

4.重新打包观察效果

优化-分割公共代码

需求:把2个以上页面引用的公共代码提取

步骤:

1.配置webpack.config.js的splitChunks分隔功能

2.打包观察效果


网站公告

今日签到

点亮在社区的每一天
去签到