[root@alex ~]#yum -y install npm
[root@alex example]# yum install nodejs
[root@alex ~]# node -v
v5.5.0
[root@alex ~]# mkdir example
[root@alex ~]# cd example/
[root@alex example]# npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.
See `npm help json` for definitive documentation on these fields
and exactly what they do.
Use `npm install <pkg> --save` afterwards to install a package and
save it as a dependency in the package.json file.
Press ^C at any time to quit.
name: (example)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to /root/example/package.json:
{
"name": "example",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
Is this ok? (yes)
[root@alex example]# ll
total 4
-rw-r--r-- 1 root root 203 Feb 26 02:17 package.json
[root@alex example]# npm install express --save
/*
* 提示:该行代码过长,系统自动注释不进行高亮。一键复制会移除系统注释
* ▄ ╢░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▄ ╢░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▌ ╢░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▀ ╢░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▐ ╢░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▄ ╢░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadRequestedDeps → fetch ▀ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadRequestedDeps → netwo ▐ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadRequestedDeps → fetch ▄ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadRequestedDeps → netwo ▌ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadRequestedDeps ▐ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:vary → request ▌ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:vary → request ▌ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:vary → network ▀ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:vary → 200 ▐ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:vary → resolveWit ▐ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:vary → addNamed ▀ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:vary → get ▌ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:vary → headers ▌ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:vary → get ▌ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:vary → fetch ▀ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:vary → fetch ▐ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:vary → addNameRan ▄ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:vary → afterAdd ▀ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:vary → cache ▀ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:vary → afterAdd ▐ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:vary → afterAdd ▀ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:vary → network ▐ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:vary → afterAdd ▐ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:vary → afterAdd ▌ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:vary → fetchAndSh ▀ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:vary → network ▄ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:vary → 200 ▌ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:vary → fetch ▀ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:vary → network ▐ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:vary → fetch ▄ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:vary → afterAdd ▀ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:vary → network ▐ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:vary → fetch ▄ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:negotiator → requ ▄ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:negotiator → 200 ▌ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:negotiator → fetc ▐ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:negotiator → fetc ▄ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:negotiator → afte ▐ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:negotiator → 200 ▄ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:negotiator → fetc ▄ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:negotiator → fetc ▌ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:negotiator → netw ▀ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:negotiator → netw ▐ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:negotiator → fetc ▄ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:mime-db → request ▀ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:mime-db → 200 ▐ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:mime-db → fetch ▄ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:mime-db → network ▌ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:mime-db → fetch ▀ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:mime-db → afterAd ▄ ╢████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:raw-body → reques ▄ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:raw-body → networ ▌ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:raw-body → fetch ▄ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:raw-body → networ ▌ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:raw-body → fetch ▀ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:raw-body → networ ▐ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:raw-body → afterA ▀ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:raw-body → fetchA ▐ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:ms → request ▌ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:ms → network ▀ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:ms → network ▐ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:ms → network ▄ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:ms → network ▌ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:ms → 200 ▀ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:ms → fetch ▀ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:ms → fetch ▐ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:setprototypeof → ▀ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:setprototypeof → ▐ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:setprototypeof → ▀ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:setprototypeof → ▐ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:ee-first → reques ▀ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:ee-first → 200 ▐ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:ee-first → fetch ▄ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:ee-first → fetch ▌ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:unpipe → request ▄ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:unpipe → 200 ▌ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:unpipe → fetch ▌ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:unpipe → fetch ▀ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:media-typer → req ▌ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:media-typer → net ▀ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:media-typer → fet ▐ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:media-typer → fet ▄ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:media-typer → net ▌ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:media-typer → net ▀ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:media-typer → fet ▐ ╢█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░loadDep:ipaddr.js → reque ▀ ╢██████████████████░░░░░░░░░░░░░░░░░░░░░loadDep:ipaddr.js → netwo ▐ ╢██████████████████░░░░░░░░░░░░░░░░░░░░░░loadDep:ipaddr.js → fetch ▌ ╢██████████████████░░░░░░░░░░░░░░░░░░░░░loadDep:ipaddr.js → netwo ▀ ╢██████████████████░░░░░░░░░░░░░░░░░░░░░loadDep:ipaddr.js → fetch ▐ ╢██████████████████░░░░░░░░░░░░░░░░░░░░░░loadDep:ipaddr.js → after ▌ ╢██████████████████░░░░░░░░░░░░░░░░░░░░░loadDep:ipaddr.js → fetch ▀ ╢██████████████████░░░░░░░░░░░░░░░░░░░░░loadDep:ipaddr.js → fetch ▐ ╢██████████████████░░░░░░░░░░░░░░░░░░░░░░loadDep:ipaddr.js → netwo ▄ ╢██████████████████░░░░░░░░░░░░░░░░░░░░░loadDep:forwarded ▀ ╢██████████████████░░░░░░░░░░░░░░░░░░░░░░loadDep:mime → request ▄ ╢████████████████████░░░░░░░░░░░░░░░░░loadDep:mime → 200 ▌ ╢████████████████████░░░░░░░░░░░░░░░░░loadDep:mime → fetch ▐ ╢████████████████████░░░░░░░░░░░░░░░░░░loadDep:mime → fetch ▄ ╢████████████████████░░░░░░░░░░░░░░░░░loadDep:mime → fetch ▌ ╢████████████████████░░░░░░░░░░░░░░░░░loadDep:mime → network ▄ ╢████████████████████░░░░░░░░░░░░░░░░░loadAllDepsIntoIdealTree ▌ ╢█████████████████████████████extract ▀ ╢█████████████████████████████extract → unbuild ▐ ╢█████████████████████████████extract → gunzTarPerm ▐ ╢█████████████████████████████extract → gunzTarPerm ▄ ╢████████████████████████████extract → gunzTarPerm ▐ ╢█████████████████████████████extract → gunzTarPerm ▄ ╢████████████████████████████extract → gunzTarPerm ▌ ╢████████████████████████████extract:setprototypeof ▐ ╢█████████████████████████████extract:ms → gunzTarPerm ▀ ╢████████████████████████████extract:send → gunzTarPer ▄ ╢████████████████████████████extract:express ▐ ╢█████████████████████████████preinstall → lifecycle ▀ ╢████████████████████████████build ▄ ╢█████████████████████████████build:path-to-regexp → li ▀ ╢████████████████████████████install:etag → install ▄ ╢████████████████████████████postinstall:setprototypeo ▌ ╢█████████████████████████████
*/
runTopLevelLifecycles ▄ ╢█████████████████████████████
example@1.0.0 /root/example
└─┬ express@4.16.2
├─┬ accepts@1.3.4
│ ├─┬ mime-types@2.1.18
│ │ └── mime-db@1.33.0
│ └── negotiator@0.6.1
├── array-flatten@1.1.1
├─┬ body-parser@1.18.2
│ ├── bytes@3.0.0
│ ├─┬ http-errors@1.6.2
│ │ ├── depd@1.1.1
│ │ ├── inherits@2.0.3
│ │ └── setprototypeof@1.0.3
│ ├── iconv-lite@0.4.19
│ └── raw-body@2.3.2
├── content-disposition@0.5.2
├── content-type@1.0.4
├── cookie@0.3.1
├── cookie-signature@1.0.6
├─┬ debug@2.6.9
│ └── ms@2.0.0
├── depd@1.1.2
├── encodeurl@1.0.2
├── escape-html@1.0.3
├── etag@1.8.1
├─┬ finalhandler@1.1.0
│ └── unpipe@1.0.0
├── fresh@0.5.2
├── merge-descriptors@1.0.1
├── methods@1.1.2
├─┬ on-finished@2.3.0
│ └── ee-first@1.1.1
├── parseurl@1.3.2
├── path-to-regexp@0.1.7
├─┬ proxy-addr@2.0.3
│ ├── forwarded@0.1.2
│ └── ipaddr.js@1.6.0
├── qs@6.5.1
├── range-parser@1.2.0
├── safe-buffer@5.1.1
├─┬ send@0.16.1
│ ├── destroy@1.0.4
│ └── mime@1.4.1
├── serve-static@1.13.1
├── setprototypeof@1.1.0
├── statuses@1.3.1
├─┬ type-is@1.6.16
│ └── media-typer@0.3.0
├── utils-merge@1.0.1
└── vary@1.1.2
runTopLevelLifecycles ▄ ╢█████████████████████████████
npm WARN EPACKAGEJSON example@1.0.0 No description
runTopLevelLifecycles ▌ ╢█████████████████████████████
npm WARN EPACKAGEJSON example@1.0.0 No repository field.
runTopLevelLifecycles ▀ ╢█████████████████████████████
[root@alex example]# ll
total 8
drwxr-xr-x 50 root root 4096 Feb 26 02:18 node_modules
-rw-r--r-- 1 root root 253 Feb 26 02:18 package.json
[root@alex example]# vim index.js
var express = require('express');
var app = express();
app.get('', function(req, res){
res.send('Hello');
});
var server = app.listen(2000, function(){
var host = server.address().address;
var port = server.address().port;
console.log('Example listening at http://%s:%s', host, port);
});
[root@alex example]# node
node node_version_has_solaris_binary
[root@alex example]# node index.js
Example listening at http://:::2000