• Stars
    star
    1,748
  • Rank 25,524 (Top 0.6 %)
  • Language
    JavaScript
  • License
    BSD 2-Clause "Sim...
  • Created over 11 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Update notifications for your CLI app

update-notifier

Update notifications for your CLI app

Inform users of your package of updates in a non-intrusive way.

Contents

Install

npm install update-notifier

Usage

Simple

import updateNotifier from 'update-notifier';
import packageJson from './package.json' assert {type: 'json'};

updateNotifier({pkg: packageJson}).notify();

Comprehensive

import updateNotifier from 'update-notifier';
import packageJson from './package.json' assert {type: 'json'};

// Checks for available update and returns an instance
const notifier = updateNotifier({pkg: packageJson});

// Notify using the built-in convenience method
notifier.notify();

// `notifier.update` contains some useful info about the update
console.log(notifier.update);
/*
{
	latest: '1.0.1',
	current: '1.0.0',
	type: 'patch', // Possible values: latest, major, minor, patch, prerelease, build
	name: 'pageres'
}
*/

Options and custom message

const notifier = updateNotifier({
	pkg,
	updateCheckInterval: 1000 * 60 * 60 * 24 * 7 // 1 week
});

if (notifier.update) {
	console.log(`Update available: ${notifier.update.latest}`);
}

How

Whenever you initiate the update notifier and it's not within the interval threshold, it will asynchronously check with npm in the background for available updates, then persist the result. The next time the notifier is initiated, the result will be loaded into the .update property. This prevents any impact on your package startup performance. The update check is done in a unref'ed child process. This means that if you call process.exit, the check will still be performed in its own process.

The first time the user runs your app, it will check for an update, and even if an update is available, it will wait the specified updateCheckInterval before notifying the user. This is done to not be annoying to the user, but might surprise you as an implementer if you're testing whether it works. Check out example.js to quickly test out update-notifier and see how you can test that it works in your app.

API

notifier = updateNotifier(options)

Checks if there is an available update. Accepts options defined below. Returns an instance with an .update property if there is an available update, otherwise undefined.

options

Type: object

pkg

Type: object

name

Required
Type: string

version

Required
Type: string

updateCheckInterval

Type: number
Default: 1000 * 60 * 60 * 24 (1 day)

How often to check for updates.

shouldNotifyInNpmScript

Type: boolean
Default: false

Allows notification to be shown when running as an npm script.

distTag

Type: string
Default: 'latest'

Which dist-tag to use to find the latest version.

notifier.fetchInfo()

Check update information.

Returns an object with:

  • latest (String) - Latest version.
  • current (String) - Current version.
  • type (String) - Type of current update. Possible values: latest, major, minor, patch, prerelease, build.
  • name (String) - Package name.

notifier.notify(options?)

Convenience method to display a notification message. (See screenshot)

Only notifies if there is an update and the process is TTY.

options

Type: object

defer

Type: boolean
Default: true

Defer showing the notification to after the process has exited.

message

Type: string
Default: See above screenshot

Message that will be shown when an update is available.

Available placeholders:

  • {packageName} - Package name.
  • {currentVersion} - Current version.
  • {latestVersion} - Latest version.
  • {updateCommand} - Update command.
notifier.notify({message: 'Run `{updateCommand}` to update.'});

// Output:
// Run `npm install [email protected]` to update.
isGlobal

Type: boolean
Default: Auto-detect

Include the -g argument in the default message's npm i recommendation. You may want to change this if your CLI package can be installed as a dependency of another project, and don't want to recommend a global installation. This option is ignored if you supply your own message (see above).

boxenOptions

Type: object
Default: {padding: 1, margin: 1, textAlignment: 'center', borderColor: 'yellow', borderStyle: 'round'} (See screenshot)

Options object that will be passed to boxen.

User settings

Users of your module have the ability to opt-out of the update notifier by changing the optOut property to true in ~/.config/configstore/update-notifier-[your-module-name].json. The path is available in notifier.config.path.

Users can also opt-out by setting the environment variable NO_UPDATE_NOTIFIER with any value or by using the --no-update-notifier flag on a per run basis.

The check is also skipped automatically:

  • on CI
  • in unit tests (when the NODE_ENV environment variable is test)

About

The idea for this module came from the desire to apply the browser update strategy to CLI tools, where everyone is always on the latest version. We first tried automatic updating, which we discovered wasn't popular. This is the second iteration of that idea, but limited to just update notifications.

Users

