npm
1. 什么是npm
npm 为你和你的团队打开了连接整个 JavaScript 天才世界的一扇大门。它是世界上最大的软件注册表,每星期大约有 30 亿次的下载量,包含超过 600000 个 包(package) (即,代码模块)。
npm 由三个独立的部分组成:
- 网站: 是开发者查找包(package)、设置参数以及管理 npm 使用体验的主要途径.
- 注册表(registry): 是一个巨大的数据库,保存了每个包(package)的信息。
- 命令行工具 (CLI) : 通过命令行或终端运行。开发者通过 CLI 与 npm 打交道。
2. 常用命令
安装/卸载一个npm
包
安装命令为 install
, 卸载命令为 uninstall
, 两者除了这个关键字,其他参数相同.
1 | npm install <package_name> |
更新一个本地包
1 | # 查找当前项目下所有非最新版的包,如果所有包都是最新版,则不提示下面格式的内容 |
切换npm
源
1 | # 查看npm源地址 |
查看安装目录
1 | # 查看本地安装的目录 |
查看当前安装模块
1 | npm ls |
查看模块(包)信息
1 | npm info <package_name> |
清除缓存
1 | npm cache clean --force |
3. package.json
npm
通过package.json
来管理本地安装的npm
包:
- 列出项目中依赖的包
- 允许你使用版本语义化来管理每个依赖包的版本
- 使的每次
build
都是可复制的, 并且更方便与人协作.
必需项
一个package.json
中必须的两个配置字段为:
name
version
1 | { |
创建一个package.json
1. 通过命令行交互式创建
1 | npm init |
2. 创建一个默认的package.json
1 | npm init --yes |
该命令将会根据当前目录现存信息生成一个默认的 package.json
, 一个很大的特点是它会遍历node_modules
去找出当前已经安装的依赖包.
name
: the current directory nameversion
: always1.0.0
description
: info from the readme, or an empty string""
main
: alwaysindex.js
scripts
: by default creates an emptytest
scriptkeywords
: emptyauthor
: emptylicense
:ISC
bugs
: info from the current directory, if presenthomepage
: info from the current directory, if present
4. registry
registry
注册表是npm提供的一个查询服务, 官方的查询地址是https://registry.npmjs.org/, 这个网址后面跟上模块名就能得到一个json
对象, 里边是该模块所有版本的信息, 比如可以尝试点击 https://registry.npmjs.org/react.就能看到react所有版本的信息, 它跟下面的命令效果相似:
1 | npm view react; |
返回的json
对象里,有一个dist.tarball
属性, 是该版本压缩包的地址:
1 | "dist": { |
到这个网址下载压缩包,在本地解压,就得到了模块的源码。npm install
和npm update
命令,都是通过这种方式安装模块的。
5. 模块的安装过程
发出
npm install
命令npm
向registry
查询模块压缩包的网址下载压缩包,存放在
~/.npm
下解压压缩包到当前
node_modules
目录
注意,一个模块安装以后,本地其实保存了两份。一份是~/.npm
目录下的压缩包,另一份是node_modules
目录下解压后的代码。但是,运行npm install
的时候,只会检查node_modules
目录,而不会检查~/.npm
目录。也就是说,如果一个模块在~/.npm
下有压缩包,但是没有安装在node_modules
目录中,npm 依然会从远程仓库下载一次新的压缩包。
6. 版本语义化 semantic versioning
package.json
中的版本号一共有四个部分
- 主版本号:一般为 不兼容上个版本的大修改
- 次版本号:一般为 增加了新功能,并且可以向后兼容
- 修订版本号:一般为 有bug修复,并且可以向后兼容
- 日期版本号加希腊字母版本号:希腊字母一共有五个[
base
,alpha
,beta
,RC
,release
]
1 | { |