JavaScript npm portfinder

在電腦環境中找到空的、沒人使用的 port

portfinder

node-portfinder 是一個跑在 node 環境上,能幫我們在電腦環境中找到空的、沒人使用的 port 找到後就可以看你要怎麽用囉!

首先!建立好自己的工作目錄 安裝 portfinder

## 建立一個空的目錄 進入目錄
mkdir port-finder-test
cd port-finder-test

## 初始化、安裝 portfinder
npm init
npm install portfinder

這樣安裝就完成了! 再來就是試用了 首先照著官網的跑一次吧!

const portfinder = require('portfinder');

portfinder.getPort(function (err, port) {
    // 會幫我們找到環境中保證可以使用的 port 號
    // 一般來說會顯示 8000
    console.log(port);

    // 沒有錯誤的話 err 會是 null
    console.log(err);
});

他也有 Promise 的寫法

const portfinder = require('portfinder');

portfinder.getPortPromise()
  .then((port) => {
    // 可用的 port 會在這裡
      console.log(port)
  })
  .catch((err) => {
    // 如果真的找不到可用 port 的話會到這裡
    // 把 err 叫出來可以看到為什麼找不到可以用的 port
      console.log(err)
  });

portfinder 是這樣的: 他的預設是 8000 所以我們直接呼叫他的 getPort() 放法的話 他會從 8000 開始往後找 一路找到 65535 直到有一個空閒的 port 給我們用


我們當然也可以把他的預設 8000 往後或往前調整。

portfinder.basePort = 3000; // 起始 從 3000 開始
portfinder.highestPort = 3333; // 最高找到 3333 就不找了 沒有的話跳錯誤

還有另外一種定義起始、結束方法。

portfinder.getPort({
    port: 3000,    // 起始 port
    stopPort: 3333 // 最高 port
}, callback);

最後 一些是我自己的小測試,客官們就加減看看吧! 把 basePort 調成 1

const portfinder = require('portfinder');

portfinder.basePort = 1; // 如果把 basePort 定義為 1 的話

portfinder.getPort((err, port) => {
    // port 還是會從 1024 開始
    console.log(port) // 1024
    // err 是 null
    console.log(err)
});

basePort 為 1 highestPort 卻沒有超過 1024

const portfinder = require('portfinder');

portfinder.basePort = 1; // 如果把 basePort 定義為 1 的話
portfinder.highestPort = 1000; // 卻又把最高 port 設定在 1024 以下的話

portfinder.getPort((err, port) => {
    // port 會出 undefined
    console.log(port)
    // err 會出: Error: No open ports available
    console.log(err)
});

如果把 basePort 設定得比 highestPort 還要大的話。

const portfinder = require('portfinder');

// 如果把 basePort 設定得比 highestPort 還要大的話
portfinder.basePort = 3000;
portfinder.highestPort = 2500;

portfinder.getPort((err, port) => {
    // 這樣得話他連這裡的 scope 都不會進來了
    // 直接在呼叫 getPort 的同時就會報錯了
    console.log(port);
});

// 錯誤訊息:
// node_modules/portfinder/lib/portfinder.js:124
//       throw Error('Provided options.stopPort(' + options.stopPort + 'is less than options.startPort (' + options.startPort + ')');

// Error: Provided options.stopPort(2500is less than options.startPort (3000)
//     at Object.exports.getPort

// 就是叫我們不要這樣設定啦~

以上,謝謝!