webpack5 基础配置 9 devServe的基本配置

output配置的publicPath

output的path中是指定打包后的文件放在哪个位置,而publicPath是决定打包后的html怎么引入Js文件。
在这里插入图片描述
在这里插入图片描述
src的路劲是 publicPath+path
在这里插入图片描述
在这里插入图片描述
publicPath默认是个空字符串。
当是一个空字符串时,在这里插入图片描述

这里的bundle.js,因为我们是在devserver启动的,所以默认会添加上域名。一般的查找路径就是
域名+publicPath+bundle.js,因为publicPath默认是空字符串,所以就是http://localhost:8080+bundle.js,一般我们的浏览器会自动在中间加上斜杠,就变成了8080/bundle.js所以就可以找到资源了。

Vue脚手架一般是 ‘/’,为的是预防有些浏览器不会自动帮助我们加/。 在这里插入图片描述
我们现在是在服务器上启动的,但是当我们打包后直接打开index.html文件,/bundle.js文件还能被找到吗,恐怕是不能在这里插入图片描述
可以看到已经报错了。要想正确运行只能找到文件所在位置
在这里插入图片描述
在这里插入图片描述
但部署的时候还是加上/就好。

DevServe的publicPath

webpack.config.js文件的devServe是为开发过程中,启动一个本地服务,也就是所在生产模式是用不到的。

devServer中的publicPath是针对本地服务器的文件夹,如果设为/abc,也就是说默认会通过http://locashost8080/abc/下的目录去找到文件夹,这时候如果我们的output的publicPath还是默认值,即只有http://localhost8080/bundle.js文件才能访问到的话,那么是不能访问的,因为我们得加上/abc,管网页提示让我们devServe的PublicPath与output的publicPath一样。
注意devserve的publicPath的默认值是’/’,这也就解释了为什么上面所说的浏览器会自动帮我们在域名与文件名中间加上/。

默认的时候
在这里插入图片描述
变成abc的时候,可以很明显看到不一样,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
解决办法
在这里插入图片描述
在这里插入图片描述
可以看到正常打印了。

devServe的contentBase

他的作用是什么呢?这个对我们直接打包的资源没什么影响,但是如果我们打包后的资源有依赖于其他资源,如下图,public的index.html模板,依赖abc下的Index.js文件。
在这里插入图片描述
运行,
在这里插入图片描述
可以看到正常运行,为什么呢。因为下图提示,content是运行在当前目录下的,所以他能找到该文件的资源,那如果我改一下呢?在这里插入图片描述在这里插入图片描述
在这里插入图片描述
这下子contentBase的作用就知道了吧,就是来配置这些其他的资源的路劲。
解决办法
在这里插入图片描述
在这里插入图片描述
在abc里面在嵌套abc,因为content的目录是从abc开始的,他会找到里面的abc的Index.js。
contentBase一般是一个绝对路劲。
在这里插入图片描述
另外,这些依赖的外部资源,默认是不会帮我们热替换的,所以我们可以加上一个属性,watchContentBase: true在这里插入图片描述
这样就会重新刷新浏览器。但不会重新编译,会重新刷新。

devServe的hotOnly,host配置

hotOnly有什么用呢?我们开启hot为true的时候会帮我们开启热替换,但是如果我们在编写代码的时候写错了,就会直接报错,然后页面也会报错,当我们修改完毕后,页面会重新刷新,但是之前的页面的一些状态也会不见,因为是全部重新刷新。若我们想让修改完代码后,只刷新报错的地方,其他的地方不要刷新,这样就能保持之前的转台,那么就开启hotOnly:true在这里插入图片描述
.在这里插入图片描述
错误信息依然存在,所以生效了。没有重新刷新。

host是设置主机地址的,默认的是localhost在这里插入图片描述

在这里插入图片描述

devServe的port open compress

port是设置端口的默认是8080
open为true是编译成功时自动打开服务器,如react
compress是否为静态文件开启gzip压缩,默认是false,经过gzip压缩后的文件会变很小。(性能优化)
在这里插入图片描述
在这里插入图片描述
可以看到原来是1.8m,压缩到421kb了。

devServe的Proxy代理

