一、包的概念
1. 什么是包?
Node.js 中的 第三方模块 又叫做 包,指的是同一个概念,只不过叫法不同。
2. 包的来源
不同于 Node.js 中的内置模块与自定义模块,包是由第三方个人或团队开发出来的,免费供所有人使用。
3. 为什么需要包
- 由于 Node.js 的内置模块仅提供了一些底层的 API,导致在基于内置模块进行项目开发的时,效率很低。
- 包是基于内置模块封装出来的,提供了更高级、更方便的 API,极大的提高了开发效率。
- 包和内置模块之间的关系,类似于 jQuery 和 浏览器内置 API 之间的关系。
4. 从哪里下载包
- 国外有一家 IT 公司,叫做
npm, Inc.
这家公司旗下有一个非常著名的网站: https://www.npmjs.com ,它是全球最大的包共享平台,你可以从这个网站上搜索到任何你需要的包,只要你有足够的耐心! npm, Inc.
公司提供了一个地址为 https://registry.npmjs.org 的服务器,来对外共享所有的包,我们可以从这个服务器上下载自己所需要的包。
注意
- 从 https://www.npmjs.com 网站上搜索自己所需要的包
- 从 https://registry.npmjs.org 服务器上下载自己需要的包
5. 如何下载包
npm, Inc.
公司提供了一个包管理工具,我们可以使用这个包管理工具,从 https://registry.npmjs.org 服务器把需要的包下载到本地使用。- 这个包管理工具的名字叫做
Node Package Manager
(简称npm
包管理工具),这个包管理工具随着 Node.js 的安装包一起被安装到了用户的电脑上。 - 可以在终端中执行
npm -v
命令,来查看自己电脑上所安装的 npm 包管理工具的版本号
二、包管理配置文件
npm
规定,在项目根目录中,必须提供一个叫做 package.json
的包管理配置文件。用来记录与项目有关的一些配置信息。例如:
- 项目的名称、版本号、描述等
- 项目中都用到了哪些包
- 哪些包只在开发期间会用到
- 哪些包在开发和部署时都需要用到
1. 初始化 package.json
使用 npm init
命令就可以初始化一个 package.json
文件,在初始化的过程中系统会一一提示设置相关配置,若不想填写则一路 回车
,系统会设置默认值,最后会在项目根目录生成该配置文件
# 系统会一一提示设置相关配置。提示设置的字段均为必填字段(有的可以用回车键,即设置为空带过)
npm init
# 会直接创建一个package.json,只配置了一些字段并给出默认值。
npm init -y
2. 配置说明
查看官文文档配置详解,其中 name
和 version
是必填项,名称和版本一起构成一个唯一标识符,下面列出一些常见的配置项
name
:必填项, 项目名称,更准确的解释是包的名称
,以后要发布包时,该名称必须是唯一的(也不能与node
内置模块的名称相同),其他限制如下:- 名称必须小于等于
214
个字符 - 包的名称不能以
点
或下划线
开头 - 包的名称中不能有
大写字母
(也不要有中文
) - 该名称最终成为URL、命令行参数和文件夹名称的一部分。因此,名称不能包含任何非url安全字符。
- 名称必须小于等于
version
:必填项,包的版本号desription
:包的描述。它是一个字符串。这有助于人们发现你的包,因为它在npm搜索中列出。keywords
:关键词。它是一个字符串数组。这有助于人们在npm搜索中发现你的包。homepage
:项目主页的url。例如可以填写该项目再github
上的url地址bugs
:开发者的联系方式,代码库的issues地址等。如果代码使用者发现了bug,可以通过这个配置项找到提bug的地方。{ "url" : "https://github.com/owner/project/issues", "email" : "project@hostname.com" }
main
:包的入口文件,默认为index.js
scripts
:指定了运行脚本命令的npm命令行缩写。author
:项目的作者。可以为字符串,对象。{ "author": "Barney Rubble <b@rubble.com> (http://barnyrubble.tumblr.com/)" }
{ "name" : "Barney Rubble", "email" : "b@rubble.com", "url" : "http://barnyrubble.tumblr.com/" }
contributors
:项目的贡献者。author
的数组license
:开源协议。默认为ISC
dependencies
:项目的依赖。开发环境
和线上环境
都用到的包(核心依赖包
),通过npm install 包名 --save
或者npm install 包名
安装的包会出现在这里。devDependencies
:项目的依赖。只有在开发环境
用到的包(开发依赖包
),通过npm install 包名 --save-dev
或npm install 包名 -D
安装的包会出现在这里。
3. 多人协作的问题
第三方包的体积过大,不方便团队成员之间共享项目源代码。所以在共享时 剔除 node_modules,例如使用 git
管理代码时,要把 node_modules
添加到 .gitignore
忽略文件中。
4. 包的语义化版本规范
包的版本号是以“点分十进制”形式进行定义的,总共有三位数字,例如 2.24.0
,其中每一位数字所代表的的含义如下:
- 第1位数字:大版本(主版本)
- 第2位数字:功能版本(次版本)
- 第3位数字:Bug修复版本(修订版本)
版本号提升的规则:只要前面的版本号增长了,则后面的版本号归零。
三、发布包与删除包
1. 发布
- 登录
npm
,在npm
官网注册后,在终端执行npm login
,依次输入用户名、密码、邮箱# 登录前,必须把下载包的镜像源切换为 npm 官方的服务器 npm login
- 将终端切换到包的根目录之后,运行
npm publish
命令,即可将包发布到npm
上,(注意:包名不能雷同)。npm publish
2. 删除
- 与发布的第一步一样,必须先登录
- 运行
npm unpublish 包名 --force
命令,即可从 npm 删除已发布的包。npm unpublish 包名 --force
注意
- npm unpublish 命令只能删除 72 小时以内发布的包
- npm unpublish 删除的包,在 24 小时内不允许重复发布
- 发布包的时候要慎重,尽量不要往 npm 上发布没有意义的包!
五、常用命令
-
初始化
package.json
npm init -y
-
安装包(多个包一起安装时,包名与包名之间用空格隔开)
# 完整写法 npm install 包名 # 简写 npm i 包名 # 一次性安装所有的包 npm install # 全局安装包(后面的修饰符与包名的顺序无关紧要) npm i 包名 -g # 安装指定版本的包(默认情况下会自动安装最新的包) npm i moment@2.22.2 # 安装开发环境用到的包(后面的修饰符与包名的顺序无关紧要) # 完整写法 npm install 包名 --save-dev # 简写 npm install 包名 --D
-
卸载包
# 卸载项目依赖包 npm uninstall 包名 # 卸载全局包 npm uninstall 包名 -g
-
查看某个包的所有版本号
# 这里以 `vue` 包举例 npm view vue versions
-
查看 npm 配置
npm config ls
-
查看当前下载包的镜像源
npm config get registry
-
设置当前下载包的镜像源
# 例如设置淘宝镜像源:npm config set registry=https://registry.npmmirror.com/ npm config set registry=镜像源地址
-
查看全局安装的包
npm list -g
-
查看当前项目安装的包
npm list
-
清理缓存
npm cache clean --force
-
登录 npm(依次输入用户名、密码、邮箱)
# 登录前,必须把下载包的镜像源切换为 npm 官方的服务器 npm login
-
发布自己的包
npm publish
-
删除自己发布的包
npm unpublish 包名 --force