4 npm 包管理器
npm 是一个命令行工具,是 Node 包管理器,安装了node 就默认安装了npm。
4.1 常用命令
npm --version查看 npm 版本npm install --global npm升级 npmnpm init生成 package.json 说明书文件npm init --yes (npm init -y)可以跳过向导,快速生成npm install (npm i)一次性把 dependencies 选项中的依赖项全部安装npm install 包名npm install 包名1 包名2仅下载npm i 包名@版本号下载指定版本npm install lodash@"> 3.2.0"npm install --save 包名下载并且保存依赖项npm update 包名升级模块npm uninstall 包名 (npm un 包名)只删除,依赖项会依然保存npm uninstall --save 包名删除的同时也会把依赖信息全部删除--no-save不要保存依赖npm install lodash -D/-save-dev保存到开发依赖npm help查看使用帮助npm 命令 --help看具体命令的使用帮助(npm uninstall --help)npm list以树型结构列出当前项目安装和依赖的模块npm list -global列出全局安装的模块npm list 包名列出单个模块npm view/V/info/show 包名查看包信息- 注意:npm5 之后不需要 --save,它会自动保存依赖信息
安装完的打印信息
added 1 package 表示安装了一个包,audited 2 packages 表示检查了两个包的安全漏洞,found 0 vulnerabilities表示发现了0个漏洞,即,安装成功了。
4.2 国内镜像
npm 存储包文件的服务器在国外,下载速度很慢。 淘宝的开发团队在国内做了一个镜像:
使用淘宝的 cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org;
# 安装 cnpm 并指定淘宝镜像作为源
# --global 表示安装到全局,可简写为 -g
# 安装到全局就可以在任意目录执行 cnpm 命令
# 走国外的 npm 服务器下载 jQuery 包,速度比较慢
npm install jQuery;
# 使用cnpm就会通过淘宝的服务器来下载
cnpm install jQuery;
# 不想安装 cnpm 又想使用淘宝的服务器来下载
npm install jquery --registry=https://npm.taobao.org;
# 每次手动加参数很麻烦,可以把这个选项加入到配置文件中
npm config set registry https://npm.taobao.org;
# 查看 npm 配置信息
npm config list;
# 查看 registry 是否配置正确
npm config get registry
# 配置后所有的 npm install 都会通过淘宝的服务器来下载
# 恢复原版配置
npm config delete registry
4.3 Yarn 和 Pnpm
早期的 npm 存在有诸多问题,yarn 和 pnpm 的出现就是为了帮助我们解决。
- yarn 和 pnpm 通常比 npm 更快,因为它们可以并行安装依赖项;
- yarn 和 pnpm 都有更强大的缓存机制,可以减少重复下载依赖的次数;
- pnpm 在磁盘空间占用方面表现更好,因为它共享相同的包,而不是复制多个副本到每个项目的 node_modules 目录下;
- 但新技术难免存在兼容性问题和不稳定性问题。
corepack enable #启用 corepack
yarn -v #查看 yarn 版本
corepack prepare yarn@stable --activate #切换 yarn 版本到最新
corepack prepare yarn@1 --activate # 切换到1.X.X
yarn init (初始化,创建 package.json)
yarn add xxx(添加依赖)
yarn add xxx -D(添加开发依赖)
yarn remove xxx(移除包)
yarn(自动安装依赖)
yarn run(执行自定义脚本)
yarn <指令>(执行自定义脚本)
yarn global add(全局安装)
yarn global remove(全局移除)
yarn global bin(全局安装目录)
npm install -g pnpm
pnpm init(初始化项目,添加 package.json)
pnpm add xxx(添加依赖)
pnpm add -D xxx(添加开发依赖)
pnpm add -g xxx(添加全局包)
pnpm install(安装依赖)
pnpm remove xxx(移除包)
pnpm config set registry https://registry.npmmirror.com
pnpm config delete registry
4.4 package.json
package.json
每一个项目的根目录下都要有一个package.json文件:
- 用于描述项目的元数据和依赖项信息的文件,包含项目的名称/版本/作者/许可证等元数据信息;
- 本质是JSON对象,每个属性就是当前项目的一项设置;
- 其中的
dependencies选项包含了项目运行所依赖的第三方包的列表及版本范围;devDependencies指定项目开发所需要的模块; - package.json 还可以定义一些脚本命令,用于执行各种开发任务,如构建、测试和部署等;
- 这个文件可以通过
npm init自动初始化出来; - 如果不小心删掉了
node_modules,只需执行npm install就会自动把package.json中的dependencies中所有的依赖项全部都下载回来。
package.json 示例
{
"name": "Hello World", #项目名
"version": "0.0.1", #项目版本
"author": "张三",
"description": "第一个node.js程序",
"keywords":["node.js","javascript"],
"repository": { #仓库地址
"type": "git"
"url": "https://path/to/url"
},
"license":"MIT",
"engines": {"node": "0.10.x"},
"bugs":{"url":"http://path/to/bug","email":"bug@example.com"},
"contributors":[{"name":"李四","email":"lisi@example.com"}],
"scripts": { #npm脚本
"start": "node index.js"
},
"dependencies": { #项目运行依赖
"express": "latest",#安装最新版本
"mongoose": "~3.8.3", # ~表示安装3.8.x的最新版本(不低于3.8.3)
"handlebars-runtime": "^1.0.12", # ^表示安装1.x.x最新版本(不低于1.0.12)
"express3-handlebars": "~0.5.0",
"MD5": "~1.2.0"
},
"devDependencies": {
"bower": "~1.2.8",
"grunt": "~0.4.1",
"grunt-contrib-concat": "~0.3.0",
"grunt-contrib-jshint": "~0.7.2",
"grunt-contrib-uglify": "~0.2.7",
"grunt-contrib-clean": "~0.5.0",
"browserify": "2.36.1",
"grunt-browserify": "~1.3.0",
} #项目开发依赖
}
package-lock.json
package-lock.json 是在安装项目依赖项时自动生成的锁定文件。
它记录了精确的依赖项版本,以及它们的完整依赖树结构。它还包含了每个依赖项的下载地址,以及安装时间戳等信息。
package-lock.json 的目的:
- npm install 会默认下载包的最新版本,
package-lock.json锁定版本号,使得 npm 默认下载记录在册的版本的包,防止自动升级; - 确保在不同的环境下,安装的依赖项保持一致性,避免因为依赖项的不一致导致的构建失败或运行时错误。
npm script
scripts 指 npm 命令的缩写,比如 "start" 指定了npm run start所要执行的命令.
"scripts": {
"preinstall": "echo here it comes!",
"postinstall": "echo there it goes!",
"start": "node index.js",
"test": "tap test/*.js"
}