Node.js学习笔记(二) 包管理器

NPM 是与 Node.js 一起安装的包管理器,用户可以从 NPM 服务器上下载别人编写的模块以提高开发效率

可以使用 npm --version 命令查看 npm 版本,可以使用 npm install npm -g 命令升级 npm 版本

1、安装模块

可以使用 npm install 命令安装模块,安装模块的方式有两种,分别是本地安装(local)和全局安装(global)

  • 本地安装的模块会放在当前目录中的 node_modules 目录下,可以通过 require() 引入程序

  • 全局安装的模块会放在全局目录中,可以直接在命令行使用

如果希望具备两者功能,那么需要同时在本地和全局安装模块,常用的命令和参数如下:

> # 根据当前文件下的 package.json 配置文件安装依赖
> npm install 
> npm i # 简写
> # 本地安装模块
> npm install moduleName
> # 全局安装模块
> npm install moduleName --golbal
> npm install moduleName -g # 简写
> # 安装模块,并将信息写入 package.json 文件中的 dependencies(生产环境依赖)
> npm install moduleName --save
> npm install moduleName -S # 简写
> # 安装模块,并将信息写入 package.json 文件中的 devDependencies(开发环境依赖)
> npm install moduleName --save-dev
> npm install moduleName -D # 简写

2、卸载模块

可以使用 npm uninstall 命令卸载模块,常用的命令和参数如下:

> # 删除指定模块(本地)
> npm uninstall moduleName
> # 删除指定模块(全局)
> npm uninstall moduleName --global
> npm uninstall moduleName -g # 简写
> # 删除模块,同时删除 package.json 文件中的 dependencies 关于该模块的信息
> npm uninstall moduleName --save
> npm uninstall moduleName -S # 简写
> # 删除模块,同时删除 package.json 文件中的 devDependencies 关于该模块的信息
> npm uninstall moduleName --save-dev
> npm uninstall moduleName -D # 简写

3、查看信息

我们可以使用 npm list 命令查看已安装的模块,常用的命令和参数如下:

> # 查看所有已安装的模块(本地)
> npm list
> # 查看所有已安装的模块(全局)
> npm list --global
> npm list -g # 简写
> # 指定展开的深度为零,即不展示依赖模块
> npm list --depth 0
> # 查看指定模块
> npm list moduleName

如果想了解更详细的信息,可以查看各模块的 package.json 文件,它位于模块目录下,用于描述模块的属性

一些常见的属性如下:

  • name:包的名称

  • version:包的版本号

    npm 使用语义版本号,格式为 X.Y.Z,分别代表主版本号、次版本号和补丁版本号

    若修复漏洞,则更新 Z;若新增功能但向下兼容,则更新 Y;若有大变动且不向下兼容,则更新 X

  • description:包的描述

  • main:入口文件,默认是根目录下的 index.js 文件

  • dependencies:生产环境下的依赖包列表

  • devDependencies:开发环境下的依赖包列表

  • script:指定脚本命令,命令行下使用 npm run <scriptName> 即可运行

  • author:作者姓名

  • license:许可证类型

  • homepage:官网地址

  • repository:仓库信息

4、更新模块

可以使用 npm update 命令更新模块,常用的命令和参数如下:

> # 更新全部模块(本地)
> npm update
> # 更新全部模块(全局)
> npm update --global
> npm update -g # 简写
> # 更新指定模块
> npm update moduleName
> # 更新指定模块到指定版本
> npm update moduleName@X.Y.Z
> # 更新指定模块到最新版本
> npm update moduleName@latest
> # 更新执行模块,同时将信息记录到 package.json 文件
> npm update moduleName --save

使用 npm update 命令有两个注意的地方,第一个是 版本不能回退,第二个是 只更新到次版本号

比如 lodash 模块有三个版本,分别是 3.9.13.10.14.17.15

假如现在我们安装好了 3.10.1 版本的 lodash,则它既不能回退到 3.9.1,也不能更新到 4.17.15

5、修改配置

(0)一般格式

> npm config --help
# npm config set <key> <value>
# npm config get [<key>]
# npm config delete <key>
# npm config list [--json]
# npm set <key> <value>
# npm get [<key>]

# alias: c
> npm config list
# ; cli configs
# metrics-registry = "https://registry.npmjs.org/"
# scope = ""
# user-agent = "npm/6.4.1 node/v10.15.3 win32 x64"

# ; userconfig C:\Users\<username>\.npmrc
# registry = "https://registry.npmjs.org/"

# ; builtin config undefined
# prefix = "C:\\Users\\<username>\\AppData\\Roaming\\npm"

# ; node bin location = C:\nodejs\node.exe
# ; cwd = C:\Users\<username>\Desktop
# ; HOME = C:\Users\<username>
# ; "npm config ls -l" to show all defaults.

对于 npm,有七种不同级别的配置方式,其优先级从高到低排序如下:

  • 命令行参数
  • 环境变量:以 npm_config_ 开头的环境变量被认为是 npm 配置
  • 项目 .npmrc 配置文件:位于项目根目录下
  • 用户配置:使用命令 npm config get userconfig 可查看配置文件路径
  • 全局配置:使用命令 npm config get globalconfig 可查看配置文件路径
  • 内置 .npmrc 配置文件:位于 npm 的安装目录下
  • 默认配置

(1)设置代理

> # 查看代理,默认为 https://registry.npmjs.org/
> npm config get registry
> # 修改代理
> npm config set registry https://registry.npm.taobao.org

(2)设置全局安装的默认路径

> # 查看全局安装的默认路径,Windows 下默认为 C:\Users\<username>\AppData\Roaming\npm
> npm config get prefix
> # 修改全局安装的默认路径
> npm config set prefix C:\nodejs\npm

(3)设置缓存路径

> # 查看缓存路径,Windows 下默认为 C:\Users\<username>\AppData\Roaming\npm-cache
> npm config get cache
> # 修改缓存路径
> npm config set cache C:\nodejs\npm-cache

6、npx

(1)介绍

最后稍微补充一下 npx,如果我们说 npm 是一个包管理器,那么 npx 就是一个包执行器,什么意思呢?

我们知道,本地安装的包只能在项目中使用,只有全局安装的包才能在命令行使用,这样就会造成一些不便

npx 就是为了解决这样的问题出现的,它可以在命令行中直接运行指定的模块

(2)原理

在默认情况下,npx 首先会在项目下的 node_modules/.bin 目录和系统环境变量 $PATH 中查找

如果没有找到,npx 就会将该模块下载到一个临时目录,使用以后再把它删除,有两个参数可以更改这种默认行为

  • --no-install:强制使用本地模块,不去下载远程模块,若在本地没有找到模块,那么直接报错
  • --ignore-existing:强制使用远程模块,即使本地有该模块,也不使用

(3)例子

  • 在全局未安装 create-react-app 的情况下,使用 create-react-app 创建一个脚手架
npx create-react-app my-app
  • 使用特定版本的 Node 执行脚本文件
npx node@12.18.0 test.js

(4)思考

如果我们不使用 npx,是否有办法在命令行里执行项目中安装的模块呢?答案是肯定的,只不过比较麻烦一点

第一种方法,写完整的路径去调用,node_modules/.bin/moduleName

第二种方法,在 package.json 文件的 script 字段中使用

【 阅读更多 Node.js 系列文章,请看 Node.js学习笔记

posted @ 2020-01-19 23:03  半虹  阅读(275)  评论(0编辑  收藏  举报