npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@funboxteam/free-port-finder

v4.0.0

Published

Tiny utility for checking ports availability

Downloads

837

Readme

@funboxteam/free-port-finder

npm

The package checks availability of the passed port, or tries to find the first available port starting from the passed one.

По-русски

Rationale

When you start a TCP (or HTTP) server on localhost you want to be sure that the desirable port isn't occupied or you don't really care and want to get the first available one.

This tiny tool takes on this task.

Installation

npm install --save-dev @funboxteam/free-port-finder

Usage

findFreePort(port: number, host?: string): Promise<number> searches for the available port starting from the passed one:

const { findFreePort } = require('@funboxteam/free-port-finder');

const port = 3000;

findFreePort(port)
  .then(freePort => {
    config.devServer.port = freePort;
  });

isPortFree(port: number, host?: string): Promise<bool> checks the availability of the passed port:

const { isPortFree } = require('@funboxteam/free-port-finder');

const port = 3000;

isPortFree(port)
  .then(isFree => {
    if (isFree) {
      // start
    } else {
      // cancel
    }
  });

It is possible to pass host value as second parameter. The default host value is '0.0.0.0'.

To check if port on specified host is available:

const { isPortFree } = require('@funboxteam/free-port-finder');

const port = 3000;
const host = '127.0.0.1';

isPortFree(port, host)
  .then(isFree => {
    if (isFree) {
      // start
    } else {
      // cancel
    }
  });

How it works

In order to understand whether the port is free or not, this package tries to run a TCP-server on the specified port. If the server starts, then package kills it and signals that the port is free. If an EADDRINUSE error occurs, it signals that the port is busy. If any other error occurs, then package throws it out.

This solution has both pros and cons.

Cons: In some OS incorrect SO_REUSEADDR processing is possible, and a free port can be signaled as busy (but not vice versa).

Pros: It would be possible to go the other way, and try to connect to sockets at a specified address, rather than run server on them. But in this case, it is possible that the connection to a socket may initiate some process in its handler, which could potentially be irreversible. Therefore, current solution is safe.

Sponsored by FunBox