Node.js简介与安装.md

2022-09-28 17:02:37 浏览数 (1)

TOC

0x00 前言简介

1.Node.js 介绍

描述:Node.js® 是一个基于 Chrome V8 引擎 的 JavaScript 运行时环境,它是目前非常火热的技术(正式开启JavaScript的后端开发之旅), 它在设计上类似于Ruby系统并受到Python的Twisted的影响启发,它作为异步事件驱动的JavaScript运行时,它旨在构建可伸缩的网络应用程序。

Node.js®起初作者是 Ryan Dahl , 当前项目由 Technical Steering Committee (TSC) 和 Community Committee (CommComm) 共同管理,前者负责项目中高级别的技术负责指导,后者对扩展社区发展进行负责,由 OpenJS Foundation 提供维护。

Node.js 官网地址:https://nodejs.org/en/

GitHub 存储库:https://github.com/nodejs/node

发展简述

描述:作者 Ryan Dahl 他的工作是用C/C 写高性能Web服务,对于高性能,异步IO、事件驱动是基本原则,但是用C/C 写就太痛苦了。于是这位仁兄开始设想用高级语言开发Web服务。他评估了很多种高级语言,发现很多语言虽然同时提供了同步IO和异步IO,但是开发人员一旦用了同步IO,他们就再也懒得写异步IO了,所以最终Ryan瞄向了JavaScript;

因为 JavaScript 是单线程执行,根本不能进行同步IO操作,所以JavaScript的这一“缺陷”导致了它只能使用异步IO。于是在2009年Ryan正式推出了基于JavaScript语言和V8引擎的开源Web服务器项目,命名为Node.js。虽然名字很土但是,Node第一次把JavaScript带入到后端服务器开发,加上世界上已经有无数的JavaScript开发人员,所以Node一下子就火了起来。

小小插曲

因为 Node.js 是开源项目虽然由社区推动但幕后一直由Joyent公司资助。由于一群开发者对Joyent公司的策略不满,于2014年从Node.js项目fork出了io.js项目,决定单独发展,但两者实际上是兼容的,分家后没多久,Joyent公司表示要和解,于是io.js项目又决定回归 Node.js。

具体做法是将来io.js将首先添加新的特性,如果大家测试用得爽,就把新特性加入Node.js,io.js是“尝鲜版”,而Node.js是线上稳定版,相当于Fedora Linux和RHEL的关系。

Node.js 优点有哪些?

JavaScript语言本身是完善的函数式语言,使用最新的ECMAScript6标准

使用模块化的JS代码,使用函数式编程

事件驱动、非阻塞式 I/O 的模型使其轻量又高效

适用后端开发(包括 文件IO、进程管理、网络通信)

针对于前端开发者学习成本低,也适合初学者学习

2.应用场景

Node上运行的JavaScript相比其他后端开发语言有何优势?

答:Npde.js 借助JavaScript天生的事件驱动机制加V8高性能引擎,使编写高性能Web服务轻而易举。

Node上线程能否实现多核优势?

描述:Node.js 被设计为没有线程并不意味着你不能接受在您的环境中使用多核的优势, 通过使用我们 child_process.fork() 的 API 可以产生子进程,并且被设计为易于使用与交流,建立在相同的界面上的是 cluster 模块, 它允许您在进程之间共享套接字以启用负载平衡在你的核心之上。

Node.js 应用在哪些场景?

Node.js 非常适合开发可伸缩系统非常合理

Node.js 非常适合作为Web的基础库或框架。

Node.js 非常适合作为网络socket通信。

3.版本支持

描述: 当前【2022年9月16日 10:14:23】最新版本为 V18.9.0 ,稳定长期支持版本为 16.17.0 LTS 。

发布规则:LTS 发布版若为奇数(诸如 9、11 等)将变为不支持状态(预览版本),若为偶数版本(诸如 10、12 等)变成活跃LTS状态(正式版本),如果其状态是“长期维护版”,意味着重大的 Bug 将在后续的 30 个月内持续得到不断地修复,上线环境时应仅使用活跃 LTS 或者是维护 LTS 版,学习环境当然可以选择Node.js主版本。

Node.js 所有已发布版本截止维护日期(最新):https://nodejs.org/zh-cn/about/releases/

注意:上述日期可能会发生变化。

0x01 环境部署

描述:Node.js 支持Windows/Linux/Unix/ARM等多个操作系统平台以及Docker容器化安装部署,此处对于Windows安装不详细说明,对于一个运维开发工程师来说更侧重于在linux下面进行开发和编程Node.js;

1.Windows 安装

方式1、Windows 平台直接安装