There are a bunch projects using it:

  • npm - Package manager for JavaScript
  • Yeoman - Modern workflows for modern webapps
  • AVA - Simple concurrent test runner
  • XO - JavaScript happiness style linter
  • Node GH - GitHub command line tool

And 2700+ more…


Get professional support for this package with a Tidelift subscription
Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies.

More Repositories

1

yeoman

Yeoman - a set of tools for automating development workflow
10,050
star
2

generator-angular

Yeoman generator for AngularJS
JavaScript
5,741
star
3

yo

CLI tool for running Yeoman generators
JavaScript
3,787
star
4

generator-webapp

A gulp.js generator for modern webapps
JavaScript
3,775
star
5

generator-chrome-extension

Scaffold out a Chrome extension
JavaScript
2,598
star
6

grunt-usemin

[UNMAINTAINED] Replaces references to non-optimized scripts or stylesheets into a set of HTML files (or any templates/views)
JavaScript
1,221
star
7

generator-generator

Generate a Yeoman generator
JavaScript
1,216
star
8

generator

Rails-inspired generator system that provides scaffolding for your apps
TypeScript
1,179
star
9

yeoman-app

A desktop app that scaffolds projects using Yeoman
JavaScript
989
star
10

generator-webapp_DEPRECATED

Yeoman generator that scaffolds out a front-end web app
JavaScript
978
star
11

generator-polymer

Scaffold out a Polymer project
JavaScript
929
star
12

generator-mobile

Scaffold out a mobile project based on Web Starter Kit
JavaScript
919
star
13

configstore

Easily load and persist config without having to think about where and how
JavaScript
860
star
14

yeoman.io

Yeoman website
CSS
791
star
15

generator-backbone

Scaffold out a Backbone.js project
JavaScript
638
star
16

generator-node

Create a Node.js module
JavaScript
578
star
17

insight

Node.js module to help you understand how your tool is being used by anonymously reporting usage metrics to Google Analytics
JavaScript
554
star
18

bower-requirejs

[DEPRECATED] Automagically wire-up installed Bower components into your RequireJS config
JavaScript
376
star
19

generator-chromeapp

Scaffold out a Chrome app
JavaScript
310
star
20

stringify-object

Stringify an object/array like JSON.stringify just without all the double-quotes
JavaScript
305
star
21

grunt-filerev

[DEPRECATED] File revving
JavaScript
260
star
22

yosay

Tell Yeoman what to say
JavaScript
207
star
23

grunt-bower-requirejs

[DEPRECATED] Grunt task - Automagically wire-up installed Bower components into your RequireJS config
JavaScript
199
star
24

generator-bootstrap

Yeoman generator for Bootstrap
JavaScript
187
star
25

generator-karma

Yeoman generator for Karma
JavaScript
173
star
26

environment

Yeoman runtime environment
JavaScript
125
star
27

generator-jquery

Generate a jQuery plugin
JavaScript
85
star
28

generator-gruntfile

Create a basic Gruntfile with yo.
JavaScript
74
star
29

doctor

Detect potential issues with users system that could prevent Yeoman from working correctly
JavaScript
62
star
30

yeoman-assert

Assert utility from yeoman
JavaScript
53
star
31

yeoman-generator-list

JavaScript
52
star
32

yeoman-test

Test utilities for Yeoman generators
TypeScript
43
star
33

generator-mocha

Yeoman generator for Mocha
JavaScript
42
star
34

generator-gruntplugin

Create a gruntplugin module with yo, including Nodeunit unit tests.
JavaScript
35
star
35

generator-jasmine

Yeoman generator for Jasmine
JavaScript
34
star
36

yeoman-character

The Yeoman character in your CLI. Like wat.
JavaScript
21
star
37

yeoman-welcome

Yeoman welcome message used in generators
JavaScript
19
star
38

media

Yeoman logo and artwork
16
star
39

generator-commonjs

Generate a CommonJS module
JavaScript
16
star
40

insight-dashboard

[DEPRECATED] Insight into Yeoman
CSS
11
star
41

Hackathons

Running a Yeoman hackathon? Start here for ideas, tips, and goals
10
star
42

html-wiring

[DEPRECATED] Set of utilities to update HTML files
JavaScript
10
star
43

cli-list

Parse comma-separated argument lists.
JavaScript
9
star
44

yeoman-remote

Fetch packages and archives from remote resources with cache support
JavaScript
8
star
45

generator-dummytest

JavaScript
3
star
46

generator-dummy

Dummy generator used for unit testing purpose
JavaScript
2
star
47

yeoman-api

TypeScript
1
star