介绍

image.png

image.png

=======================

1、watch 模式(用得少)

image.png
唯一的问题是不会自动刷新页面,需要手动刷新。

方式一:配置

在导出的配置中(一般是项目中 webpack.config.js),module.exports = { } 中添加 属性watch: true;
image.png

方式二:启动webpack命令

在项目中package.json文件中的scripts属性,添加一个watch脚本,然后运行。这个是通过webpack cli处理的
image.png

=======================

2、dev-server(用得多)

和watch相比,文件修改后会自动打包并刷新页面

这个是基于nodeJS的一个框架express搭建的本地服务器,所有文件都是放入内存,这样会更快,少了读取打包文件再放入内存的环节。
正常:构架build,外部运行打包文件,文件放入内存,浏览器运行
dev-serve:打包构建,文件放入内存,浏览器运行

事实上webpack-dev-server使用了一个库叫memfs(意思是memory-file system,内存文件系统,第三方开发的)
image.png

安装

  1. npm install webpack-dev-server -D

基本配置,运行

用了这个就没必要用watch模式了,记得把上面watch : true 去掉或者注释掉。

理论上来说,如果你安装了全局的webpack 和 webpack cli,然后通过下面命令就可以直接启动服务器。

  1. webpack serve

为了方便,可以把这个命令放入 package.json 里面,通过npm run serve运行,如下图
image.png
然后webpack就会把代码打包编译(没有生成dist文件夹,而是放到内存),然后启动一个服务器,默认的位置和端口是 http://localhost:8080/
image.png

访问

打开浏览器,输入网址访问。
image.png

其他配置

在这里加一个devServer属性,就可以进行配置
image.png

contentbase 静态资源文件夹

如果有的资源没跟着打包,又找不到,就会在这个属性所指向的路径里面找。
image.png
假设有一个引入的资源叫abc.js,这个资源没有通过webpack打包,因为入口及入口下的文件没有一个文件对他进行过引入,因此不会跟着打包。
image.png
因此运行服务器后,webpack找不到这个文件,只要设置了contentbase 属性对应的文件夹,就会去这个文件夹里面找。
image.png
image.png

hot 模块热替换(重要)

HMR的全称是Hot Module Replacement,翻译为模块热替换。
应用程序运行过程中,替换、添加、删除模块,而无需重新刷新整个页面;
image.png
配置打开,重新运行dev server
image.png
在项目入口处,指定哪些模块要热替换,如下图的element.js,还可以跟一个回调函数,加入这个模块更新了就执行代码。
image.png

image.png

image.png

热替换原理(重要)

image.png

image.png
image.png

host 主机、port 端口(重要)

image.png
image.png
简单来说,设置成0.0.0.0,别人和你同一个局域网的,可以通过访问你的ip地址+端口号,来访问你搭建好的本地服务器。相当于你的电脑变成临时的开发服务器给别人访问。
而自己访问的话,windows电脑输入0.0.0.0:7777 可能访问失败的,通过自己ip地址访问就可以了,或者127.0.0.1
image.png

compress 压缩JS(重要)

是否为静态文件开启gzip compression。

我们构架好的js代码(如bundle.js等),放到服务器上运行。此时访问服务器,服务器会给我们的浏览器发送js文件,这个文件多大,就发送多大,如下图。
image.png

如果开启了gzip压缩,那么服务器给我们发送bundle.js文件是压缩过的,文件大小能少大概60%,浏览器接收后会解压然后运行,相当于牺牲一点cpu运算,能减少服务器传输压力,减少用户等待时间。
image.png image.png
image.png

开发时自己电脑上可以不开,因为内存传输给浏览器速度极快,感受不出来,开了反而增加cpu算力。

Proxy 代理(重要)

主要是解决跨域问题,可以查看 https://www.yuque.com/yejielin/mypn47/bleits#XPUdo
image.png
配置:

image.png

假设:
你的电脑ip地址是:192.168.0.100,
前端服务器ip地址是:192.168.0.200,端口号7777
假设现在发送一个请求地址是”http://192.168.0.200:7777/api/getUserName",

如果没有设置代理,那么正常浏览器会把发送方的源origin,设置为你自己的ip地址192.168.0.100 ,

这样和服务器的ip地址不一致,服务器可以接收并返回数据,浏览器看到你自己的ip地址192.168.0.100 ,服务器返回来的是192.168.0.200,出于安全问题就会报错。

此时要设置proxy代理,让浏览器发送请求时,把发送方(你自己电脑)的源origin,改为192.168.0.200:7777,这样和前端服务器是一样的,浏览器就不会报错。

  1. // webpack.config.js
  2. devServer:{
  3. proxy:{
  4. "/api":"http://192.168.0.200:7777/", // 设置proxy代理
  5. changeOrigin:true // 告诉webpack帮我修改我的源,修改成上面的
  6. }
  7. }

如果你的请求是”http://192.168.0.200:7777/getUserName",没有api,就要通过设置替换掉
image.png

然后axios发送请求要改为下面的:

  1. const testFunction = () => {
  2. axios({
  3. baseURL:'/api', // 注意,proxy查找的'/api',是查找baseURL的,并不是查找下面的url。把'/api'替换成target
  4. url:"/testFun",
  5. method:"get",
  6. }).then((res) => {
  7. console.log(res);
  8. });
  9. };

https
image.png

resolve 解析文件路径

image.png

路径

webpack能解析三种文件路径:
1、绝对路径
D:\workSpace\vue3\src\main.js

2、相对路径
image.png
image.png
./ 是在当前目录下找
../ 是在当前目录的上一层目录下找

3、模块路径
image.png
image.png
下图这些都是模块的名字,webpack默认会去项目内node_modules 这个文件夹找
image.png

文件?文件夹?

image.png
image.png
webpack会把extensions里面的扩展名,都给下面这个不带文件后缀的都加一下试试,看存不存在,存在就当做是这个文件。
image.png

image.png
相当于 import “.util/index.js”
image.png

image.png
添加前:
image.png
添加后:
image.png
image.png

alias 别名

image.png
image.png
path 是nodejs 的一个模块,需要通过在当前页面import path from ‘path’引入后才能使用

image.png 相当于./src/vue/App

historyApiFallback 路由跳转失败后处理

image.png
现在前端可以做到前端路由,前端路由的原理是利用改变浏览器现在访问的地址的情况下,不发生跳转,同时还能显示其他界面。可以查看 https://www.yuque.com/yejielin/mypn47/gefgyt

但是如果用户点击刷新,很可能会直接报404,因为用户当前的路径在后端是没有任何配置的。

比如用户现在访问的是192.168.0.200:8080/,进入了系统的首页,然后用户点击用户管理,路径变为:192.168.0.200:8080/user,由于前端路由,浏览器会显示用户界面。

此时如果用户点击浏览器的刷新,浏览器会按192.168.0.200:8080/user去访问服务器,其实服务器根本就没有192.168.0.200:8080/user这个页面,因此没办法返回任何信息,只能返回错误代码404,找不到任何信息。

image.png
image.png
image.png