设置代理解决跨域问题。如果发送的请求是localhost:8080,但是本地的服务器是localhost:8000,那么就会产生跨域问题,此时就可以通过将请求发送到代理服务器,让代理服务器帮助我们请求。服务器之间没有跨域限制。在这里插入图片描述
其实还是相对容易的,/api我们要映射到http://localhost:8080去,所以我们的网络请求一般写axios.get(’/api/xxxx),但是只是这样的话,api会帮我们映射到8080,就是在前面加上http://localhost:8080/api/xxx,这样就多了个api,所以我们要想办法去掉api,直接配置pathRewrite属性,即路径重写。将以^api开头的全部替换成’’,这样发送请求时,就会在前面帮我们加上映射的路劲8080,并且将api替换成空字符串。就可以实现跨域了。
小结: devServe的Proxy里面设置映射,然后在发送请求的时候就不用写全部陆劲,写上映射的如上图的api,编译的时候自动在前面帮助我们加上映射的路劲地址,而且api也要去掉,所以使用pathRewrite属性,将api转成空字符串。
这个代理不支持https,需要额外的配置,secure: true
在这里插入图片描述
还有一个changeOrigin.说到这个先说一下,其实我们的数据得通过8080才能拿到的,但是现在我们做了一层代理,也就是说我们是本地服务器8000发起的请求,然后通过代理去请求服务器,现在很多服务器都会做一层验证,比如只允许8080的端口访问,这时候我们的8000如果通过代理去请求也是拿不到数据的,就可以直接设置changeOrigin:true,顾名思义,改变Origin,在这里插入图片描述
changeOrigin不是wbepack内部帮我们实现的,官网上说的是它使用的是一个http-proxy-middleware的软件包。
在这里插入图片描述
通过源码可以明显看出,判断是否通过配置changeOrigin从而改变Header请求头的host。

devServer的historyApiFallback配置

这个主要是解决spa页面在路由跳转后进行页面刷新的时,返回404的问题。
主要是当我们使用路由跳转时,如果从8080跳到8080/A,后,这是前端路由,他会做一个监听,监听路由的变化,然后帮我们执行js代码,但如果我们刷新后,浏览器会认为需要重新像服务器发送请求,8080/A,但是此时我们的8080下面哪有A这个文件,所以就会报404的错。
在这里插入图片描述
在这里插入图片描述
可以看到已经生效了。也可以更具体的配置一下
在这里插入图片描述

devServe的配置就基本结束了

resolve模块的配置
resolve用于模块如何被解析。

webpack是用enhanced-resolve库(自己开发)来解决。
webpack通过这个库能解决三种路劲,
1 绝对路劲 以获得模块的绝对路劲,不需要过多操作。
2 相对路劲 以Import/require的文件所在目录为上下文目录,拼接此上下文路劲,生成模块绝对路劲。
3 模块路劲 在resolve.modules中指定的所有目录检索模块。默认值是【‘node_modules’】,所以webpack就会默认从node-mocules找文件,像我们import from xxx, require xxx 都是模块路劲。
可以通过配置来替代初始模块的路劲。

确定文件还是文件夹

如果是一个文件,如果有扩展名,则直接打包文件。如果没有。使用resolve.extensions选项作为文件扩展名解析。
如果是一个文件夹,会根据resolve.mainFiles(默认值是Index)这个配置去制定的文件夹中找。然后根据resolve.extensions去匹配扩展名。

resolve的extensions与alias配置

extensions默认是【.wasm, .mjs, .js, .json】
如果我们想省略一些扩展名,如jsx vue tsx等。就得在里面配置。
在这里插入图片描述
在这里插入图片描述
配置成功,搜索顺序是从左到右。

alias是配置别名的经常设置

在这里插入图片描述
在这里插入图片描述
可以看到配置成功了。

小结 resolve的extensions用来配置扩展名,然后ailas是用来配置路劲别名
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
从引用中可以得知,webpack从4版本开始就支持根据项目设定的mode来执行不同的优化策略。而且,webpack也支持自定义的优化策略。所以,你可以根据具体项目的需求来配置webpack的优化策略。 引用中提到,掌握一些基础配置对于工作、面试以及各种脚手架中webpack的调试都有不小的作用。在学习配置过程中,可能会遇到一些坑和心得。因此,对于webpack5.0版本的最优配置,可以根据具体项目的需求和学习中的经验来进行配置。 需要注意的是,由于你提供的引用内容比较零散,并没有具体提及webpack5的最优配置,所以需要更多的上下文信息来获得更准确的答案。具体来说,我们需要了解你的项目类型(是React还是Vue、是单页面应用还是多页面应用等)、期望的构建结果(文件大小、开发环境还是生产环境等)以及其他特殊需求(如代码分割、懒加载等)等。只有在了解了这些信息之后,才能为你提供更具体的webpack5最优配置建议。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [webpack5.0基础配置(全面)](https://blog.csdn.net/weixin_40756663/article/details/123074161)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [zz-webpack-react:webpack打包工具(React版本)](https://download.csdn.net/download/weixin_42165712/18809700)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coderlin_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值