Skip to content

安装并配置Node.js

Linux下安装Node.js

下载prebuilt-binaries

官方地址

分别在三个下拉框中选择Node.js的版本、操作系统和系统架构。选择好之后可以右键 Download xxx 的绿色按钮,然后选择复制链接地址,在Linux命令行中使用 wget 进行下载

shell
wget "https://nodejs.org/dist/v20.13.1/node-v20.13.1-linux-x64.tar.xz"

本地下载

解包

之前下载的是一个压缩包,需要将压缩包进行解压

shell
tar -xvf node-v20.13.1-linux-x64.tar.xz

解压之后得到 node-v20.13.1-linux-x64 目录

配置到系统中

将上一步解压得到的目录拷贝到 /usr/local/ 目录中

shell
sudo cp -r node-v20.13.1-linux-x64 /usr/local/

配置到环境变量中

shell
vim ~/.bashrc

~/.bashrc 文件末尾添加以下内容

shell
## Node.js                                                                                                           
export NODE_HOME=/usr/local/node-v20.13.1-linux-x64
export PATH=$PATH:${NODE_HOME}/bin

编辑完成以后先按下 Esc 键,然后输入 :wq 进行保存

测试

shell
source ~/.bashrc
node -v

出现版本号表示配置成功,但是也有可能出现失败的情况。

libstdc++.so.6 问题

报错信息

shell
parallels@Ubuntu:Downloads$ node -v
/usr/local/node-v20.13.1-linux-x64/bin/node: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
parallels@Ubuntu:Downloads$

这个错误提示表明在运行 node 可执行文件时,找不到 libstdc++.so.6 这个共享库文件。以下是一些可能的解决办法:

方法一:检查库文件是否已安装
  1. 对于基于Debian或Ubuntu的系统(如Ubuntu、Linux Mint等)
    • 首先,尝试通过以下命令查看是否已经安装了对应的库:
    bash
    dpkg -l | grep libstdc++6
    • 如果没有安装,可以使用以下命令安装:
    bash
    sudo apt-get update
    sudo apt-get install libstdc++6
  2. 对于基于Red Hat、CentOS或Fedora的系统
    • 可以使用以下命令查看是否安装:
    bash
    rpm -qa | grep libstdc++
    • 如果未安装,对于CentOS或RHEL系统,可以通过yum安装(确保已经配置好yum源):
    bash
    sudo yum install libstdc++
    • 对于Fedora系统,则使用dnf安装(同样要先配置好dnf源):
    bash
    sudo dnf install libstdc++
    :::
方法二:更新共享库缓存

有时候虽然库已经安装了,但是系统的共享库缓存没有及时更新,导致找不到库文件。可以通过以下命令来更新缓存:

  • 对于基于Debian或Ubuntu的系统
bash
sudo ldconfig
  • 对于基于Red Hat、CentOS或Fedora的系统
bash
sudo ldconfig /usr/local/lib
sudo ldconfig /usr/lib64
方法三:检查库文件路径
  1. 查看 libstdc++.so.6 所在的实际路径,使用以下命令(示例,路径可能因系统不同而有差异):
bash
find / -name libstdc++.so.6 2>/dev/null
  1. 如果发现库文件在某个非标准的系统路径下,那么需要将该路径添加到 LD_LIBRARY_PATH 环境变量中。例如,如果库文件在 /opt/mylibs 路径下,可以在终端中临时设置环境变量(仅对当前终端会话有效):
bash
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/mylibs

或者如果想永久生效(不同系统设置方式略有不同,以下以常见的bash配置为例,在用户主目录下的 .bashrc 文件中添加这行内容):

bash
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/mylibs' >> ~/.bashrc
source ~/.bashrc

通过上述这些步骤,一般可以解决 libstdc++.so.6 找不到的问题,使得 node 能够正常运行。

Windows下安装Node.js

安装nrm

因多方面原因导致npm的官方镜像访问异常缓慢甚至无法访问,这对我们使用npm和node造成了极大地困扰,好在国内以下头部公司提供了一些npm镜像来解决这个问题。

nrm就是一个npm镜像的管理工具,使用nrm我们可以方便的测试各个镜像的速度、切换到更快的镜像上去

设置npm镜像源

要安装nrm也需要先使用镜像,否则很可能尝试多次都无法正常安装nrm,使用哪个镜像,只需要 npm config set registry + 对应的镜像网址 就好了

腾讯,华为,阿里的镜像站基本上比较全

例如使用淘宝镜像源加速 NPM

shell
 npm config set registry https://registry.npmmirror.com

查看当前的镜像源:

shell
npm config get registry

安装nrm

