This package is suitable for update checking of cli tools. It will check the version in background process, and notify the users when update is available.
Install the module with: npm install pkg-updater --save
.
const updater = require('pkg-updater');
const pkg = require('./package.json'); // your cli tool's package.json
updater({'pkg': pkg}) .then(() => { /* start cli here */ });
updater({
'pkg': pkg,
'registry': 'http://xxx.registry.com', // custom registry
'tag': 'next', // custom the check tag(default is latest)
'checkInterval': 24 * 60 * 60 * 1000, // custom the check interval(ms)
'updateMessage': 'package update from <%=current%> to <%=latest%>.' // custom notify message
}).then(() => { /* start cli here */ });
options
{Object}pkg
{Object} (required)registry
{String}tag
{String}level
{String}checkInterval
{Integer}updateMessage
{String}onVersionChange
{Function}logFile
{String}
The package.json data, should contain name
and version
property. You can just write require('./package.json')
.
The registry from which we fetch the package information. It is https://registry.npmjs.org
by default.
The tag we use to fetch the package's version. We will request the {registry}/{package.name}/{tag}
to get the remote version. It is latest
by default.
The incompatible level to decide whether we should process.exit
. It is major
by default.
You can provide:
major
: remote is2.0.0
, current is1.0.0
, we willprocess.exit
minor
: remote is1.1.0
, current is1.0.0
, we willprocess.exit
patch
: remote is1.0.1
, current is1.0.0
, we willprocess.exit
The interval(ms) to create the daemon check process. It is 60 * 60 * 1000
(1h) by default.
The message we use to notiy user in the terminal. It is a lodash template string. The default value is:
'Package update available:' +
'<%=colors.dim(current)%> -> <%=colors.green(latest)%>' +
'<%if(incompatible){%>\n<%=colors.bold("This version is incompatible, you should update before continuing.")%><%}%>\n' +
'Run <%=colors.cyan(command)%> to update.'
You can use following variables:
name
: package's namecurrent
: package's current versionlatest
: package's remote versionincompatible
: whether thecurrent
andlatest
is compatiablecommand
: the update command, default isnpm i {package.name} -g
colors
: the colors object
The function to execute when the remote version is newer than the current version.
The default behavior of this function is:
- use the boxen to display the updateMessage
- if the version is incompatible, exit the process
If you really know what you are doing, you can provide your custom function.
This function can be a generator function, is called as followed:
yield onVersionChange({
'incompatible': false,
'latestVersion': '2.0.1',
'pkg': {
'name': 'foo',
'version': '2.0.0'
},
'level': 'major',
'updateMessage': 'the default update message'
});
The log file we use to store the check information. It is {$HOME}/.pkg_updater.json
.
This file's format looks like this:
{
"foo": {
"latestVersion": "2.0.1",
"lastCheck": 1477294183263
},
"bar": {
"latestVersion": "1.0.1",
"lastCheck": 1477294183263
}
}