当前位置: 代码迷 >> 综合 >> webpack4.x 系列(六) ? devServer的一些配置
  详细解决方案

webpack4.x 系列(六) ? devServer的一些配置

热度:82   发布时间:2023-12-23 14:14:15.0

我们都知道,在浏览器端会有同源策略,不符合同源策略(也就是协议、域名、端口号三者组成的同源策略)的资源是获取不到的。那如何能够获取一些其他网站的资源呢?答案就是跨域,那么这里就讲下devServer中常用的一些东西,然后最后重点讲下proxy的方式。

一、什么devServer

通过来自 webpack-dev-server 的这些选项,能够用多种方式改变其行为。

来看一个例子:

devServer: {// 告诉服务器从哪里提供内容。只有在你想要提供静态文件时才需要。contentBase: path.join(__dirname, "dist"),// 一切服务都启用gzip 压缩:compress: true,// 端口号port: 8080
}

当服务器启动时,在解析模块列表之前会有一条消息:

http://localhost:8080/
webpack output is served from /build/
Content not from webpack is served from /path/to/dist/

二、devServer.host

指定使用一个 host。默认是 localhost。如果你希望服务器外部可访问,也就是说,我们可以用host的方式在同一个局域网内,其他设备可以通过这个ip地址也可以访问到这个项目,代码指定如下:

host: "0.0.0.0"

或 

webpack-dev-server --host 0.0.0.0

三、devServer.https

默认情况下,dev-server 通过 HTTP 提供服务。通过下面代码你可以开启一个https的请求,也可以选择带有 HTTPS 的 HTTP/2 提供服务:

https: true

webpack-dev-server --https

四、devServer.open

设置这个后,我们打完包会自动打开浏览器访问这个地址页面。

五、devServer.port

请求端口号,这个很简单没什么好讲的。

port: 8080

webpack-dev-server --port 8080

六、devServer.proxy

重点的终于来了,如果你有单独的后端开发服务器 API,并且希望在同域名下发送 API 请求 ,那么代理某些 URL 会很有用。这个在vue中也是非常的常用,比如代理某一个接口,请求某项资源等等,是跨域的的一种常见方式。不过切记,这个方式只用于本地,上线之后就要通过其他的方式去配置了,像nginx就是线上代理的一种最好方式。

在 localhost:8080 上有后端服务的话,你可以这样启用代理:

proxy: {"/api": "http://localhost:8080"
}

请求到 /api/users 现在会被代理到请求 http://localhost:8080/api/users,这样子我们就可以获取user这个接口的所有数据了。切记,我们在写业务代码时候都要加上api,这样子才能捕获到api这个接口。

另一种方式,通过重写的方式,如下面,这个也可以代理我们自己静态资源写的mock接口,只要路径和端口写正确就没问题。

proxy: {"/api": {target: "http://localhost:3000",// 这个不经可以代理线上也可以是本地的静态数据的代理请求pathRewrite: {"^/api" : ""}}
}

默认情况下,不接受运行在 HTTPS 上,且使用了无效证书的后端服务器。如果你想要接受,修改配置如下:

proxy: {"/api": {target: "https://other-server.example.com",secure: false}
}

如果你想代理多个本地目标接口,可以通过数组的方式,代码如下:

proxy: [{context: ["/auth", "/api"],target: "http://localhost:3000",
}]

以上代理的方式在vue-cli中也是类同的,我们可以参考。

 

参考文档:

https://webpack.js.org/configuration/dev-server/#devserver

  相关解决方案