安装nrm只需要一条命令就够了,但是不设置镜像很可能会安装失败。设置好镜像之后使用如下命令安装nrm

shell
npm i -g nrm

使用nrm

nrm提供了一些参数来帮助我们方便的切换镜像

  • nrm ls:列出可用的镜像,并在当前使用的镜像前会显示标识
  • nrm test:测试当前网络环境中各个镜像的连接速度
  • nrm use 镜像名称:切换到指定的镜像

可能遇到的问题

Windows中安装失败

Windows系统中默认无法执行本地脚本,安装 nrm 之后需要设置 power shell 的权限以允许执行本地脚本,否则会遇到如下错误:

shell
> nrm ls
nrm : 无法加载文件 C:\Users\zm\AppData\Roaming\npm\nrm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.
microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
所在位置 行:1 字符: 1
+ nrm ls
+ ~~~
    + CategoryInfo          : SecurityError: (:) [],PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

解决此问题需要以管理员身份打开 power shell,然后执行以下命令

powershell
Set-ExecutionPolicy RemoteSigned

ERR! code EACCES错误

此错误一般出现在Linux中,错误提示为

shell
npm ERR! code EACCES
npm ERR! syscall mkdir
npm ERR! path /usr/local/node-v20.13.1-linux-x64/lib/node_modules/nrm
npm ERR! errno -13
npm ERR! Error: EACCES: permission denied, mkdir '/usr/local/node-v20.13.1-linux-x64/lib/node_modules/nrm'
npm ERR!     at async mkdir (node:internal/fs/promises:855:10)
npm ERR!     at async /usr/local/node-v20.13.1-linux-x64/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js:546:20
npm ERR!     at async Promise.allSettled (index 0)
npm ERR!     at async [reifyPackages] (/usr/local/node-v20.13.1-linux-x64/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js:246:11)
npm ERR!     at async Arborist.reify (/usr/local/node-v20.13.1-linux-x64/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js:165:5)
npm ERR!     at async Install.exec (/usr/local/node-v20.13.1-linux-x64/lib/node_modules/npm/lib/commands/install.js:153:5)
npm ERR!     at async module.exports (/usr/local/node-v20.13.1-linux-x64/lib/node_modules/npm/lib/cli-entry.js:61:5)
npm ERR!  Error: EACCES: permission denied, mkdir '/usr/local/node-v20.13.1-linux-x64/lib/node_modules/nrm'
npm ERR!     at async mkdir (node:internal/fs/promises:855:10)
npm ERR!     at async /usr/local/node-v20.13.1-linux-x64/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js:546:20
npm ERR!     at async Promise.allSettled (index 0)
npm ERR!     at async [reifyPackages] (/usr/local/node-v20.13.1-linux-x64/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js:246:11)
npm ERR!     at async Arborist.reify (/usr/local/node-v20.13.1-linux-x64/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js:165:5)
npm ERR!     at async Install.exec (/usr/local/node-v20.13.1-linux-x64/lib/node_modules/npm/lib/commands/install.js:153:5)
npm ERR!     at async module.exports (/usr/local/node-v20.13.1-linux-x64/lib/node_modules/npm/lib/cli-entry.js:61:5) {
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'mkdir',
npm ERR!   path: '/usr/local/node-v20.13.1-linux-x64/lib/node_modules/nrm'
npm ERR! }
npm ERR! 
npm ERR! The operation was rejected by your operating system.
npm ERR! It is likely you do not have the permissions to access this file as the current user
npm ERR! 
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator.

npm ERR! A complete log of this run can be found in: /home/zm/.npm/_logs/2024-11-27T08_19_19_789Z-debug-0.log
解决方案

出现这个 EACCES 权限错误,是因为当前用户没有足够的权限在 /usr/local/node-22.12.0-linux-arm64/lib/node_modules/ 目录下创建 nrm 相关的文件夹来安装 nrm 模块。以下是几种可以尝试解决该问题的办法:

方法一:使用 sudo 以超级用户权限安装(不推荐长期使用)

可以在 npm 命令前加上 sudo,以获取足够的权限来执行安装操作,像这样:

bash
sudo npm i -g nrm

不过这种方式不太建议长期使用,因为使用 sudo 安装全局模块可能会导致一些权限管理方面的混乱,比如后续更新、卸载这些模块时也需要使用 sudo,并且可能存在安全风险,不同用户都可以通过 sudo 影响到全局的 node_modules 目录内容。

方法二:更改 node_modules 目录权限(需谨慎操作)

  1. 可以尝试更改 /usr/local/node-22.12.0-linux-arm64/lib/node_modules 目录及其上级目录的权限,让当前用户拥有写入权限,命令示例如下(需要谨慎操作,可能影响系统安全性,建议先备份相关重要数据):
