All Projects → yeoman → Update Notifier

yeoman / Update Notifier

Licence: bsd-2-clause
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.

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Update Notifier

notifyme
react-notification-timeline is a react based component helps in managing the notification in time-based manner.
Stars: ✭ 94 (-94.1%)
Mutual labels:  notifications, npm-package
Node Module Boilerplate
Boilerplate to kickstart creating a Node.js module
Stars: ✭ 668 (-58.09%)
Mutual labels:  npm-package, node-module
Chronos
📊 📊 📊 Monitors the health and web traffic of servers, microservices, and containers with real-time data monitoring and receive automated notifications over Slack or email.
Stars: ✭ 347 (-78.23%)
Mutual labels:  notifications, npm-package
sdbm
SDBM non-cryptographic hash function
Stars: ✭ 43 (-97.3%)
Mutual labels:  npm-package, node-module
String Hash
Get the hash of a string
Stars: ✭ 56 (-96.49%)
Mutual labels:  npm-package, node-module
midtrans-node
Unoffficial Midtrans Payment API Client for Node JS | Alternative for Midtrans Official Module | https://midtrans.com
Stars: ✭ 15 (-99.06%)
Mutual labels:  npm-package, node-module
Rando.js
The world's easiest, most powerful random function.
Stars: ✭ 659 (-58.66%)
Mutual labels:  npm-package, node-module
Gh Got
Convenience wrapper for Got to interact with the GitHub API
Stars: ✭ 156 (-90.21%)
Mutual labels:  npm-package, node-module
Awesome Node Utils
some useful npm packages for nodejs itself
Stars: ✭ 51 (-96.8%)
Mutual labels:  npm-package, node-module
Is
Type check values
Stars: ✭ 1,011 (-36.57%)
Mutual labels:  npm-package, node-module
djb2a
DJB2a non-cryptographic hash function
Stars: ✭ 31 (-98.06%)
Mutual labels:  npm-package, node-module
Project
⭐️ Antares Project Application Skeleton. This is the very first place you should start. It allows you to create a brand new awesome project in easy few steps.
Stars: ✭ 84 (-94.73%)
Mutual labels:  updater, notifications
ugql
🚀GraphQL.js over HTTP with uWebSockets.js
Stars: ✭ 27 (-98.31%)
Mutual labels:  npm-package, node-module
P Queue
Promise queue with concurrency control
Stars: ✭ 1,863 (+16.88%)
Mutual labels:  npm-package, node-module
Singlespotify
🎵 Create Spotify playlists based on one artist through the command line
Stars: ✭ 254 (-84.07%)
Mutual labels:  npm-package, node-module
Figures
Unicode symbols with Windows CMD fallbacks
Stars: ✭ 438 (-72.52%)
Mutual labels:  npm-package, node-module
Aws Lambda Libreoffice
85 MB LibreOffice to fit inside AWS Lambda compressed with Brotli
Stars: ✭ 145 (-90.9%)
Mutual labels:  npm-package, node-module
Transliterate
Convert Unicode characters to Latin characters using transliteration
Stars: ✭ 152 (-90.46%)
Mutual labels:  npm-package, node-module
Conf
Simple config handling for your app or module
Stars: ✭ 707 (-55.65%)
Mutual labels:  npm-package, node-module
Node Loadbalance
A collection of distilled load balancing engines
Stars: ✭ 79 (-95.04%)
Mutual labels:  npm-package, node-module

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

const updateNotifier = require('update-notifier');
const pkg = require('./package.json');

updateNotifier({pkg}).notify();

Comprehensive

const updateNotifier = require('update-notifier');
const pkg = require('./package.json');

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

// 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, align: '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.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].