DEV Community

郑家豪
郑家豪

Posted on

2 2

webpack plugin: proxy-switch-plugin

Foreword

When we developing some big project base on webpack, we may face the embrassing situation of slowly restarting the project to switch proxy so than we could test with different backend. To handle this problem, I wrote this plugin: proxy-switch-plugin

Getting Started

// npm
npm i proxy-switch-plugin -D

//yarn
yarn add proxy-switch-plugin -D
Enter fullscreen mode Exit fullscreen mode

Usage

Config

In webpack

const ProxySwitchPlugin = require("proxy-switch-plugin");
module.exports = {
  // ...
  plugins: [
    new ProxySwitchPlugin({
      // write down all you proxy config
      proxyList: {
        peter: {
          "/api": {
            target: "http://localhost:3000",
            pathRewrite: {
              "/api": "/",
            },
          },
        },
        park: {
          "/api": {
            target: "http://localhost:3001",
            pathRewrite: {
              "/api": "/",
            },
          },
        },
      },
      // the default proxy config key
      defaultProxy: "park",
      // watch config change
      watchPath: path.join(__dirname, "webpack.config.js"),
    }),
  ],
  // ...
};
Enter fullscreen mode Exit fullscreen mode

In chainWebpack

const ProxySwitchPlugin = require("proxy-switch-plugin");
module.exports = {
  // ...
  chainWebpack: (config) => {
    config.plugin("proxy-switch-plugin").use(ProxySwitchPlugin, [
      {
        // write down all you proxy config
        proxyList: {
          peter: {
            "/api": {
              target: "http://localhost:3000",
              pathRewrite: {
                "/api": "/",
              },
            },
          },
          park: {
            "/api": {
              target: "http://localhost:3001",
              pathRewrite: {
                "/api": "/",
              },
            },
          },
        },
        // the default proxy config key
        defaultProxy: "park",
        // watch config change
        watchPath: path.join(__dirname, "vue.config.js"),
      },
    ]);
  },
  // ...
};
Enter fullscreen mode Exit fullscreen mode

Note: You should not config webpack.devServer.proxy after you use this plugin. And you should config the proxy like the example do which is the classic format in webpack. If you use other format, the plugin dosen't promise to work.

Proxy Switch

The plugin provide a default select component. For example, you could use it like this in React:

import ProxySelect from "proxy-switch-plugin/src/ProxySelect";
import "proxy-switch-plugin/src/ProxySelect.css";

function Index() {
  useEffect(() => {
    document.querySelector(".container").appendChild(ProxySelect);
  }, []);

  return <div className="container"></div>;
}
Enter fullscreen mode Exit fullscreen mode

Put the select component on the place properly. Switch the proxy by select different proxy key in the select component.

Of course, the default select component is written by html select component. The style may not satisfy you. But you could do this work youself. The plugin provide two interface to help switch proxy:

get proxy list

  • url: /proxy/list
  • method: GET
  • res: {list: string[]}

switch proxy

  • url: /proxy/change
  • params: {proxy: string}
  • method: GET

Config Hot Update(Experimental)

By delivering the webpack config file path from the watchPath option, we could update our proxy config without restarting the server and just a fast refresh of the page.

Notice:This is a experimental feature. Only little test have made on typical webpack config. chainWebpack config have never test yet. Please use it carefully.

Last But Not Least

If the plugin helps you, don't forget to star.

Image of Stellar post

How a Hackathon Win Led to My Startup Getting Funded

In this episode, you'll see:

  • The hackathon wins that sparked the journey.
  • The moment José and Joseph decided to go all-in.
  • Building a working prototype on Stellar.
  • Using the PassKeys feature of Soroban.
  • Getting funded via the Stellar Community Fund.

Watch the video

Top comments (0)

Jetbrains image

Is Your CI/CD Server a Prime Target for Attack?

57% of organizations have suffered from a security incident related to DevOps toolchain exposures. It makes sense—CI/CD servers have access to source code, a highly valuable asset. Is yours secure? Check out nine practical tips to protect your CI/CD.

Learn more

👋 Kindness is contagious

If this article connected with you, consider tapping ❤️ or leaving a brief comment to share your thoughts!

Okay