bash
sudo chown -R $USER:$USER /usr/local/node-22.12.0-linux-arm64/lib/node_modules

这里的 $USER 会自动替换为当前登录的用户名,-R 选项表示递归地更改目录及其内部所有文件和子目录的所有者和所属组。 2. 然后再执行安装命令:

bash
npm i -g nrm

不过这种方式改变了系统相关目录的权限设置,可能会与系统原本的权限管理策略有冲突,后续如果有系统更新等操作,可能会出现一些不可预期的问题。

方法三:重新配置 npm 全局模块安装路径到用户目录下(推荐)

  1. 首先创建一个用于存放全局 npm 模块的目录,比如在用户主目录下创建一个 .npm-global 目录:
bash
mkdir ~/.npm-global
  1. 然后配置 npm 使用这个新的目录作为全局模块安装路径,执行以下命令:
bash
npm config set prefix '~/.npm-global'
  1. 将新的全局模块路径添加到系统的 PATH 环境变量中(如果使用的是 bash 作为默认 shell,在用户主目录下的 .bashrc 文件中添加下面这行内容,然后重新加载 .bashrc 文件使其生效):
bash
echo 'export PATH=$PATH:~/.npm-global/bin' >> ~/.bashrc
source ~/.bashrc
  1. 最后再执行安装 nrm 的命令:
bash
npm i -g nrm

这样,后续所有的全局 npm 模块都会安装到用户自己目录下的 .npm-global 目录中,既解决了权限问题,又能更好地管理自己安装的模块,不会对系统的关键目录权限造成干扰。

安装pnpm

On Windows Using PowerShell:

cmd
iwr https://get.pnpm.io/install.ps1 -useb | iex

On POSIX systems

shell
curl -fsSL https://get.pnpm.io/install.sh | sh -

If you don't have curl installed, you would like to use wget:

shell
wget -qO- https://get.pnpm.io/install.sh | sh -

如果你已经安装了nrm并设置了镜像,可以使用npm命令直接安装pnpm

shell
npm i -g pnpm

安装http-server

从本地文件夹中直接打开的一般都是file协议,当代码中存在http或https的链接时,HTML页面就无法正常打开,为了解决这种情况,需要在在本地开启一个本地的服务器。http-server 是一个简单的静态文件服务器,使用npm安装

shell
npm i -g http-server

开启 http-server服务(默认端口为8080),终端进入目标文件夹,然后在终端输入:

shell
$ http-server .

# 只输入http-server . 的话,更新了代码后,页面不会同步更新,需要重新打开页面
$ http-server -c-1

关闭 http-server服务,按快捷键 CTRL+C ,终端显示^Chttp-server stopped.即关闭服务成功。

自动重启程序

在Node.js中,用于自动重启程序的工具通常是nodemon,除此之外还有pm2forever等也具有自动重启等功能,以下是对它们的介绍:

nodemon

  • 特点:nodemon是一个开发时非常实用的工具,它会监视Node.js应用程序中的文件更改,当检测到文件发生变化时,自动重新启动服务器,无需手动重启应用,大大提高了开发效率。
  • 使用方法:在项目目录下通过命令行执行nodemon app.js(假设你的主应用文件是app.js),nodemon就会启动你的应用,并开始监视文件变化。当你对项目中的文件进行修改并保存后,nodemon会自动检测到变化并重新启动应用,使修改生效。

pm2

  • 特点:pm2是一个功能强大的进程管理工具,用于在生产环境中管理和守护Node.js应用程序。它不仅可以在文件发生变化时自动重启应用,还具有负载均衡、日志管理、监控等丰富功能。
  • 使用方法:首先需要全局安装pm2,通过命令npm install -g pm2。安装完成后,在项目目录下执行pm2 start app.js来启动应用,pm2会自动守护应用进程,当文件发生变化时自动重启应用。还可以使用pm2 restart app.js手动重启应用,pm2 stop app.js停止应用等命令来进行更灵活的管理。

forever

  • 特点:forever可以确保Node.js应用程序在后台持续运行,并且在应用崩溃或服务器重启后自动重新启动应用,具有简单易用、稳定性强的特点。
  • 使用方法:通过命令npm install -g forever全局安装forever。安装完成后,在项目目录下使用forever start app.js启动应用,此时应用会在后台运行,并且forever会监视应用进程,一旦应用退出或服务器重启,它会自动重新启动应用。可以使用forever stop app.js停止应用,forever restart app.js重启应用等命令进行管理。

上次更新: