Be friendly, be cool ๐ show a message to your users to upgrade Node instead of a stacktrace
It's common for new Node users to miss the npm
engines warning when installing a CLI. This package displays a beginner-friendly message if their Node version is below the one expected and it's just a few lines of JS code.
Example with hotel CLI:
$ node -v
0.12
$ hotel
hotel requires at least version 4 of Node, please upgrade
Install:
npm install please-upgrade-node
yarn add please-upgrade-node
Require please-upgrade-node
before anything else:
// ./bin.js
// by default, will load ./package.json
require('please-upgrade-node')()
// The rest of your code...
In your package.json
, define the required Node version:
{
"name": "super-cli",
"bin": "./bin.js",
"engines": { "node": ">=6" }
}
Please note that >=
is the only operator supported by please-upgrade-node
(e.g. >=4
, >=4.0
, >=4.0.0
). Now if your users install your super-cli
project with an older Node version, they'll see:
$ npm install -g super-cli
# [...]
npm WARN engine [email protected]: : wanted: {"node":">=6"} (current: {"node":"4.8.3","npm":"2.15.11"})
# [...]
$ super-cli
super-cli requires at least version 6 of Node, please upgrade
pleaseUpgradeNode([pkgDir = '.'])
You can pass a pkgDir
if your package.json
is not at the same level:
// ./package.json
require('please-upgrade-node')()
// ../../package.json
require('please-upgrade-node')('../..')
Make sure when requiring please-upgrade-node
to not use syntax that is only supported in recent versions of Node.
For example, if you use const
instead of var
, please-upgrade-node
won't work with Node 0.12
:
const pleaseUpgradeNode = require('please-upgrade-node') // โ Will fail and exit here with Node 0.12,
pleaseUpgradeNode() // Message won't be displayed
To avoid any issues, the recommended syntax is require('please-upgrade-node')()
.
Thanks to zeit/serve for inspiring the error message.
MIT - Typicode ๐ต - Patreon