Node、 NPM 和 NVM常用命令以及语义化版本 Semver

452 阅读6分钟

Node

Javascript 的运行时,提供诸多系统层面的 API,如 I/O、网络等,可以用来搭建 web 服务器。

下载方式

  1. 官网下载安装包:nodejs.org/en/download
  2. 使用 NVM 下载。

node 命令常用选项

  1. -v--version 打印 node 版本号。
  2. -h--help 打印 node 的命令行选项。 此选项的输出不如本文档详细。
  3. -e--eval "script" 把跟随的参数作为 JS 来执行。
  4. -p--print "script" 与 -e 相同,但会打印结果。

其他详细选项可运行 man node 在终端中查看  

NPM

NPM 是 Node.js 指定的官方包管理工具,全称 Node Package Manager。是 JS 模块的的托管平台,并提供给所有开发者上传和下载,为 Node.js 生态的蓬勃发展起到了关键性作用。

安装方式

NPM 跟随 Node.js 自动安装。

升级方式

目前遇到的情况是,Windows 情况下,如果按照提示命令 npm install npm -g 升级 npm,则会默认在C:\\Users\用户名\AppData\Roaming\npm 中创建一个新的 npm 包管理器。而 C:\\Program Files\nodejs\npm中仍然存在旧版本的 npm 管理器。

会发现,使用npm -v npm ls -g npm命令显示出的版本不同。

虽然日常使用没发现什么问题,但这明显不符合简约主义,所以 google 之后,整理以下升级方法。(PS:只适用于 Windows)

  1. 方式一

    1. 确保已经安装了 Node.js
    2. 以管理员身份运行 Powershell
    3. 分别执行以下命令:
    Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Force
    npm install -g npm-windows-upgrade
    npm-windows-upgrade
    

    1. 选择安装版本

    2. 如果脚本有问题,请考虑手动添加参数。 一个常见的问题是脚本无法找到 npm(因此不知道将其安装在哪里)在这种情况下,请手动传递位置。

    npm-windows-upgrade --npm-path "C:\nodejs"
    
    1. success !
  2. 方法二

    使用powershell中进入nodejs的安装目录,例如C:\ Program Files\nodejs 运行npm install npm(不带 -g 选项)

  3. 方法三

    下载并运行最新的 Node.js 安装包。 MSI 将更新您已安装的 Node.js 和 npm。

  4. 方法四

    运行命令:

    npm config set prefix "C:\Program Files\nodejs"
    

    设置 npm 全局安装包的位置为 Node.js 程序文件夹,如此运行npm install xxx(包名) -g,就会在 Node.js 文件夹安装更新包文件了。达到了曲线救国的目的。

    note:

    1. 如果 Node.js 的安装路径在C:盘,那么更新 npm 包的时候,可能需要使用用管理员方式打开 powershell,遂不推荐。
    2. 如果使用了 NVM 管理 node,则直接执行 npm install -g npm@last 即可,不会重复安装。

