Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/zcf0508/unplugin-https-reverse-proxy

👻 Add a reverse proxy for your dev service, support `https`.
https://github.com/zcf0508/unplugin-https-reverse-proxy

nuxt react rebuild repack unplugin vite vue webpack

Last synced: 18 days ago
JSON representation

👻 Add a reverse proxy for your dev service, support `https`.

Awesome Lists containing this project

README

        

# unplugin-https-reverse-proxy

[![NPM version](https://img.shields.io/npm/v/unplugin-https-reverse-proxy?color=a1b858&label=)](https://www.npmjs.com/package/unplugin-https-reverse-proxy)

A plugin for https reverse proxy, support `vite`、`webpack` and `rspack`.

## Install

Support set caddy file path by environment variable `UHRP_CADDY_PATH`, default is system cache folder.

```env
#.env.local
UHRP_CADDY_PATH=~/tmp/.uhrp
```

```bash
# not auto install caddy when postinstall
npm i unplugin-https-reverse-proxy --save-dev

# auto install
UHRP_AUTO_INSTALL_CADDY=true npm i unplugin-https-reverse-proxy --save-dev
```

```ts
interface Options {
/** default: true */
enable?: boolean
/** target hostname */
target: string
/** default: false */
showCaddyLog?: boolean
/** default: false */
https?: boolean
}
```

Vite

```ts
// vite.config.ts
import HttpsReverseProxy from 'unplugin-https-reverse-proxy/vite'

export default defineConfig({
plugins: [
HttpsReverseProxy({ /* options */ }),
],
})
```

Example: [`playground/`](./playground/)


Webpack 5

```js
// webpack.config.js

/** @type {Parameters[0]} */
const reverseProxyOptions = {
enable: false,
target: 'xxx',
https: false,
}

module.exports = {
/* ... */
devServer: {
client: {
// ↓ for HMR
webSocketURL: {
...(reverseProxyOptions.enable
? {
hostname: reverseProxyOptions.target,
}
: {}),
...(reverseProxyOptions.enable && reverseProxyOptions.https
? {
protocol: 'wss',
port: 443,
}
: {})
}
},
setupExitSignals: true,
allowedHosts: 'all',
},
plugins: [
require('unplugin-https-reverse-proxy/webpack')(reverseProxyOptions)
]
}
```


Webpack 4

```js
// webpack.config.js

/** @type {Parameters[0]} */
const reverseProxyOptions = {
enable: false,
target: 'xxx',
// https: false, // not support yet
}

module.exports = {
/* ... */
devServer: {
host: '0.0.0.0',
disableHostCheck: true,
},
plugins: [
require('unplugin-https-reverse-proxy/webpack')(reverseProxyOptions)
]
}
```


Rspack

```js
// rspack.config.js

/** @type {Parameters[0]} */
const reverseProxyOptions = {
enable: false,
target: 'xxx',
https: false,
}

module.exports = {
/* ... */
devServer: {
client: {
// ↓ for HMR
webSocketURL: {
...(reverseProxyOptions.enable
? {
hostname: reverseProxyOptions.target,
}
: {}),
...(reverseProxyOptions.enable && reverseProxyOptions.https
? {
protocol: 'wss',
port: 443,
}
: {})
}
},
},
plugins: [
require('unplugin-https-reverse-proxy/rspack')(reverseProxyOptions)
]
}
```


Rsbuild

```js
// rsbuild.config.js

/** @type {Parameters[0]} */
const reverseProxyOptions = {
enable: false,
target: 'xxx',
https: false,
}

module.exports = {
/* ... */
dev: {
client: {
// ↓ for HMR
...(reverseProxyOptions.enable
? {
host: reverseProxyOptions.target,
}
: {}),
...(reverseProxyOptions.enable && reverseProxyOptions.https
? {
protocol: 'wss',
port: '443',
}
: {})
},
},
tools: {
rspack: {
plugins: [
require('unplugin-https-reverse-proxy/rspack')(reverseProxyOptions)
]
},
},
}
```


Nuxt

```js
// nuxt.config.js
export default defineNuxtConfig({
modules: [
['unplugin-https-reverse-proxy/nuxt', { /* options */ }],
],
})
```

**!important:** You need to update the `nuxt dev` script by adding `--fork=false` to enable host restoration.

```json
// package.json

{
"scripts": {
"dev": "nuxt dev --fork=false"
}
}
```


Vue CLI 5

```js
// vue.config.js

/** @type {Parameters[0]} */
const reverseProxyOptions = {
enable: false,
target: 'xxx',
https: false,
}

module.exports = {
devServer: {
client: {
// ↓ for HMR
webSocketURL: {
...(reverseProxyOptions.enable
? {
hostname: reverseProxyOptions.target,
}
: {}),
...(reverseProxyOptions.enable && reverseProxyOptions.https
? {
protocol: 'wss',
port: 443,
}
: {})
}
},
setupExitSignals: true,
allowedHosts: 'all',
},
configureWebpack: {
plugins: [
require('unplugin-https-reverse-proxy/webpack')(reverseProxyOptions),
],
},
}
```


Vue CLI 4

```js
// vue.config.js

/** @type {Parameters[0]} */
const reverseProxyOptions = {
enable: false,
target: 'xxx',
// https: false, // not support yet
}

module.exports = {
devServer: {
host: '0.0.0.0',
disableHostCheck: true,
},
configureWebpack: {
plugins: [
require('unplugin-https-reverse-proxy/webpack')(reverseProxyOptions),
],
},
}
```


## Usage

```bash
# macOS
sudo -E npm run dev # your dev script
# ^ `-E` is important

# windows
# use powershell as administrator
npm run dev # your dev script
```

If your broswer shows a not trusted certificate warning, please check the keychain.

![keychain](https://github.com/zcf0508/unplugin-https-reverse-proxy/blob/main/images/Snipaste_2023-11-16_16-59-55.png)

More info, you can check [caddy about CA Root](https://caddyserver.com/docs/automatic-https#ca-root).