JavaScript npm portfinder
在電腦環境中找到空的、沒人使用的 port
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
// 就是叫我們不要這樣設定啦~
以上,謝謝!