常用命令

  1. npm install

    从指定位置安装包,别名:add, i

    # 默认情况下 根据当前目录的 package.json 安装 package
    npm install
    
    
    # 安装指定 package 到项目开发依赖
    npm install -D webpack webpack-cli
    
    # 添加 -g 选项 安装制定 package 到全局目录
    npm install -g whistle
    

    可以添加可选项:

    1. -P, --save-prod(默认值):添加到生产依赖
    2. -D, --save-dev:只添加到开发依赖
    3. --no-save: 只安装,不添加到依赖项
    4. -g: 安装到全局目录
    # 安装软件包到全局
    

    npm install 命令安装的依赖包最终是什么版本这个问题困绕着我,本着求是的精神,google 了一圈,结合代码实践,发现网上的回答都比较局限,如今(2020-03-16)的 npm 版本来到了 6.13.4,这里结合了自身实践得出的结论,更新一下 npm 最新的版本控制机制……

    1. 如果package.json 和 package-lock.json 中的模块版本不一致,则安装符合 package.json 版本要求(符合版本要求指:^1.2.x=1.3.x,~1.2.3=1.2.6)的最高版本的依赖模块,并且更新 package-lock.json 中的指定版本依赖模块

    2. 如果 package.json 和 package-lock.json 中的模块版本一致(模块版本一致指:^1.2.x=1.3.x,~1.2.3=1.2.6),则安装 package-lock.json 中的指定版本依赖模块

    3. 如果 package.json 中指定版本号(即不使用^或~前缀直接写具体版本),则安装 package.json 中的模块版本,并且更新 package-lock.json 中的指定版本依赖模块

    4. 其实在不同的 node 版本中 npm install 的规则还不太一样,比如 npm 5.0.x 版本,不管 package.json 怎么变,npm install 时都会根据 package-lock.json 下载。所以本篇文章的目的是告诉大家即使 google 也会有时效性问题。以上代码作者仅保证在 npm(6.13.4)下有效!

  2. npm uninstall

    移除包,别名:unlink, remove, rm, r, un

    npm uninstall webpack webpack-cli
    
  3. npx

    运行命令,如果本地不存在,则从远端 registry 寻找。

    作用:

    1. 不用下载安装 package 到全局环境,节省空间;
    2. 默认使用最新版代码。
    # 快速创建一个 react 项目。
    npx create-react-app
    
  4. npm init

    快速初始化一个 package.json 文件,别名:create, innit

    • npm init foo -> npm exec create-foo
    • npm init @usr/foo -> npm exec @usr/create-foo
    • npm init @usr -> npm exec @usr/create

    npm init react-app 快速创建一个 react 项目。

  5. npm config

    更新和编辑用户或全局 .npmrc 文件的内容,别名:c

    # 设置 npm 的镜像仓库为淘宝镜像
    npm config set registry https://registry.npmmirror.com
    
    # 查看
    npm config get registry 
    
    # 移除
    npm config delete registry
    
    # 进入 vi 编辑模式 
    npm config edit
    
    # 查看所有配置文件 包括默认配置和用户配置文件
    npm config list -l
    
  6. npm view

    查看远端仓库信息,别名:v, info, show

    # 查看 vite 仓库信息概要 包括依赖信息、contributers
    npm view vite
    
  7. npm ls

    列出已经安装的软件包,别名list, la, ll

    # 查看项目安装的所有依赖包信息
    npm list --all
    
    # 查看项目中安装的 vue 的版本信息
    npm list vue
    
  8. npm update

    根据 semver 规则升级依赖包,别名upgrade, up, udpate

    # 升级 vue 全局依赖
    npm update -g vue
    

NVM

NVM 全称 Node Version Manager,node 版本管理工具,方便安装和切换 node 版本。

安装方式

  1. 在 MAC 环境下使用 Homebrew

    brew install nvm
    
    # 在用户目录创建 NVM 的工作文件,如果它不存在
      mkdir ~/.nvm
    
    # 加入下面的配置项到你的 终端配置文件中 比如 ~/.zshrc 
    export NVM_DIR="$HOME/.nvm"
      [ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && . "/opt/homebrew/opt/nvm/nvm.sh" 
      [ -s "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" ] && . "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" 
    

重启终端即可使用 NVM

  1. PC 环境下 exe 安装包 Releases · coreybutler/nvm-windows (github.com)

常用命令

# 查看已安装 node 版本
nvm ls 

# 查看可安装 的node 版本
nvm ls-remote --lts

# 安装指定版本 node
nvm install 8.0.0 

# 卸载 node
nvm uninstall

# 使用最新的可用 8.0.x 版本
nvm use 8.0 

# 使用 node 6.10.3 运行 app.js
nvm run 6.10.3 app.js

# 在 shell 上设置默认的 node 版本
nvm alias default 8.1.0

# 在 shell 上设置默认的 node 版本为最新版
# node 是 最新版的别名
nvm alias default node  
  
# 安装最新的可用版本
nvm install node

# 使用最新版本
nvm use node

# 安装最新的 LTS 版本
nvm install --lts

# 使用最新的 LTS 版本
nvm use --lts                       

语义化版本 Semver

通过语义化版本的方式,携带相关兼容信息。

语义化版本格式:主版本号.次版本号.修订号(x.x.x),版本号递增规则如下:

  • 主版本号(MAJOR):当你做了不兼容的 API 修改,
  • 次版本号(MINOR):当你做了向下兼容的功能性新增,
  • 修订号(PATCH):当你做了向下兼容的问题修正。
  • 先行版本号及版本编译元数据可以加到“主版本号.次版本号.修订号”的后面,作为延伸。
  • 版本号控制符 ^ 控制 主版本号相同,次版本号或修订号 >= 当前版本次版本号或修订号
  • 版本号控制符 ~ 控制 主版本号和次版本相同,修订号 >= 当前版本修订号

例: ^3.3.4 表示 X >= 3.3.4 && X < 4.0.0

~1.15.2 表示 X >=1.15.2 && X < 1.16.0

参考链接

  1. semver.org/lang/zh-CN/