Awesome npm resources and tips
Awesome npm resources and tips
npm is a package manager for the JavaScript programming language and comes bundled in the Node.js runtime.
Please read the contribution guidelines before contributing.
npm publish.
$ npm install --global npm
npm i→
npm install
npm i -D→
npm install --save-dev
npm t→
npm test
npm it→
npm install && npm test
npm r→
npm uninstall
npm un→
npm uninstall
npm up→
npm update
Speed up your common npm tasks.
In your
.zshrc/
.bashrc:
alias ni='npm install' alias nid='npm install --save-dev' alias nig='npm install --global' alias nt='npm test' alias nit='npm install && npm test' alias nk='npm link' alias nr='npm run' alias ns='npm start' alias nf='npm cache clean && rm -rf node_modules && npm install' alias nlg='npm list --global --depth=0'
By default npm adds packages you install to the
dependenciesfield in package.json (since v5). You can prevent this by specifying the
--no-saveflag. You can add a package to
devDependencieswith
--save-dev/
-D:
$ npm install --save-dev ava
You can easily run scripts using npm by adding them to the
"scripts"field in package.json and run them with
npm run. Run
npm runto see available scripts. Binaries of locally install packages are made available in the PATH, so you can run them by name.
{ "name": "awesome-package", "scripts": { "cat": "cat-names" }, "dependencies": { "cat-names": "^1.0.0" } }
$ npm run cat Max
All package.json properties are exposed as environment variables:
{ "name": "awesome-package", "scripts": { "name": "echo $npm_package_name" } }
$ npm run name awesome-package
You can pass options to the command you are using in your npm script by adding
-- --flaglike in the example below. The
--marks the end of options parsing, so
npm runwill just ignore it and pass it to the command.
{ "name": "awesome-package", "scripts": { "xo": "xo", "xo:fix": "npm run xo -- --fix", } }
Adding the
-- --fixoption is like executing
xo --fix.
npm runhas a
--silentoption which is especially useful when combining npm scripts.
Imagine you have a setup for linting your JavaScript files like the following:
{ "name": "awesome-package", "scripts": { "xo": "xo", "xo:fix": "npm run xo --silent -- --fix", } }
Using the
--silentoption reduces the output in the terminal. See this comparison.
npm comes with predefined lifecyle scripts which are excuted under specific conditions if they are defined in your package.json.
{ "name": "awesome-package", "scripts": { "prepublishOnly": "nsp check" }, "devDependencies": { "nsp": "^3.0.0" } }
This will be executed automatically before your npm package is published to the registry via
npm publishto check for known vulnerabilties in your dependencies.
Note: *prepublishOnly** is available since npm v4.0.0. See npm docs.*
npm startand
npm test
npm startand
npm testare also lifecycle scripts but are not executed automatically.
{ "name": "awesome-package", "scripts": { "start": "node server.js", "test": "ava" }, "devDependencies": { "ava": "^1.0.0" } }
Therefore they can be executed simply with:
$ npm test $ npm start
preand
postscripts
These are special lifecycle scripts which can be used to run scripts automatically in sequence.
{ "name": "awesome-package", "scripts": { "pretest": "eslint .", "test": "ava" }, "devDependencies": { "eslint": "^4.19.0", "ava": "^1.0.0" } }
$ npm test
This will lint your files before running your tests. The tests will not run if linting fails. Or more generally spoken: the following script won’t be executed if one of the scripts running in sequence exits with an exit code other than 0.
Note:
preand
postscripts can also be used for your custom npm scripts. So
npm run foowill also run
prefooand
postfooif defined.
npx
npmcomes bundled with
npx(Since v5.2.0) — a tool to execute package binaries. Each command is executed either from the local
node_modules/.bindirectory, or from a central cache, installing any packages needed in order for to run.
{ "name": "awesome-package", "dependencies": { "cat-names": "^1.0.0" } }
If the binary is already installed, it will be executed from
node_modules/.bin.
$ npx cat-names Max
But if the binary is missing, it will be installed first.
$ npx dog-names npx: installed 46 in 3.136s Bentley
With
npx(Comes bundled with npm v5.2.0 or newer) and the
node-binpackage, you can easily try out code in different Node.js versions without having to use a version manager like
nvm,
nave, or
n.
$ npx [email protected] -- node --version v6.11.0
Sometimes it can be useful to have a local version of a package as a dependency. You can use
npm linkto link one local package into another. Run
npm linkin the package you want to use. This creates a global reference. Then go into your original package and run
npm linkto link in the other package.
$ cd rainbow $ npm link $ cd ../unicorn $ npm link rainbow
You can now use
rainbowas a dependency in the
unicornpackage.
npm supports using a shorthand for installing a package directly from a GitHub repo:
$ npm install sindresorhus/chalk
Let's target a specific commit as the main branch is a moving target:
$ npm install 'sindresorhus/chalk#51b8f32'
Specify either a commit SHA, branch, tag, or nothing.
You can also install Git dependencies with semver: (Requires npm v5 or newer)
$ npm install 'sindresorhus/chalk#semver:^2.0.0'
$ npm install [email protected]
$ npm ls --depth=0
Get help docs for a command:
$ npm help
Example:
$ npm help install
Quickly get a standalone version of a package that is browserified and usable in the browser.
https://wzrd.in/standalone/[@]
Examples:
Great for prototyping, but download the file or use Browserify yourself for production.
^mean in package.json versioning?