Node | npm知识梳理

378 阅读5分钟

4 npm 包管理器

npm 是一个命令行工具,是 Node 包管理器,安装了node 就默认安装了npm。

4.1 常用命令

  • npm --version 查看 npm 版本
  • npm install --global npm 升级 npm
  • npm 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 存储包文件的服务器在国外,下载速度很慢。 淘宝的开发团队在国内做了一个镜像:

developer.aliyun.com/mirror/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

npm scripts 使用指南 - 阮一峰的网络日志

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"
}