什么是包
Node.js 中的第三方模块又叫做包,不同于 Node.js 中的内置模块与自定义模块,包是由第三方个人或者团队开发出来的,免费供所有人使用。
Node包管理器(NPM)可以让你在项目中轻松地对模块进行管理,它会下载指定的包、解决包的依赖、运行测试脚本以及安装命令行脚本。
npm
npm,Inc. 公司提供了一个包下载工具——npm,这个工具随着我们下载安装 Node.js 时一起安装到了用户的电脑上。我们在终端内输入 npm -v 就可以来查看自己电脑上 npm 包管理工具的版本号了。
包管理配置文件
npm 规定,在项目根目录中,必须提供一个叫做 package.json 的包管理配置文件。用来记录与项目有关的一些配置信息。比如说包的名称、版本号等。
设置 npm 镜像
因为 npm 的服务器在国外,众所周知的原因我们在使用普通 npm 下载包的时候经常会发生下载缓慢甚至是下载失败的情况。而淘宝在国内搭建了一个服务器,专门吧国外官方服务器上的包同步到国内的服务器中,然后在国内提供下载包的服务,从而极大地提高了下载包的速度和稳定性。
# 来将下载包的镜像源切换为淘宝镜像源,并在终端内执行
npm config set registry=https://registry.npmmirror.com/
# 来查看镜像源是否转换成功
npm config get registry
# 结果为 https://registry.npmmirror.com/ 表示成功
安装模块
为了展示如何通过 npm 来安装模块,我们创建一个 my-project 目录,安装 colors 模块,然后创建一个 index.js 文件
mkdir my-project
cd my-project
npm install colors
要验证模块是否安装成功,可以在该目录下查看是否有 node_modules/colors 目录。
然后,用你最喜欢的编辑器编辑 index.js 文件
require('colors');
console.log('smashing node'.rainbow);
运行 index.js
node index.js
自定义模块
要自定义模块,你需要创建一个 package.json 文件。通过这种方式来定义模块有三种好处:
- 可以很方便地将项目中的模块分享给其他人,不需要将整个 node_modules 目录发给他们。因为有了 package.json 之后,其他人运行 npm install 就可以把依赖的模块都下载下来。
- 可以很方便地记录所依赖模块地版本号。举个例子来说,当你的项目通过 npm install colors 安装的是 0.5.0 的 colors。一年后,由于 colors 模块 API 的更改,可能导致与你的项目不兼容,如果你使用 npm install 并且不指定版本号来安装的话,你的项目就没法正常运行了。
- 让分享艮简单。如果你的项目不错,你是否想将它分享给别人?因为有 package.json 文件,通过 npm publish 就可以将其发布到 NPM 库中供所有人下载使用了。
在原先创建的目录(my-project)中,删除 node_modules 目录并创建一个 package.json 文件
{
"name": "my-colors-project",
"version": "0.0.1",
"dependencies": {
"colors": "0.5.0"
}
}
package.json 文件是从 Node.js 和 NPM 两个层面来描述项目的。其中只有 name 和 version 是必要的字段。通常情况下,还会定义一些依赖的模块,通过使用一个对象,将依赖模块的模块名及版本号以对象的属性和值将其定义在 package.json 文件中。
安装依赖的模块,然后再次运行 index.js 文件
npm install
node index # 注意,这里的文件名不需要加上“.js”后缀
现在自定义模块是内部使用的。不过,如果想发布出去,NPM 提供了如下这种方式,可以很方便地发布模块
npm publish
当别人使用 require(‘my-colors-project’)时,为了能让 Node 知道该载入哪个文件,我们可以在 package.json 文件中使用 main 属性来指定
{
"name": "my-colors-project",
"version": "0.0.1",
"main": "./index",
"dependencies": {
"colors": "0.5.0"
}
}
当需要让该模块暴露 API 地时候,main 属性就会变得尤为重要,因为你需要为模块定义一个入口(有得时候,入口可能是多个文件)
小贴士:如果你不想发布你得模块,那么在 package.json 中加入 “private”: “true”。这样可以避免误发布。
要查看 package.json 文件所有得属性文档,可以使用如下命令
npm help json