@middlend/proxy-config

0.1.1 • Public • Published

@middlend/proxy-config

Easy to set proxy options for http-proxy-middleware.

Install

npm install -D @middlend/proxy-config

Usage

Proxy support format: String, Array or Object.

package.json

"dependencies": {
...
},
"devDependencies": {
...
},
// key will transform to path matching, value will transform to target options
// First match will be used. The order of the configuration matters.
"devEnvironments": {
    // String
    "proxies": "http://api.xxx.com",                        // matching 'http://api.xxx.com' proxy to 'http://api.xxx.com'
    // Object
    "proxies": {
        "/api/users": "http://api3.xxx.com",                // matching '/api/users' proxy to 'http://api3.xxx.com'
        "/api/user/1": "http://api2.xxx.com",               // matching '/api/user/1' proxy to 'http://api2.xxx.com'
        "/api": "http://api1.xxx.com",                      // matching '/api' proxy to 'http://api1.xxx.com'
        "/api/books": {                                     // matching '/api/books' to target 'http://localhost:3000
            target: "http://localhost:3000"
            (http-proxy-middleware options)...
        }
    },
    // Array
    "proxies": [
        "http://api1.xxxx.com",                             // matching 'http://api.xxx.com' proxy to 'http://api.xxx.com'
        {
            "/api/users": "http://api3.xxx.com",            // matching '/api/users' proxy to 'http://api3.xxx.com'
            "/api/user/1": "http://api2.xxx.com",           // matching '/api/user/1' proxy to 'http://api2.xxx.com'
            "/api": "http://api1.xxx.com"                   // matching '/api' proxy to 'http://api1.xxx.com'
        },
        {
            "/api/books": {                                 // matching '/api/books' proxy to 'http://localhost:3000
                target: "http://localhost:3000"
                (http-proxy-middleware options)...
            }
        }
    ],
    // use () to rewrite path(content which is in () will be rewritten to '')
    "proxies": {
        "(http://api.xxx.com)/api/user/1": "http://api5.xxx.com"    // request '/http://api.xxx.com/api/user/1', matching 'http://api.xxx.com/api/user/1', proxy to http://api5.xxx.com/api/user/1
        "(http://api.xxx.com)/api/user/2": "http://api4.xxx.com"    // request '/http://api.xxx.com/api/user/2', matching 'http://api.xxx.com/api/user2', proxy to http://api4.xxx.com/api/user/2'
        "(http://api.xxx.com)/api/users": "http://api3.xxx.com",     // request '/http://api.xxx.com/api/users', matching 'http://api.xxx.com/api/users', proxy to http://api3.xxx.com/api/users'
        "(/proxy)/api": "http://api2.xxx.com",               // request '/proxy/api/210.75.225.254', matching '/proxy/api', proxy to 'http://api2.xxx.com/api/210.75.225.254'
        "(/proxy)": "http://api1.xxx.com"                    // request '/proxy/json/210.75.225.254', matching '/proxy', proxy to 'http://api1.xxx.com/json/210.75.225.254'
    }
}
...

webpack.config.dev.js

setting options

import { settings } from '@middlend/proxy-config';
import pkg from './package.json';

const { local, proxies } = pkg.devEnvironments;

{
    devServer: {
        host: '0.0.0.0',
        port: local,
        proxy: {
            ...settings(proxies),
            ...other
        }
    }
    ...
}

rewrite default options of http-proxy-middleware

{
    devServer: {
        host: '0.0.0.0',
        port: local,
        proxy: {
            ...settings(proxies, {
                logLevel: 'info',
                secure: true,
                ws: true
                ...(http-proxy-middleware options)
            }),
            ...other
        }
    }
    ...
}

default options

{
    logLevel: 'debug',
    changeOrigin: true,
    secure: false,
    cookieDomainRewrite: '',
    cookiePathRewrite: '/',
    pathRewrite: pathRewriteWrapper  // pathRewriteWrapper will replace [xxx] to '' which is in path matching, like '[/proxy]' or '[/proxy]/api'
}

API

/**
 * @desc create options for http-proxy-middleware
 * @param {string | array | object} options proxy config.
 * @param {object} default default options.
 * @return {object}
 */
settings(options, default)

Package Sidebar

Install

npm i @middlend/proxy-config

Weekly Downloads

0

Version

0.1.1

License

MIT

Unpacked Size

22.2 kB

Total Files

5

Last publish

Collaborators

  • middlend