Node.js的3m安装法,包括版本管理器nvm,包管理器npm,源管理器nrm,适合在开发环境中进行多个Node.js版本的管理
转载请注明出处,本文仅用于学习交流,不对之处,恳请指正 ,部分图片摘取网络,如有侵权请联系
Node.js简介
-
Node.js is an open-source, cross-platform JavaScript runtime environment.
-
Node.js是基于谷歌Chrome V8引擎的JavaScript运行环境,同时也支持使用微软的ChakraCore引擎。
-
Node.js将每个I/O操作都集成到libuv里,使得开发者在编写代码的过程中对I/O并发操作无感。
-
Node.JS具有事件驱动、非阻塞I/O等特性。
-
Node.JS使用于I/O密集的网络应用开发,对于CPU密集型应用Node.JS可以使用C/C++扩展机制来实现。
3m安装法
我是看狼叔《更了不起的Node.js》中介绍的一种管理node.js的方式,其中3m分别指nvm, npm, nrm
-
nvm 用于开发阶段解决多版本共存与切换的问题,可以简单理解为Node.js的版本管理工具
-
npm 用于解决Node.js模块安装问题,可以简单理解为模块管理工具,本身也是一个Node.js的模块
-
nrm 用于管理npm的下载源,本身也是一个Node.js的模块
Node.js的版本管理工具 nvm
安装nvm
-
安装
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
-
配置环境变量
安装完成后,一般会帮我们修改~/.bashrc或者~/.zshrc文件,但是在当前窗口并不会直接生效,我们可以通过
来使环境变量生效,也可以直接通过来使环境变量生效source ~/.bashrc
export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
如果重新命令行窗口时环境变量没有生效,我们可以在~/.bashrc或者~/.zshrc文件最后追加
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 --version
安装并使用node.js
-
安装最新版本
nvm install node # "node" is an alias for the latest version
-
安装指定版本
nvm install 14.7.0 # or 16.3.0, 12.22.1, etc
-
显示可安装版本
nvm ls-remote
-
使用指定版本
nvm use 18 # or 16.3.0, 12.22.1, etc
-
获取安装目录
nvm which 18 # or 16.3.0, 12.22.1, etc
-
指定默认版本
nvm alias default node # this refers to the latest installed version of node nvm alias default 18 # this refers to the latest installed v18.x version of node nvm alias default 18.12 # this refers to the latest installed v18.12.x version of node
-
列出本地已安装版本
nvm ls
-
全局重装模块
nvm reinstall-packages node nvm reinstall-packages 18 # this refers to the latest installed v18.x version of node
-
指定下载源
可以将以下命令追加到~/.bashrc使之固定生效
export NVM_NODEJS_ORG_MIRROR=https://nodejs.org/dist
进入项目目录自动切换Node.js版本
本文仅展示使用bash时的情况,如果需要更多其他环境的配置请参考官方Github文档
追加以下代码到~/.bashrc文件中
cdnvm() {
command cd "$@" || return $?
nvm_path=$(nvm_find_up .nvmrc | tr -d '\n')
# If there are no .nvmrc file, use the default nvm version
if [[ ! $nvm_path = *[^[:space:]]* ]]; then
declare default_version;
default_version=$(nvm version default);
# If there is no default version, set it to `node`
# This will use the latest version on your machine
if [[ $default_version == "N/A" ]]; then
nvm alias default node;
default_version=$(nvm version default);
fi
# If the current version is not the default version, set it to use the default version
if [[ $(nvm current) != "$default_version" ]]; then
nvm use default;
fi
elif [[ -s $nvm_path/.nvmrc && -r $nvm_path/.nvmrc ]]; then
declare nvm_version
nvm_version=$(<"$nvm_path"/.nvmrc)
declare locally_resolved_nvm_version
# `nvm ls` will check all locally-available versions
# If there are multiple matching versions, take the latest one
# Remove the `->` and `*` characters and spaces
# `locally_resolved_nvm_version` will be `N/A` if no local versions are found
locally_resolved_nvm_version=$(nvm ls --no-colors "$nvm_version" | tail -1 | tr -d '\->*' | tr -d '[:space:]')
# If it is not already installed, install it
# `nvm install` will implicitly use the newly-installed version
if [[ "$locally_resolved_nvm_version" == "N/A" ]]; then
nvm install "$nvm_version";
elif [[ $(nvm current) != "$locally_resolved_nvm_version" ]]; then
nvm use "$nvm_version";
fi
fi
}
alias cd='cdnvm'
cdnvm "$PWD" || exit
Node.js的包管理工具 npm
对Node.js的包进行安装、更新、删除、发布、搜索、查看等
npm是Node.js的一个模块,每个不同版本的Node.js安装时都会内置不同版本的npm
- npm v2:使用的依赖方式是嵌套,是典型的树形依赖
- npm v3:使用的依赖方式是扁平化依赖,当同一模块多版本依赖时使用npm v2的模式,有查找麻烦的缺点,但是下载速度较v2版本有很大的提升
- npm v5:使用的时自动记录依赖书,下载使用强校验,新增了package-lock.json这一特征,在操作依赖时默认生成,用于记录与锁定依赖树信息。
-
安装模块
- -g: 安装全局模块,如果时命令行模块,会直接链接到环境变量里
- -P: 生产环境,安装到工程目录下的node_modules,同时保存到package.json的dependencies中
- -D: 开发环境,安装到工程目录下的node_modules,同时保存到package.json的devDependencies中,一般用于开发测试工具的安装
# 普通安装
npm install debug
# 全局安装
npm install -g debug
# 保存依赖到package.json中
npm i --save
需要注意的是,没有使用nvm安装的Node.js版本内置的npm在安装全局模块的时候,安装包会放在/usr/local下,这需要管理员权限。而是用nvm安装的Node.js版本内置的npm在~/.nvm/version/node/xxx/bin目录下,基本不会存在权限问题
当全局模块跟本地模块安装了相同的包的时候,会优先使用本地安装的包
Node.js的源管理工具 nrm
-
安装
# nrm本身是Node.js的一个包 # 为了方便使用,我们将其安装到全局模块中,这样就可以直接使用命令行工具使用nrm npm install -g nrm
-
测速
nrm test
-
查看源
nrm ls
-
切换源
nrm use taobao
选中的源在使用
的时候会在最前面显示*nrm ls
-
新增私有、第三方源
nrm add repos_name https://your_repos_url
自编译Node.js
Github官方仓库
Node.js是C/C++代码,是Javascript的运行时环境
-
Node.js支持python3编译,安装编译工具
sudo apt-get install python3 g++ make python3-pip git
-
克隆Node仓库
git clone https://github.com/nodejs/node.git
-
配置
cd node && ./configure
-
开始编译
make -j8
参考
[1] 狼叔.狼书.卷1,更了不起的Node.js[M].北京:电子工业出版社,2019.7
文章评论