webpack-dev-server搭建本地服务器

webpack-dev-server搭建本地服务器,第1张

webpack提供了一个可选的本地开发服务器,这个本地服务器基于node.js搭建,内部使用express框架,可以实现我们想要让浏览器自动刷新显示我们修改后的结果。

不过它是一个单独的模块,在webpack中使用之前先安装它

devserver也是作为webpack中的一个选项,选项本身可以设置如下属性:

    contentBase:为哪一个文件夹提供本地服务,默认是根文件夹,这里写./dist

    port:端口号

    inline:页面实时刷新

    historyApiFallback:在SPA页面中,依赖HTML5的history模式

webpack.config.js文件配置修改如下:

在package.json中配置脚本

运行npm run dev遇到的问题: Error: Cannot find module 'webpack-cli/bin/config-yargs'

原因是: webpack-cli的新版本对webpack-dev-server版本的不兼容

解决方案: 降低webpack-cli的版本为 "^3.3.12"

step1: 创建一个项目录

注意:项目名一般 不要带中文

step2: 创建 package.json

或者:

step4: 处理第三方文件

html文件中需要引入多个js文件或者第三方模块(例如:jquery.js),只引入项目js入口文件( main.js ),其他js文件均在入口文件中导入。导致可能JS文件中使用了浏览器不识别的高级语法:

总结:webpack可以做两件事情况:

step5: 配置入口文件和出口文件

每次修改js文件,手动输入命令: webpack 入口文件路径 -o 出口文件路径 重新打包, 每次都要输入入口文件和出口文件,麻烦。可以在项目目录下建立配置文件 webpack.config.js ,指定入口文件和出口文件:

重新打包:

step6: 实现自动打包编译

每次修改js文件,都要手动重新打包,还是麻烦?使用 webpack-dev-server 这个工具,来实现自动打包编译的功能。

webpack-dev-server 这个工具,如果想要正常运行,要求在本地项目中必须安装 webpack

在 package.json 文件中配置命令:

在终端中执行命令:

注:在终端执行 npm run dev ,就等于执行 webpack-dev-server 命令。这将在node中开启一个服务器,并且立即打包。每次修改文件,ctrl + s 保存文件,webpack-dev-server工具自动监听文件改变,并且自动打包。

改变文件引用路径:

执行上述命令后终端会有类似信息输出:

【 Project is running at http://localhost:8080/ 】——webpack-dev-server工具将项目托管到localhost:8080/端口上

【webpack output is served from /】——打包好的文件通过localhost:8080/bundle.js访问

【Content not from webpack is served from C:\Users\yfb\Desktop\前端学习案例4.27\wabpack\Demo_1\src】——不是通过webpack打包的文件,则是以src为根目录访问。

该项目根目录下并不存在bundel.js文件,我们可以认为webpack-dev-server把打包好的文件,以一种虚拟的形式托管到了咱们项目的根目录中,虽然我们看不到它,但是可以认为和 dist、src、node_modules平级,有一个看不见的文件,叫做 bundle.js。其实是为了频繁打包,提高效率,直接把打包的文件放在内存中。

因为项目托管到新服务器,现在应该访问的是 该服务器 下的项目,文件引用路径也要改变:

step7: 自动打开浏览器进行访问、配置端口号、指定托管的根目录、热重载(只是修改补丁,不重新生成整个bundle.js文件)

在 package.json 中配置命令,并重启服务器:

step8: 使用 html-webpack-plugin 插件

使用 --contentBase 指令的过程比较繁琐,需要指定启动的目录,同时还需要修改index.html中script标签的src属性。

安装 html-webpack-plugin 插件:

在 webpack.config.js 配置文件中配置插件:

html-webpack-plugin 插件的两个作用:

step9: 处理样式文件

html文件中需要引入css、less、sass样式文件。默认情况下,webpack处理不了这些样式文件。

处理css文件:

处理less样式文件

webpack proxy ,即 webpack 提供的代理服务

基本行为就是接收客户端发送的请求后转发给其他服务器

其目的是为了便于开发者在开发模式下解决跨域问题(浏览器安全策略限制)

想要实现代理首先需要一个中间服务器, webpack 中提供服务器的工具为 webpack-dev-server

webpack-dev-server 是 webpack 官方推出的一款开发工具,将自动编译和自动刷新浏览器等一系列对开发友好的功能全部集成在了一起

目的是为了提高开发者日常的开发效率, 只适用在开发阶段

关于配置方面,在 webpack 配置对象属性中通过 devServer 属性提供,如下:

devServetr 里面 proxy 则是关于代理的配置,该属性为对象的形式,对象中每一个属性就是一个代理的规则匹配

属性的名称是需要被代理的请求路径前缀,一般为了辨别都会设置前缀为 /api ,值为对应的代理匹配规则,对应如下:

proxy 工作原理实质上是利用 http-proxy-middleware 这个 http 代理中间件,实现请求转发给其他服务器

举个例子:

在开发阶段,本地地址为 http://localhost:3000 ,该浏览器发送一个前缀带有 /api 标识的请求到服务端获取数据,但响应这个请求的服务器只是将请求转发到另一台服务器中

在开发阶段, webpack-dev-server 会启动一个本地开发服务器,所以我们的应用在开发阶段是独立运行在 localhost 的一个端口上,而后端服务又是运行在另外一个地址上

所以在开发阶段中,由于浏览器同源策略的原因,当本地访问后端就会出现跨域请求的问题

通过设置 webpack proxy 实现代理请求后,相当于浏览器与服务端中添加一个代理者

当本地发送请求的时候,代理服务器响应该请求,并将请求转发到目标服务器,目标服务器响应数据后再将数据返回给代理服务器,最终再由代理服务器将数据响应给本地

在代理服务器传递数据给本地浏览器的过程中,两者同源,并不存在跨域行为,这时候浏览器就能正常接收数据

注意: 服务器与服务器之间请求数据并不会存在跨域行为,跨域行为是浏览器安全策略限制


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/467247.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-06-05
下一篇2023-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存