从官网(https://nodejs.org/en/download/)安装下载最新稳定版本的 Node.js msi 安装包(node-v16.17.0-x64.msi), 下载地址:https://nodejs.org/dist/v16.17.0/node-v16.17.0-x64.msi

下载完成后,按照其提示安装完成后,在Windows环境下,请打开命令提示符,然后输入 node -v,如果安装正常,你应该看到这样的输出:

代码语言:javascript复制
C:UsersWeiyiGeek>node -v
v16.17.0

然后进行Windows环境变量,配置npm的全局模块的存放路径以及cache的路径

代码语言:javascript复制
#便在NodeJs下建立“node_global”及“node_cache”两个文件夹。我们就在cmd中键入两行命令:
npm config set prefix "D:Program Filesnodejsnode_global"
npm config set cache "D:Program Filesnodejsnode_cache"

设置系统变量流程,进入我的电脑→属性→高级→环境变量在系统变量下新建“NODE_PATH”,输入“D:Program Filesnodejsnode_globalnode_modules”

方式2、Windows WSL 2平台中安装

安装环境:Windows WSL2 Linux 子系统中使用Ubuntu系统,通过适用于 Linux 的 Windows 子系统 (WSL),可以安装首选的 Linux 分发版(默认为 Ubuntu),以便在开发环境(编写代码的位置)和生产环境(部署代码的服务器)之间保持一致性。

代码语言:javascript复制
# 必须依赖于 WSL2 否则不能安装,你可以按照如下进行升级
# 1.确认目前版本是WSL还是WSL2
wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Running         1

# 2.启用虚拟化功能(注意需要重启机器)
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

# 3.将 WSL 2 设置为默认版本
wsl --set-default-version 2

# 4.将 Ubuntu-20.04 分发转换为 2 版本(管理员权限)或者直接重新安装分发(推荐)。
# wsl --set-version Ubuntu-20.04 2
  # 正在进行转换,这可能需要几分钟时间...
  # 有关与 WSL 2 的主要区别的信息,请访问 https://aka.ms/wsl2
wsl --unregister Ubuntu-20.04
# 正在注销...
# 貌似直接安装不好用,只有通过Miscrosoft Store安装
# wsl --list --online
# wsl --install -d Ubuntu
# 正在下载: Ubuntu

# 5.离线安装 Ubuntu2204 分发
New-Item D:ToolsUbuntu -ItemType Directory
Set-Location D:ToolsUbuntu
Invoke-WebRequest -Uri https://aka.ms/wslubuntu2204 -OutFile Ubuntu.appx -UseBasicParsing

# 下载后解压 Ubuntu.appx 然后再解压 Ubuntu_2204.0.10.0_x64.appx 到目录中,即D:ToolsUbuntuUbuntu_2204.0.10.0_x64 , 然后运行 ubuntu2204.exe
D:ToolsUbuntuUbuntu_2204.0.10.0_x64ubuntu2204.exe

# 6.验证其分发的版本是为2
c:WindowsSystem32>wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-22.04    Running         2

# 7.执行wsl命令进入WSL2子系统查看其信息
wsl 
$ uname -a
Linux Security 5.10.60.1-microsoft-standard-WSL2 #1 SMP Wed Aug 25 23:20:18 UTC 2021 x86_64 x86_64 x86_64 GNU/Li
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04 LTS
Release:        22.04
Codename:       jammy

# 8.更新为仓库国内源
cp source.list{,.bak}
sed -i "s#archive.ubuntu.com#mirrors.tuna.tsinghua.edu.cn#g" /etc/apt/source.list

# 9.更新软件以及安装常用工具
apt update && apt upgrade
sudo apt install -y nano vim git unzip wget ntpdate dos2unix net-tools tree htop ncdu nload sysstat psmisc bash-completion fail2ban  gcc g   make jq zsh

WeiyiGeek.安装ubuntu2204分发

安装流程:安装 nvm、node.js 和 npm , 针对开发环境建议使用版本管理器, 因为版本变更速度非常快, 当我们不同项目有不同版本需求时建议使用 Node 版本管理器(通常称为 nvm)是安装多个版本的 Node.js。

1.打开 Ubuntu 命令行(或所选的发行版)。

2.使用以下命令安装 CURL (用于在命令行中从 Internet 下载内容的工具):sudo apt-get install curl。

3.使用以下命令安装 nvm 包管理器。

代码语言:javascript复制
su root
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash

WeiyiGeek.nvm包管理器

4.若要验证安装以及列出当前安装的 Node 版本(此时应为无)

代码语言:javascript复制
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
# NVM安装NodeJs时需要更改NVM更改镜像源,否则一直无法获取
export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node/
export NVM_IOJS_ORG_MIRROR=http://npm.taobao.org/mirrors/iojs

command -v nvm
# nvm

$ nvm --version
# 0.39.1

$ nvm ls
#         N/A
# iojs -> N/A (default)
# node -> stable (-> N/A) (default)
# unstable -> N/A (default)

# 查看远程可用
$ nvm ls-remote
....
v16.17.0   (Latest LTS: Gallium)
v17.0.0
....
v18.8.0
v18.9.0

5.安装 Node.js 的当前版本和稳定的 LTS 版本, 即v16.17.0版本。

安装 Node.js 的当前稳定的 LTS 版本(推荐用于生产应用程序):nvm install –lts

安装 Node.js 的当前版本(用于测试最新的 Node.js 功能和改进,但更容易出现问题):nvm install node

代码语言:javascript复制
nvm install --lts
# Installing latest LTS version.
# Downloading and installing node v16.17.0...
# Downloading https://npm.taobao.org/mirrors/node//v16.17.0/node-v16.17.0-linux-x64.tar.xz..
# Computing checksum with sha256sum
# Checksums matched!
# Now using node v16.17.0 (npm v8.15.0)
# Creating default alias: default -> lts/* (-> v16.17.0)

6.验证查看安装的Node与Npm版本,至此安装完毕!

代码语言:javascript复制
$ node --version
v16.17.0

$ npm --version

8.15.0

虽然 nvm 目前是最常用的节点版本管理器,但需要考虑一些替代版本管理器:

n 是长期存在的 nvm 替代方法,该方法使用略微不同的命令来完成相同的操作,并通过 npm 而不是 bash 脚本来安装。( Link: https://www.npmjs.com/package/n#installation )

fnm 是较新的版本管理器,它声称比 nvm 快得多。 (它还使用 Azure 管道。)

Volta 是来自 LinkedIn 团队的新版本管理器,它声称改进了速度和跨平台支持。

asdf-vm 是适用于多种语言的单个 CLI,例如将 ike gvm、nvm、rbenv & pyenv(等)整合在一起。

nvs(Node 版本切换器)是跨平台的 nvm 替代方法,可与 VS Code 集成。

安装参考地址:https://docs.microsoft.com/zh-cn/windows/dev-environment/javascript/nodejs-on-wsl?source=recommendations#install-nvm-nodejs-and-npm

2.Linux Ubuntu 安装

二进制方式安装

描述:此处还是安装稳定版本的 node, 其 Linux Binaries (x64) 二进制包下载地址:https://nodejs.org/dist/v16.17.0/node-v16.17.0-linux-x64.tar.xz

源码编译安装

描述:此处还是安装稳定版本的 node, 其 Linux Binaries (x64) 二进制包下载地址:https://nodejs.org/dist/v16.17.0/node-v16.17.0-linux-x64.tar.xz

3.Linux CentOS 安装

使用NVM方式安装

安装环境:CentOS Linux release 7.6.1810 (Core) 强烈建议使用Centos 7.x

安装步骤:

代码语言:javascript复制
#1.使用nvm维护多个版本的node.js
https://github.com/creationix/nvm

$ wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash
$ source /root/.bashrc
$ command -v nvm  #返回nvm 表示安装成功
[root@Master-data1 nodejs]$ nvm --version
0.34.0
#配置加速镜像
export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node/

#2.安装node.js
$ nvm ls-remote  #查看nodejs版本
v10.15.3   (Latest LTS: Dubnium)

$ nvm install 10.15.3  #安装当前稳定版本
Creating default alias: default -> 10.15.3 (-> v10.15.3)
#查看当前脚本
$ node -v
v10.15.3

#3.安装npm(安装插件依赖)
$ npm -v  #其实安装node后默认已经被安装
6.7.0

4.开发环境配置

描述:我们需要一个IDE集成开发环境让我们能在一个环境里编码、运行、调试,这样就可以大大提升开发效率。

Java的集成开发环境有Eclipse,Intellij idea等,C#的集成开发环境有Visual Studio,Node.js的集成开发环境推荐使用Visual Studio Code。

在VS Code中我们可以非常方便地运行JavaScript文件,VS Code以文件夹作为工程目录(Workspace Dir),所有的JavaScript文件都存放在该目录下。此外VS Code在工程目录下还需要一个.vscode的配置目录,里面存放里VS Code需要的配置文件。

可以用VS Code快速创建 launch.json 然后修改如下:

代码语言:javascript复制
{
  "version": "0.2.0",
  "configurations": [
    {
        "name": "Run hello.js",
        "type": "node",
        "request": "launch",
        "program": "${workspaceRoot}/hello.js",
        "stopOnEntry": false,
        "args": [],
        "cwd": "${workspaceRoot}",
        "preLaunchTask": null,
        "runtimeExecutable": null,
        "runtimeArgs": [
            "--nolazy"
        ],
        "env": {
            "NODE_ENV": "development"
        },
        "externalConsole": false,
        "sourceMaps": false,
        "outDir": null
    }
  ]
}

有了配置文件,即可使用VS Code调试JavaScript。

代码语言:javascript复制
'use strict'
var name = "Weiyi";
var hello = `你好,${name}Geek 欢迎学习NODE.JS`;
console.log(hello);

WeiyiGeek.VScode

VScode 编辑器添加 WSL2 终端配置以及终端优化

01.配置文件 settings.json 进行追加。

代码语言:javascript复制
"terminal.integrated.profiles.windows": {
    "Ubuntu-22.04 (WSL)": {
        "path": "C:\Windows\System32\wsl.exe",
        "args": [],
        "icon": "terminal-bash"
    },
    "PowerShell": {
        "source": "PowerShell",
        "icon": "terminal-powershell"
    },
    "Command Prompt": {
        "path": [
            "${env:windir}\Sysnative\cmd.exe",
            "${env:windir}\System32\cmd.exe"
        ],
        "args": [],
        "icon": "terminal-cmd"
    },
    "Git Bash": {
        "source": "Git Bash"
    }
},
"terminal.integrated.defaultProfile.windows": "Ubuntu-22.04 (WSL)",

02.使用oh-my-zsh进行终端优化

代码语言:javascript复制
# 安装 zsh
sudo apt-get install zsh

# 设置 zsh 为默认shel 设置 -> 重启终端。
chsh -s /bin/zsh

# 拉取 oh-my-zsh 项目
git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc

# 配置文件
$ls ~/.zshrc
root/.zshrc

# 默认主题是 robbyrussell(更多主题参考来源) 
sed -r -i.bak 's#ZSH_THEME="[a-z]. "#ZSH_THEME="agnoster"#' ~/.zshrc

# 更新配置
$ source ~/.zshrc

其他终端配置优化尽在此篇博客文章之中( https://cloud.tencent.com/developer/article/2128499 )。

VScode WLS Node.js 开发环境验证

描述:采用 Node.js 编写的 JavaScript 代码将直接在你的计算机上以命令行的方式运行;

步骤 01.进入WSL终端执行node命令进入Node.js的交互环境,在交互环境下你可以输入任意JavaScript语句例。

代码语言:javascript复制
#  Node交互模式 和 命令行模式 
[root@centos7 ~]$ node
> 1024 * 4
4096
> console.log("Hello wrold!Node.js")
Hello wrold!Node.js
> function add(x,y){console.log(x   " "   y   "=",x y)}; add(6,9)
6 9 = 15
> process  #调用执行系统级别的API

步骤 02.直接使用node进行执行helloworld.js文件

代码语言:javascript复制
$ vim helloworld.js
# 第一行总是写上'use strict',是因为我们总是以严格模式运行JavaScript代码,避免各种潜在陷阱。
'use strict'; 
console.log('Hello, world.');

$ node helloworld.js
Hello world! Node.js

温馨提示:我们可以利用npm安装nodemon包(cnpm install nodemon -g)让文件自动检测执行js变化:

代码语言:javascript复制
ls -alh index.js
-rw-r--r-- 1 root root 36 4月  11 09:25 index.js
[root@secuirty Day01]$ nodemon index.js
[nodemon] 1.18.11
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node index.js`
Hello World!Node.js
[nodemon] clean exit - waiting for changes before restart

温馨提示:注意绝对不能用Word和写字板, 导致程序运行出现莫名其妙的错误;

cnpm 环境快速安装与使用

cnpm是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。由阿里推出的淘宝镜像(即cnpm),它把npm官方的”包”全部搬到国内,供广大开发者使用。

快速安装

代码语言:javascript复制
# 0.临时使用
npm --registry https://registry.npmmirror.com install [依赖的名称]

# 1.使用的是最新的淘宝的镜像源(临时),如`-g`则为全局持久使用(慎用),可能会影响到内部私有包发布。
npm config set registry https://registry.npmmirror.com
# 2.配置之后可以验证是否成功(返回刚刚设置的地址即成功)
npm config get registry
# 3.也可一条命令搞定,使用 npm 安装 cnpm
npm install -g cnpm --registry=https://registry.npmmirror.com

# 5.或者通过添加npm参数alias一个新命令:
alias cnpm="npm --registry=https://registry.npm.taobao.org  ​ --cache=$HOME/.npm/.cache/cnpm  ​ --disturl=https://npm.taobao.org/dist  ​ --userconfig=$HOME/.cnpmrc"
$ echo 'n#alias for cnpmnalias cnpm="npm --registry=https://registry.npm.taobao.org  --cache=$HOME/.npm/.cache/cnpm  --disturl=https://npm.taobao.org/dist  --userconfig=$HOME/.cnpmrc"' >> ~/.zshrc && source ~/.zshrc

快速使用:从registry.npm.taobao.org 安装所有模块. 当安装的时候发现安装的模块还没有同步过来, 淘宝 NPM 会自动在后台进行同步, 并且会让你从官方 NPMregistry.npmjs.org进行安装. 下次你再安装这个模块的时候, 就会直接从 淘宝 NPM 安装了.

代码语言:javascript复制
# 1.安装完成后便可使用 cnpm 安装需要的模块。
cnpm install [package]

# 2.直接通过 sync 命令马上同步一个模块, 注意只有 cnpm 命令行才能使用该功能。
cnpm sync connect
# 当然, 你可以直接通过 web 方式来同步: /sync/connect
$ open https://npm.taobao.org/sync/connect

0x02 命令解析

nvm 命令 - nodejs 版本管理工具

语法参数

代码语言:javascript复制
# Usage
 nvm --help                                  Show this message
  --no-colors                                Suppress colored output
  nvm --version                               Print out the installed version of nvm
  nvm install [<version>]                     Download and install a <version>. Uses .nvmrc if available and version is omitted.
  The following optional arguments, if provided, must appear directly after `nvm install`:
    -s                                        Skip binary download, install from source only.
    -b                                        Skip source download, install from binary only.
    --reinstall-packages-from=<version>       When installing, reinstall packages installed in <node|iojs|node version number>
    --lts                                     When installing, only select from LTS (long-term support) versions
    --lts=<LTS name>                          When installing, only select from versions for a specific LTS line
    --skip-default-packages                   When installing, skip the default-packages file if it exists
    --latest-npm                              After installing, attempt to upgrade to the latest working npm on the given node version
    --no-progress                             Disable the progress bar on any downloads
    --alias=<name>                            After installing, set the alias specified to the version specified. (same as: nvm alias <name> <version>)
    --default                                 After installing, set default alias to the version specified. (same as: nvm alias default <version>)
  nvm uninstall <version>                     Uninstall a version
  nvm uninstall --lts                         Uninstall using automatic LTS (long-term support) alias `lts/*`, if available.
  nvm uninstall --lts=<LTS name>              Uninstall using automatic alias for provided LTS line, if available.
  nvm use [<version>]                         Modify PATH to use <version>. Uses .nvmrc if available and version is omitted.
   The following optional arguments, if provided, must appear directly after `nvm use`:
    --silent                                  Silences stdout/stderr output
    --lts                                     Uses automatic LTS (long-term support) alias `lts/*`, if available.
    --lts=<LTS name>                          Uses automatic alias for provided LTS line, if available.
  nvm exec [<version>] [<command>]            Run <command> on <version>. Uses .nvmrc if available and version is omitted.
   The following optional arguments, if provided, must appear directly after `nvm exec`:
    --silent                                  Silences stdout/stderr output
    --lts                                     Uses automatic LTS (long-term support) alias `lts/*`, if available.
    --lts=<LTS name>                          Uses automatic alias for provided LTS line, if available.
  nvm run [<version>] [<args>]                Run `node` on <version> with <args> as arguments. Uses .nvmrc if available and version is omitted.
   The following optional arguments, if provided, must appear directly after `nvm run`:
    --silent                                  Silences stdout/stderr output
    --lts                                     Uses automatic LTS (long-term support) alias `lts/*`, if available.
    --lts=<LTS name>                          Uses automatic alias for provided LTS line, if available.
  nvm current                                 Display currently activated version of Node
  nvm ls [<version>]                          List installed versions, matching a given <version> if provided
    --no-colors                               Suppress colored output
    --no-alias                                Suppress `nvm alias` output
  nvm ls-remote [<version>]                   List remote versions available for install, matching a given <version> if provided
    --lts                                     When listing, only show LTS (long-term support) versions
    --lts=<LTS name>                          When listing, only show versions for a specific LTS line
    --no-colors                               Suppress colored output
  nvm version <version>                       Resolve the given description to a single local version
  nvm version-remote <version>                Resolve the given description to a single remote version
    --lts                                     When listing, only select from LTS (long-term support) versions
    --lts=<LTS name>                          When listing, only select from versions for a specific LTS line
  nvm deactivate                              Undo effects of `nvm` on current shell
    --silent                                  Silences stdout/stderr output
  nvm alias [<pattern>]                       Show all aliases beginning with <pattern>
    --no-colors                               Suppress colored output
  nvm alias <name> <version>                  Set an alias named <name> pointing to <version>
  nvm unalias <name>                          Deletes the alias named <name>
  nvm install-latest-npm                      Attempt to upgrade to the latest working `npm` on the current node version  nvm reinstall-packages <version>            Reinstall global `npm` packages contained in <version> to current version
  nvm unload                                  Unload `nvm` from shell
  nvm which [current | <version>]             Display path to installed node version. Uses .nvmrc if available and version is omitted.
    --silent                                  Silences stdout/stderr output when a version is omitted
  nvm cache dir                               Display path to the cache directory for nvm
  nvm cache clear                             Empty cache directory for nvm
  nvm set-colors [<color codes>]              Set five text colors using format "yMeBg". Available when supported.
                                              Initial colors are: g  b  y  r  e
                                              Color codes:
                                                r/R = red / bold red
                                                g/G = green / bold green
                                                b/B = blue / bold blue
                                                c/C = cyan / bold cyan
                                                m/M = magenta / bold magenta
                                                y/Y = yellow / bold yellow
                                                k/K = black / bold black
                                                e/W = light grey / white

使用演示:

代码语言:javascript复制
# 查看node版本信息
nvm ls            # 当前本地所有版本信息
nvm current #     # 显示当前的版本信息
nvm ls-remote     # 远程版本信息

# Node 安装
# 安装node最新版本
nvm install node 
# 安装node最新稳定版本
nvm install --lts
# 安装指定版本
nvm install 16.17.0

# Node 卸载
nvm uninstall 16.17.0

# 切换 node 版本
nvm use 8.0
# Run app.js using node 6.10.3                   
nvm run 6.10.3 index.js      
# Run `node app.js` with the PATH pointing to node 4.8.3
nvm exec 4.8.3 node app.js           

# 为 node 设置默认版本
# 在shell上设置默认节点版本
nvm alias default 8.1.0               
# 始终默认为shell上的最新可用节点版本
nvm alias default node 

# 删除已定义的别名
nvm unalias <name>

# 当前版本 node 环境下重新全局安装指定版本号的 npm 包
nvm reinstall-packages <version>

示例1.项目下面指定版本号,采用此版本直接执行。

代码语言:javascript复制
$ vim .nvmrc 
10.15.3
$ nvm use #进行使用该版本运行(通过我们项目文件nvmrc读取版本号进行切换)

node 命令 - nodejs 程序命令

语法参数

代码语言:javascript复制
# Usage: 
  node [options] [ script.js ] [arguments]
  node inspect [options] [ script.js | host:port ] [arguments]

# Options:
  -                                   script read from stdin (default if no file name is provided, interactive mode if a tty)
  --                                  indicate the end of node options (指示节点结束选项)
  --abort-on-uncaught-exception       aborting instead of exiting causes a core file to be generated for analysis
  --build-snapshot                    Generate a snapshot blob when the process exits.Currently only supported in the node_mksnapshot binary.
  -c, --check                         syntax check script without executing
  --completion-bash                   print source-able bash completion script
  -C, --conditions=...                additional user conditions for conditional exportsand imports
  --cpu-prof                          Start the V8 CPU profiler on start up, and write the CPU profile to disk before exit. If --cpu-prof-dir is not specified, write the profile to the current working directory.
  --cpu-prof-dir=...                  Directory where the V8 profiles generated by --cpu-prof will be placed. Does not affect --prof.
  --cpu-prof-interval=...             specified sampling interval in microseconds for theV8 CPU profile generated with --cpu-prof. (default: 1000)
  --cpu-prof-name=...                 specified file name of the V8 CPU profile generated with --cpu-prof
  --diagnostic-dir=...                set dir for all output files (default: current working directory)
  --disable-proto=...                 disable Object.prototype.__proto__
  --disallow-code-generation-from-strings  disallow eval and friends
  --dns-result-order=...              set default value of verbatim in dns.lookup.
                                      Options are 'ipv4first' (IPv4 addresses are placed
                                      before IPv6 addresses) 'verbatim' (addresses are in
                                      the order the DNS resolver returned)
  --enable-fips                       enable FIPS crypto at startup
  --enable-source-maps                Source Map V3 support for stack traces
  -e, --eval=...                      evaluate script
  --experimental-fetch                experimental Fetch API
  --experimental-global-customevent   expose experimental CustomEvent on the global scope
  --experimental-global-webcrypto     expose experimental Web Crypto API on the global scope
  --experimental-import-meta-resolve  experimental ES Module import.meta.resolve() support
  --loader, --experimental-loader=... use the specified module as a custom loade
  --experimental-network-imports      experimental https: support for the ES Module loade
  --experimental-policy=...           use the specified file as a security policy
  --es-module-specifier-resolution, --experimental-specifier-resolution=...
                                      Select extension resolution algorithm for es
                                      modules; either 'explicit' (default) or 'node'
  --experimental-vm-modules           experimental ES Module support in vm module
  --experimental-wasi-unstable-preview1
                                      experimental WASI support
  --experimental-wasm-modules         experimental ES Module support for webassembly modules
  --force-context-aware               disable loading non-context-aware addons
  --force-fips                        force FIPS crypto (cannot be disabled)
  --force-node-api-uncaught-exceptions-policy
                                      enforces 'uncaughtException' event on Node API asynchronous callbacks
  --frozen-intrinsics                 experimental frozen intrinsics support
  --heap-prof                         Start the V8 heap profiler on start up, and write
                                      the heap profile to disk before exit. If
                                      --heap-prof-dir is not specified, write the profile
                                      to the current working directory.
  --heap-prof-dir=...                 Directory where the V8 heap profiles generated by --heap-prof will be placed.
  --heap-prof-interval=...            specified sampling interval in bytes for the V8 heap profile generated with --heap-prof. (default:512 * 1024)
  --heap-prof-name=...                specified file name of the V8 heap profile generated with --heap-prof
  --heapsnapshot-near-heap-limit=...  Generate heap snapshots whenever V8 is approaching the heap limit. No more than the specified number of heap snapshots will be generated.
  --heapsnapshot-signal=...           Generate heap snapshot on specified signal
  -h, --help                          print node command line options (currently set)
  --huge-max-old-generation-size      increase default maximum heap size on machines with 16GB memory or more
  --icu-data-dir=...                  set ICU data load path to dir (overrides NODE_ICU_DATA) (note: linked-in ICU data is present)
  --input-type=...                    set module type for string input
  --insecure-http-parser              use an insecure HTTP parser that accepts invalid HTTP headers
  --inspect[=[host:]port]             activate inspector on host:port (default:127.0.0.1:9229)
  --inspect-brk[=[host:]port]         activate inspector on host:port and break at start of user script
  --debug-port, --inspect-port=[host:]port set host:port for inspecto
  --inspect-publish-uid=...           comma separated list of destinations for inspector uid(default: stderr,http)
  -i, --interactive                   always enter the REPL even if stdin does not appear to be a terminal
  --interpreted-frames-native-stack   help system profilers to translate JavaScript interpreted frames
  --jitless                           disable runtime allocation of executable memory
  --max-http-header-size=...          set the maximum size of HTTP headers (default:16384 (16KB))
  --no-addons                         disable loading native addons
  --no-deprecation                    silence deprecation warnings
  --no-experimental-repl-await        experimental await keyword support in REPL
  --no-force-async-hooks-checks       disable checks for async_hooks
  --no-global-search-paths            disable global module search paths
  --no-warnings                       silence all process warnings
  --node-memory-debug                 Run with extra debug checks for memory leaks in Node.js itself
  --openssl-config=...                load OpenSSL configuration from the specified file (overrides OPENSSL_CONF)
  --openssl-shared-config             enable OpenSSL shared configuration
  --pending-deprecation               emit pending deprecation warnings
  --policy-integrity=...              ensure the security policy contents match the specified integrity
  --preserve-symlinks                 preserve symbolic links when resolving
  --preserve-symlinks-main            preserve symbolic links when resolving the main module
  -p, --print [...]                   evaluate script and print result
  --prof                              Generate V8 profiler output.
  --prof-process                      process V8 profiler output generated using --prof
  --redirect-warnings=...             write warnings to file instead of stder
  --report-compact                    output compact single-line JSON
  --report-directory, --report-dir=...
                                      define custom report pathname. (default: current working directory)
  --report-filename=...               define custom report file name. (default: YYYYMMDD.HHMMSS.PID.SEQUENCE#.txt)
  --report-on-fatalerror              generate diagnostic report on fatal (internal) errors
  --report-on-signal                  generate diagnostic report upon receiving signals
  --report-signal=...                 causes diagnostic report to be produced on provided signal, unsupported in Windows. (default: SIGUSR2)
  --report-uncaught-exception         generate diagnostic report on uncaught exceptions
  -r, --require=...                   module to preload (option can be repeated)
  --secure-heap=...                   total size of the OpenSSL secure heap
  --secure-heap-min=...               minimum allocation size from the OpenSSL secure heap
  --test                              launch test runner on startup
  --test-only                         run tests with 'only' option set
  --throw-deprecation                 throw an exception on deprecations
  --title=...                         the process title to use on startup
  --tls-cipher-list=...               use an alternative default TLS cipher list
  --tls-keylog=...                    log TLS decryption keys to named file for traffic analysis
  --tls-max-v1.2                      set default TLS maximum to TLSv1.2 (default:TLSv1.3)
  --tls-max-v1.3                      set default TLS maximum to TLSv1.3 (default:TLSv1.3)
  --tls-min-v1.0                      set default TLS minimum to TLSv1.0 (default:TLSv1.2)
  --tls-min-v1.1                      set default TLS minimum to TLSv1.1 (default:TLSv1.2)
  --tls-min-v1.2                      set default TLS minimum to TLSv1.2 (default:TLSv1.2)
  --tls-min-v1.3                      set default TLS minimum to TLSv1.3 (default:TLSv1.2)
  --trace-atomics-wait                trace Atomics.wait() operations
  --trace-deprecation                 show stack traces on deprecations
  --trace-event-categories=...        comma separated list of trace event categories to record
  --trace-event-file-pattern=...      Template string specifying the filepath for the trace-events data, it supports ${rotation} and ${pid}.
  --trace-exit                        show stack trace when an environment exits
  --trace-sigint                      enable printing JavaScript stacktrace on SIGINT
  --trace-sync-io                     show stack trace when use of sync IO is detected after the first tick
  --trace-tls                         prints TLS packet trace information to stder
  --trace-uncaught                    show stack traces for the `throw` behind uncaught exceptions
  --trace-warnings                    show stack traces on process warnings
  --track-heap-objects                track heap object allocations for heap snapshots
  --unhandled-rejections=...          define unhandled rejections behavior. Options are
                                      'strict' (always raise an error), 'throw' (raise an
                                      error unless 'unhandledRejection' hook is set),
                                      'warn' (log a warning), 'none' (silence warnings),
                                      'warn-with-error-code' (log a warning and set exit
                                      code 1 unless 'unhandledRejection' hook is set).(default: throw)
  --use-bundled-ca                    use bundled CA store (default)
  --use-largepages=...                Map the Node.js static code to large pages. Options are 'off' (the default value, meaning do not map),
                                      'on' (map and ignore failure, reporting it tostderr), or 'silent' (map and silently ignore failure)
  --use-openssl-ca                    use OpenSSL's default CA store
  --v8-options                        print V8 command line options
  --v8-pool-size=...                  set V8's thread pool size
  --zero-fill-buffers                 automatically zero-fill all newly allocated Buffer and SlowBuffer instances
  -v, --version                       print Node.js version

# Environment variables:
FORCE_COLOR                   when set to 'true', 1, 2, 3, or an empty stringcauses NO_COLOR and NODE_DISABLE_COLORS to beignored. (当设置为"true"时,1、2、3或空字符串会导致忽略`NO_COLOR`和`NODE_DISABLE_COLORS`)
NO_COLOR                      Alias for NODE_DISABLE_COLORS
NODE_DEBUG                    ','-separated list of core modules that should print debug information (应打印调试信息的核心模块的单独列表)
NODE_DEBUG_NATIVE             ','-separated list of C   core debug categories that should print debug output (应打印调试输出的C  核心调试类别的分隔列表)
NODE_DISABLE_COLORS           set to 1 to disable colors in the REPL (设置为1可禁用REPL中的颜色)
NODE_EXTRA_CA_CERTS           path to additional CA certificates file. Only read once during process startup. (其他CA证书文件的路径。在进程启动期间只读取一次。)
NODE_NO_WARNINGS              set to 1 to silence process warnings (设置为1以使进程警告静音)
NODE_PATH                     ':'-separated list of directories prefixed to the module search path (":"-以模块搜索路径为前缀的目录分隔列表)
NODE_PENDING_DEPRECATION      set to 1 to emit pending deprecation warnings (设置为1将发出挂起的弃用警告)
NODE_PENDING_PIPE_INSTANCES   set the number of pending pipe instance handles on Windows (设置Windows上挂起的管道实例句柄数)
NODE_PRESERVE_SYMLINKS        set to 1 to preserve symbolic links when resolving and caching modules (设置为1可在解析和缓存模块时保留符号链接)
NODE_REDIRECT_WARNINGS        write warnings to path instead of stderr (将警告写入路径而不是stderr)
NODE_REPL_HISTORY             path to the persistent REPL history file (永久REPL历史记录文件的路径)
NODE_TLS_REJECT_UNAUTHORIZED  set to 0 to disable TLS certificate validation (0以禁用TLS证书验证)
NODE_V8_COVERAGE              directory to output v8 coverage JSON to (将v8覆盖率JSON输出到的目录)
UV_THREADPOOL_SIZE            sets the number of threads used in libuv's threadpool (设置libuv线程池中使用的线程数)

使用实践:

代码语言:javascript复制
# 1.使用严格模式执行 node.js 脚本
node --use_strict node.js

npm 命令 - nodejs 包管理工具

描述:npm其实是 Node.js 的包管理工具(package manager),它通过 CommonJS 实现, 大家都把自己开发的模块打包后放到npm官网上,然后通过npm安装就可以直接用;

使用 npm 的好处

0 人点赞