nodejs basic
version
- current v14.21.3
- latest v21.6.2
Node.js 版本管理工具对比
nvm vs fnm
| 特性 | nvm | fnm |
|---|---|---|
| 性能 | 较慢 (shell 脚本) | 快速 (Rust 编写) |
| 启动时间 | 明显延迟 (每次启动 shell) | 几乎无延迟 |
| 自动切换 | 需手动配置 hook | 内置支持 --use-on-cd |
| 配置文件 | .nvmrc |
.nvmrc 或 .node-version |
| 跨平台 | macOS/Linux | macOS/Linux/Windows |
| Windows 支持 | 需要 nvm-windows (独立项目) | 原生支持 |
| 项目隔离 | 支持 (通过 .nvmrc) | 支持 (自动检测) |
| 安装速度 | 较慢 | 快速 |
| 内存占用 | 较高 | 较低 |
| 成熟度 | 非常成熟 (2010年) | 较新 (2019年) |
| 社区 | 庞大 | 增长中 |
推荐场景:
- 使用 nvm: 需要最成熟稳定的方案,或团队已在使用
- 使用 fnm: 追求性能,需要 Windows 支持,或新项目
nvm, Node Version Manager
# macos install nvm
brew install nvm
# ubuntu 24.04 install nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
# archlinux
pacman -S nvm
# Due to the way nvm is designed, you have to source it before you can use it:
source /usr/share/nvm/init-nvm.sh
echo 'source /usr/share/nvm/init-nvm.sh' >> ~/.zshrc
# 列出远程 Node.js 版本
nvm ls-remote
nvm install --lts
nvm install 16
nvm use 14
nvm list-remote --lts
# 项目级版本管理 - 创建 .nvmrc 文件
echo "16.20.0" > .nvmrc
nvm use # 读取 .nvmrc 自动切换
# 配置自动切换 (添加到 ~/.zshrc)
autoload -U add-zsh-hook
load-nvmrc() {
local node_version="$(nvm version)"
local nvmrc_path="$(nvm_find_nvmrc)"
if [ -n "$nvmrc_path" ]; then
local nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")
if [ "$nvmrc_node_version" = "N/A" ]; then
nvm install
elif [ "$nvmrc_node_version" != "$node_version" ]; then
nvm use
fi
elif [ "$node_version" != "$(nvm version default)" ]; then
echo "Reverting to nvm default version"
nvm use default
fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc
ubuntu install nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
nmv install 16
fnm (Fast Node Manager)
fnm 是用 Rust 编写的快速 Node.js 版本管理器,比 nvm 性能更好,支持自动项目级版本切换。
# 安装 fnm
# macOS
brew install fnm
# Linux (通用)
curl -fsSL https://fnm.vercel.app/install | bash
# Arch Linux
pacman -S fnm
# 配置 shell (添加到 ~/.zshrc)
eval "$(fnm env --use-on-cd)"
# 基本使用
fnm list-remote # 列出可用版本
fnm install 16.20.0 # 安装指定版本
fnm install --lts # 安装 LTS 版本
fnm use 16.20.0 # 切换版本
fnm list # 列出已安装版本
fnm default 16.20.0 # 设置默认版本
# 项目级版本管理
# 在项目根目录创建 .node-version 或 .nvmrc
echo "16.20.0" > .node-version
# 配置了 --use-on-cd 后,cd 进入目录会自动切换
cd your-project # 自动切换到 16.20.0
# 如果版本未安装,先安装
fnm install
# 卸载版本
fnm uninstall 14.0.0
fnm 优势
- 极快的性能 - Rust 编写,启动几乎无延迟
- 自动切换 -
--use-on-cd自动检测项目配置 - 跨平台 - 原生支持 Windows/macOS/Linux
- 兼容 nvm - 支持
.nvmrc文件 - 零配置 - 开箱即用的项目隔离
nodejs downgrade
no need to downgrade, use nvm
npm install -g n
n 17.9.1
# close and reopen new terminal
node -v
js nodejs npm 的关系
- 前端Javascript与Nodejs的异同
- nodeJs和JavaScript的异同
- nodejs和npm关系
前端的JavaScript其实是由ECMAScript、DOM、BOM组合而成。
JavaScript
- ECMAScript(语言基础,如: 语法、数据类型结构以及一些内置对象)
- DOM (一些操作页面元素的方法)
- BOM (一些操作浏览器的方法) 上面是JavaScript的组成部分,那么Nodejs呢?
Nodejs
- ECMAScript(语言基础,如: 语法、数据类型结构以及一些内置对象)
- os(操作系统)
- file(文件系统)
- net(网络系统)
- database(数据库) 分析: 很容易看出,前端和后端的js相同点就是,他们的语言基础都是ECMAScript,只是他们所扩展的东西不同,前端需要操作页面元素,于是扩展了DOM,也需要操作浏览器,于是就扩展了BOM。而服务端的js则也是基于ECMAScript扩展出了服务端所需要的一些API,稍微了解后台的童鞋肯定知道,后台语音有操作系统的能力,于是扩展os,需要有操作文件的能力,于是扩展出file文件系统、需要操作网络,于是扩展出net网络系统,需要操作数据,于是要扩展出database的能力。
总结
其实npm是nodejs的包管理器 (package manager) 。 something like java and maven… 我们在node.js上开发时,会用到很多别人已经写好的javascript代码,如果每当我们需要别人的代码时,都根据名字搜索一下,下载源码,解压,再使用,会非常麻烦。于是就出现了包管理器npm。大家把自己写好的源码上传到npm官网上,如果要用某个或某些个,直接通过npm安装就可以了,不用管那个源码在哪里。并且如果我们要使用模块A,而模块A又依赖模块B,模块B又依赖模块C和D,此时npm会根据依赖关系,把所有依赖的包都下载下来并且管理起来。试想如果这些工作全靠我们自己去完成会多么麻烦
npm 本来是 Node.js 的包管理工具,但随着 JS 这几年的蓬勃发展,现在的 npm 已经成了几乎所有跟 JS 相关的工具和软件包的管理工具了,并且还在不断发展完善中。
install nodejs
archlinux
pacman -S nodejs
debian/ubuntu
https://github.com/nodesource/distributions/blob/master/README.md#debinstall
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo apt-get install gcc g++ make
# install yarn
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update && sudo apt-get install yarn
- windows
choco install nodejs-lts
list version
node -v
作者: 合肥懒皮 链接: https://www.jianshu.com/p/857ef827fbd4 来源: 简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
http://www.alloyteam.com/2016/03/master-npm/
用 node 运行 js
node foo.js