A package manager for Javascript, similar to pip in Python and gems in Ruby. npm comes together with node.js but does not require any node.js skills to use, and can be used without node.js. But it requires node.js to be installed for itself to function properly.
package.json
is the core of the npm. The package.json
file can easily be created with: npm init
. This file:
npm run ...
Start by initalising a project with the defaults:
npm init --yes
And add dependency lodash
:
npm install lodash
Now make some toy implementation in index.js
:
const _ = require('lodash');
const numbs = [1, 6, 3, 5, 2, 4];
_.each(numbs, num => console.log(num));
Execute index.js
by running:
node index.js
# 1
# 6
# 3
# 5
# 2
# 4
The application must be kept in repository without the node_modules
folder. node_modules
folder can always be re-constructed by npm with npm install
on the root folder.
Our toy implementation makes use of the require
keyword:
const _ = require('lodash');
require
is the way you import modules specific in node.js runtime environment. The suggested way is to use import
and export
that come with ES6. There are ways to make use of import
and export
in node.js runtime environment as well, but not as straight forward as simply using require
.
package.json
comes with a section called scripts
. Add the following in scripts
section:
"scripts": {
"start": "node index.js",
"fire": "node index.js"
}
You can create artibrary scripts as seen above. In order to call start
all you need to do is: npm start
. However, npm fire
will not work, it requires: npm run fire
. With that said, you can also call npm run start
.
Some platforms such as Heroku will look at the start
script. You also will want to populate start
so that you or any other developer can simply start your application with npm start
instead of trying to figure out what the entry point is.
main
in package.json
? Here is the answer.npm list -depth=0
npm list -g -depth=0
npm root -g
# Unrelated but listing files in that folder
ls $( npm root -g )
npm root -g | xargs ls
nodemon
and live-server
. Check them out.