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

node-dev-delay

v3.2.1

Published

Restarts your app when files are modified; has delay support.

Downloads

5

Readme

Build Status

node-dev (1)

Node-dev is a development tool for Node.js that automatically restarts the node process when a file is modified.

In contrast to tools like supervisor or nodemon it doesn't scan the filesystem for files to be watched. Instead it hooks into Node's require() function to watch only the files that have been actually required.

This means that you don't have to configure any include- or exclude rules. If you modify a JS file that is solely used on the client-side but never run on the server, node-dev will know this and won't restart the process.

This also means that you don't have to configure any file extensions. Just require a .json file or a .coffee script for example and it will be watched. Automatically.

Node-dev uses filewatcher under the hood and hence will take advantage of the native fs.watch() API if it is available on your system.

Usage

Just run node-dev as you would normally run node:

node-dev foo.js

There are a couple of command line options that can be used to control which files are watched and what happens when they change:

  • --no-deps Watch only the project's own files and linked modules (via npm link)
  • --all-deps Watch the whole dependency tree
  • --respawn Keep watching for changes after the script has exited
  • --dedupe Dedupe dynamically
  • --graceful_ipc <msg> Send 'msg' as an IPC message instead of SIGTERM for restart/shutdown
  • --delay=<seconds> Delay restarting by seconds to allow multiple changes to queue.
  • --poll Force polling for file changes (Caution! CPU-heavy!)
  • --no-notify Switch off desktop notifications (see below)

By default node-dev will watch all first-level dependencies, i.e. the ones in the project's node_modulesfolder.

Installation

Node-dev can be installed via npm. Make sure to use the -g option to install it globally.

npm install -g node-dev

Desktop Notifications

Status and error messages can be displayed as desktop notification using node-notifier:

Screenshot

Screenshot

Requirements:

  • Mac OS X: >= 10.8 or Growl if earlier.
  • Linux: notify-osd installed (Ubuntu should have this by default)
  • Windows: >= 8, task bar balloon if earlier or Growl if that is installed.
  • General Fallback: Growl

Settings

Usually node-dev doesn't require any configuration at all, but there are some options you can set to tweak its behaviour:

  • clear – Whether to clear the screen upon restarts. Default: false
  • notify – Whether to display desktop notifications. Default: true
  • timestamp – The timestamp format to use for logging restarts. Default: "HH:MM:ss"
  • vm – Whether to watch files loaded via Node's VM module. Default: true
  • fork – Whether to hook into child_process.fork (required for clustered programs). Default: true
  • deps – How many levels of dependencies should be watched. Default: 1
  • dedupe – Whether modules should by dynamically deduped. Default: false
  • graceful_ipc - Send the argument provided as an IPC message instead of SIGTERM during restart events. Default: "" (off)
  • delay - Delays the restarting of the script for the configured amount of seconds. Default: 0

Upon startup node-dev looks for a .node-dev.json file in the following directories:

  • user's HOME directory
  • the current working directory (as provided by process.cwd())
  • the same directory as the script to be run

Settings found later in the list will overwrite previous options.

Dedupe linked modules

Sometimes you need to make sure that multiple modules get exactly the same instance of a common (peer-) dependency. This can usually be achieved by running npm dedupe – however this doesn't work when you try to npm link a dependency (which is quite common during development). Therefore node-dev provides a --dedupe switch that will inject the dynamic-dedupe module into your app.

Transpilers

You can also use node-dev to run transpiled languages. You can either use a .js file as entry point to your application that registers your transpiler as require-extension manually, for example by calling CoffeeScript.register() or you can let node-dev do this for you.

There is a config option called extensions which maps file extensions to compiler module names. By default this map looks like this:

    {
        "coffee": "coffee-script/register",
        "ls": "LiveScript"
    }

This means that if you run node-dev foo.coffee node-dev will do a require("coffee-script/register") before running your script.

Note: If you want to use coffee-script < 1.7 you have to change the setting to {"coffee": "coffee-script"}.

Options can be passed to a transpiler by providing an object containing name and options attributes:

    {
        "js": {
            "name": "babel-core/register",
            "options": {
                "only": [
                    "lib/**",
                    "node_modules/es2015-only-module/**"
                ]
            }
        }
    }

Graceful restarts

Node-dev sends a SIGTERM signal to the child-process if a restart is required. If your app is not listening for these signals process.exit(0) will be called immediately. If a listener is registered, node-dev assumes that your app will exit on its own once it is ready.

Windows does not handle POSIX signals, as such signals such as SIGTERM cause the process manager to unconditionally terminate the application with no chance of cleanup. In this case, the option graceful_ipc may be used. If this option is defined, the argument provided to the option will be sent as an IPC message via child.send("<graceful_ipc argument>"). The child process can listen and handle this event with:

process.on("message", function (msg) {
  if (msg === "<graceful_ipc argument") {
    // Gracefully shut down here
    doGracefulShutdown();
  }
});

Restart Delay

For the instances where a transpiler might make changes the multiple files in rapid succession, a delay can be configured. If any new changes are detected during the delay, the delay will be reset. The restart will occur when no changes happen during cfg.delay seconds.

Ignore paths

If you’d like to ignore certain paths or files from triggering a restart simply list them in the .node-dev.json configuration under "ignore", e.g.

{
  "ignore": [
    "client/scripts",
    "shared/module.js"
  ]
}

This might be useful when you are running a universal (isomorphic) web app that shares modules across the server and client, e.g. React.js components for server-side rendering, which you don’t want to trigger a server restart when changed, since it introduces an unnecessary delay.

License

MIT