Node.js开发环境

发行版安装

  • FreeBSD 提供了 pkgprots (源代码)两种安装方式

在FreeBS上使用pkg安装
# 在FreeBSD上,npm安装和node版本关联,分为两个包独立安装
pkg install node24 npm-node24
在FreeBS上使用ports安装
# 使用ports编译安装
cd /usr/ports/www/node && make install

在使用 npm 安装 FreeBSD环境Helix结合LSP(Language Server Protocol) 中基于node的 pyrightyaml-language-server :

安装基于ndoe的LSP
# Python 支持: 采用 npm 安装完成,这样能够获得最新的LSP版本
sudo npm install -g yaml-language-server pyright

会提示:

安装基于node的LSP的提示信息
npm warn Unknown global config "python". This will stop working in the next major version of npm.

added 21 packages in 28s

3 packages are looking for funding
  run `npm fund` for details
npm notice
npm notice New minor version of npm available! 11.7.0 -> 11.12.0
npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.12.0
npm notice To update run: npm install -g npm@11.12.0
npm notice

这里可以按提示升级 npm:

使用npm升级npm
npm install -g npm@11.12.0

不过考虑到FreeBSD系统稳定性避免冲突,建议还是通过 pkg 来管理版本,而不是通过 npm 自主升级

备注

npm fund 是开源项目依赖底层库的开源开发者请求资金支持,通过该命令能够看到哪些软件包维护者的请求。可以忽略,也可以在安装时加上 --no-fund 参数,或者永久关闭:

关闭fund提示
npm config set fund false --global

备注

这里提示 npm warn Unknown global config "python". 这是因为在 /usr/local/etc/npmrc 中有如下配置:

/usr/local/etc/npmrc
python=/usr/local/bin/python3.11

可以通过如下命令删除配置:

全局删除python配置
npm config delete python --global

删除配置不会影响LSP安装

nvm

Node Version Manager (nvm) 是 node.js 的版本管理器,可以工作在任何 POSIX兼容的shell环境,运行于unix, macOS 和 Windoes WSL。

这个工具可以管理和切换 Node.js 版本,以便测试和开发。 (例如,我在使用 hexo 作为自己的blog撰写平台,就遇到过部分插件对nodejs版本的兼容性要求)

备注

对于node.js没有多版本要求的话,可以使用最新node.js版本,并且为了方便开发,可以采用 Fedora环境开发Node.js应用 。目前,我的开发学习环境就建立在 Fedora

安装(更新)nvm

  • 执行安装脚本(更新也是使用相同方法):

安装nvm
# 安装nvm (Node Version Manager)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash

上述命令脚本将clone一个nvm代码仓库到 ~/.nvm ,并尝试在profile环境中(例如对于 Debian 就是添加到当前用户的 ~/.bashrc 最后)加入一下内容(我手工加到 ~/.zshrc ):

nvm 安装脚本会自动在用户的profile中添加环境变量,例如 ~/.bashrc
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脚本仓库网站被GFW屏蔽了, 下载以后再安装就可以绕过这个问题 ):

通过本地下载安装脚本来安装nvm
curl -sL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh -o install_nvm.sh

不过,如果GFW阻塞了安装,还是要找一个能够正常访问internet的主机安装好 nvm 之后,把整个 ~/.nvm 复制到目标运行主机上再执行 nvm install node --lts (nodejs官方网站没有被屏蔽,所以可以正常安装)

备注

现在我推荐使用 curl代理 ,例如比较简单的 socks5代理 来完成安装

  • 然后执行命令 nvm 可以看到输出就是正常完成了安装(注意,使用 which nvm 是看不到该命令的)

安装node.js

  • 安装最新版本node:

nvm安装node.js
# 下载和安装Nodes.js,安装current版本,指定22
npm install 22

# 如果要安装LTS稳定完本,则指定20
npm install 20

默认安装的版本就是current最新版本,输出类似:

Downloading and installing node v15.5.1...
Downloading https://nodejs.org/dist/v15.5.1/node-v15.5.1-darwin-x64.tar.xz...
######################################################################### 100.0%
Computing checksum with shasum -a 256
Checksums matched!
Now using node v15.5.1 (npm v7.3.0)
  • nvm 支持在系统中安装多个Node.js版本,例如我们可以同时安装稳定版本,并做切换。我们可以检查所有版本进行选择:

    nvm ls-remote
    

输出类似:

...
       v14.14.0
       v14.15.0   (LTS: Fermium)
       v14.15.1   (LTS: Fermium)
       v14.15.2   (LTS: Fermium)
       v14.15.3   (LTS: Fermium)
       v14.15.4   (Latest LTS: Fermium)
        v15.0.0
        v15.0.1
        v15.1.0
        v15.2.0
        v15.2.1
        v15.3.0
        v15.4.0
        v15.5.0
->      v15.5.1

上述可以看到,我们已经安装了最新版本 v15.5.1 ,而当前稳定版本是 v14.15.4 (LTS) ,所以我们可以

  • 指定指定S版本:

    nvm install 14.15.4
    
  • 安装LTS版本:

    nvm install --lts
    
  • 检查已经安装的版本:

    nvm ls
    
  • 我们可以在运行时指定我们需要运行的node版本,这样很容易进行切换测试:

    nvm exec --lts node --version
    

则可以看到系统切换到LTS版本执行:

Running node latest LTS -> v14.15.4 (npm v6.14.10)
v14.15.4

执行结束之后,还会回到默认版本(这里就是current版本 v15.5.1)。

  • nvm支持将子shell切换到指定版本(这样后续只要子shell没有关闭,就一直是指定版本):

    nvm use node --lts
    

此时看到切换到v14.15.4 LTS版本:

Now using node v14.15.4 (npm v6.14.10)

由于处于子shell中,接下来没有指定node版本就会一直使用LTS版本

  • 要在shell中使用默认的Node版本,使用别名 default

    nvm alias default 14.15.4
    

则默认切换到使用 v14.15.4

版本兼容性

2022年,Node.js官方提供的LTS版本都已经不再支持 RedHat Linux 的CentOS 7系列了,原因是CentOS 7的glibc库停留在 2.17 版本,运行 node 命令会提示信息:

$ node --version
node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.25' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by node)
node: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by node)

参考 node: /lib64/libm.so.6: version 'GLIBC_2.27' not found (required by node) #2972 ,只能安装 node.js 17.x 系列版本( < 18 ) 。根据 nvm ls-remote1 提示 v16.19.0   (Latest LTS: Gallium) ,安装 16.19.0

nvm install 16.19.0

验证安装

  • 简单的 hello.js

    console.log("hello from Node");
    
  • 执行:

    node hello.js
    

输出显示:

hello from Node

开发和部署

PatternFly 开发,结合 Nginx 部署: NGINX反向代理Node.js应用

参考