vite自动关闭端口号插件

关闭端口号插件

❓:有时候我们需要强制将我们的端口号进行固定,
💡:我们在 server 中配置如下

 server: {
    host: '127.0.0.1',
    port: 8000,
    strictPort: true,
    open: true,
    hmr: {
      overlay: false,
    },
    /* 当我开启之后 我的learn-redux项目中可以请求 fals则不可以 出现cors */
    cors: true,
    proxy: {
      '/api': {
        target: 'https://127.0.0.1:8002/',
        changeOrigin: true,
        rewrite: path => path.replace(/^\/api/, ''),
      },
    },
    /* 当我设置为允许我的learn-redux项目中的id+端口之后 就可以访问 不添加就出现cors  */
    // headers: { "Access-Control-Allow-Origin": "http://127.0.0.1:8000" },
  },

有时候我们端口号被占用的情况

error when starting dev server:Error: Port 8000 is already in use at Server.onError

需要我们手动去执行一次 kill命令,比较麻烦,我们可以使用 vite 插件去优化这个步骤,我们新建一个 vite 插件 js 文件

import { exec } from "child_process";
import os from "os";
import { createServer } from "vite";

function closePortPlugin() {
  return {
    name: "vite-plugin-close-port",
    enforce: "pre", // 确保插件在其他插件之前执行
    configureServer(server) {
      server.httpServer.on("error", (e) => {
        if (e.code === "EADDRINUSE") {
          const port = e.port; // 获取被占用的端口号
          let killCmd = "";
          const a = os.platform();
          if (os.platform() === "darwin") {
            // mac系统
            // mac下通过lsof命令找到端口的进程并kill
            killCmd = `lsof -i :${port} | grep LISTEN | awk '{print $2}' | xargs kill -9`;
          } else if (os.platform() === "win32") {
            // windows系统
            // windows下通过netstat命令找到端口的进程并taskkill
            killCmd = `netstat -ano | findstr :${port} | findstr LISTENING | for /f "tokens=5" %a in ('more') do taskkill /F /PID %a`;
          }

          if (killCmd) {
            exec(killCmd, (err) => {
              if (err) {
                console.error(`Failed to close port ${port}`);
              } else {
                console.log(
                  `Port ${port} has been closed, restarting server...`
                );
                // 关闭端口成功后重新启动服务
                createServer(server.config).listen();
                exec("npm run dev");
              }
            });
          }
        }
      });
    },
  };
}

export default closePortPlugin;

在我们的vite.config.ts文件中,我们进行插件的引入

export default defineConfig({
plugins: [closePortPlugin() as any, react()],
})

当我们执行npm run dev 的时候,第一次会报端口号被占用,并且执行这个插件,我们再去执行一遍npm run dev 即可运行我们的项目

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光头程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值