创建一个工程目录, 并 cd 到目录中, 运行
$npm init
这个工具将引导你创建一个 package.json 文件, 他只覆盖了大多数一般的项目, 并尽量让默认内容全面.
运行npm help json 获取 package.json 中的各个字段的文档及其定义
后面可以用
npm install <pkg> --save
来安装一个包并将其存储为 package.json 文件中的一个依赖模块
任何时间按下^C 退出.
简单来说:
npm init 创建或修改一个项目中的 package.json 文件
默认名称(显示在括号中)是当前文件夹的名字, 如果对于提示不输入任何字符并按下 Enter 键, npm 会将默认名称当做项目名称.
在完成提示内容后, npm init 将会给你一个即将创建的 package.json 文件的预览, 对于我们来说, 他看起来是这样的

{
"name":"project-name",
"version":"0.0.0",
"description":"...",
"main":"index.js",
"scripts":{
  "test":"echo \"Error:no test specified\" && exit 1"
},
"keywords":["npm","example"],
"author":"YourName","license":"MIT"
}
`</pre>

按下 Enter 进行确认, 你可以在后面随时修改, 通过编辑 package.json 或再次运行 npm init.
npm init 永远也不会移除你放在 package.json 中的信息, 仅仅根据需求进行调整.

### package.json

一个项目的 package.json 文件担任下列角色
- 他为 npm 提供一切信息
- 他告诉 Node 怎样处理一个包
- 他为人们查看项目提供一个进入点

### 创建一个包进入点

现在创建一个非常简单的脚本并将它存为 index.js

<pre>`//index.js
console.log("Hello, npm");
`</pre>

我们可以直接运行脚本

<pre>`$node index.js
Hello, npm
`</pre>

我们可以通过使用 require, 在其他的 Node 应用中应用这段脚本. 首先进入 Node REPL, 一个交互的命令行环境:

<pre>`$node
&gt; require('./index.js')
Hello, npm
{}
`</pre>

({}是 require 的返回值, 在这个例子中, 他是 index.js 的 exports 对象)
Node 允许我们省略.js 扩展名, 因此我们可以简写为 require(',/index').
如果我们在同一个 REPL 会话中再次运行 require, 我们将得到相同的返回值, 但是不会得到 console.log 输出, 因为 require 不会在同一个脚本中运行两次.
./在./index 中很重要, 因为他告诉 Node 这个路径是当前文件夹的相对路径. 如果我们不显示给出绝对路径或相对路径, 而是直接给 index, Node 会在一系列文件夹中寻找匹配的模块.

回顾一下, 在 package.json 文件夹中, 'main':'index.js' 的作用是什么?
当你 require 一个包含指向 main 脚本('main':'index.js')的 package.json 文件的文件夹时, Node 会认为你是在 require 这个脚本('index.js'), 所以前面的代码可以简写为

<pre>`require(./)
`</pre>

现在我们可以使用 package.json 来完成上面的工作, 因为我们的脚本命名为 index.js, 他是一个文件夹的默认脚本

### 第一个依赖模块

使用下面的命令来快速搜索 npm registry
`$npm search color`
如果想要获得更多的信息, 可以跳转到 npmjs.org, 在"最多依赖"的列表中可以查看流行的库
安装依赖模块
`$npm install --save colors`
这条指令会在本地文件夹中创建一个名为 node_modules 的文件夹并将 colors 下载到其中. `--save`将依赖模块自动加入到 package.json 文件中.

<pre>`"dependencies"{
  "colors":"~0.6.0-1"
}
`</pre>

现在我们来重写 index.js 来使用我们的新库. colors 扩展了 String 的原型因此我们可以非常简洁的表达带有颜色的文本:

<pre>`var colors = require('colors');
console.log('Hello, '.red,'npm'.green);

运行 index.js 文件, 你将在原来的输出中获得一个彩色字符串

node_modules 的层级

当不显示指定相对路径或绝对路径时, Node 首先查找本地的 ndoe_modules 文件夹, 当你使用 npm install 指令的时候这个文件夹被自动创建. 当 Node 发现 node_modules 下有一个叫做 colors 子目录时, Node 将他当做 require 的目标.
查看 node_modules/colors/package.json, 可以找到’main’:’colors’ , 因此 require colors这个文件夹时 Node 会认为 require 了 colors.js 这个脚本
然后从 require 函数中返回脚本中的 exports 对象.
如果找不到 colors 目录, 则会一直搜索到系统的根目录.