Node.js 相关 

Last Update: 2024-06-03

目录

安装 Node.js

Windows 安装 Node.js

用官方的 msi 安装程序

默认安装路径是 C:\Program Files\nodejs ,安装完成之后这个路径就自动出现在环境变量 (系统变量 -> Path) 中了。

执行以下命令设置全局生效的 npm 包的安装位置和 npm 缓存路径:

注: node 会自动创建上面两个命令中提到的目录。npm 的用户配置可以在 %HomePath%\.npmrc 文件中找到。

最后在环境变量 (系统变量 -> Path) 中加入全局生效的 npm 包的安装位置 %USERPROFILE%\AppData\Roaming\npm\node_global。

用官方编译好的二进制压缩包

下载、解压官方编译好的二进制压缩包。假设名为 node.exe 的二进制文件的路径是 d:\DevTools\node-v16.18.0-win-x64\node.exe 。

执行以下命令设置全局生效的 npm 包的安装位置和 npm 缓存路径:

注: node 会自动创建上面两个命令中提到的目录。npm 的用户配置可以在 %HomePath%\.npmrc 文件中找到。

添加以下环境变量到系统变量 Path 中:

Linux 安装 Node.js

下载、解压官方编译好的二进制压缩包。假设名为 node 的二进制文件的路径是 $HOME/node-v16.18.0-linux-x64/bin/node

执行以下命令设置全局生效的 npm 包的安装位置和 npm 缓存路径:

注: node 会自动创建上面两个命令中提到的目录。npm 的用户配置可以在 ~/.npmrc 文件中找到。

将二进制文件路径加入到环境变量 PATH 中:

将上面的命令添加到 ~/.profile 中以永久生效。

注: 按照设计,/.bashrc 里存放的是和 bash 有关的东西;/.profile 里存放的是应该全局生效的东西 (比如,应当全局生效的环境变量);~/.bash_profile 给 /login shell/ 用,确保前两者都被加载 (里面有加载 .bashrc 和 .profile 的代码)。

nvm

Windows 平台安装

https://github.com/coreybutler/nvm-windows/releases 下载 nvm-noinstall.zip 后解压到 C:\Users\USERNAME\dev_tools\nvm-noinstall。

创建 C:\Users\USERNAME\dev_tools\nvm-noinstall\settings.txt 文件,写入:

root: C:\Users\USERNAME\dev_tools\nvm-nodejs
arch: 64
proxy: none
originalpath: .
originalversion: 
node_mirror: https://npm.taobao.org/mirrors/node/
npm_mirror: https://npm.taobao.org/mirrors/npm/

其中,第一行的内容是 nvm 安装的 nodejs 所在的目录。

在环境变量中加入 NVM_HOME 变量,值为 C:\Users\USERNAME\dev_tools\nvm-noinstall;以及 NVM_SYMLINK 值为 C:\Users\USERNAME\dev_tools\nvm-nodejs\nodejs。最后,将 %NVM_HOME%%NVM_SYMLINK% 写入 Path 这个环境变量中。

NVM_HOME 变量指明了 nvm 的安装路径;NVM_SYMLINK 所指的路径是一个符号链接,它指向 nvm 指定的当前使用的 nodejs 的路径;将 %NVM_HOME%%NVM_SYMLINK% 写入环境变量 Path 中可以让 nvm 和 node 在被调用时不必写完整路径。

npm

基本使用

npm config {list | ls} [-l] [--json] 查询目前生效的各种配置。

npm config get <key> 获取配置属性的值,npm config set <key>=<value> 设置配置属性的值,npm config delete <key> 移除某个配置属性。

更换 npm 镜像源:

npm install <package-name> 本地安装,npm install -g <package-name> 全局安装。

npm install <package-name>@<version> 安装指定版本。

npm install --save-exact <package-name>npm install -E <package-name> 精确安装最新版本。

npm root [-g] 查询包安装路径 (node_modules 目录的位置)。

npm {view | v | show | info} <package-name> [<property>] 查看包信息。

npm {list | ls | la | ll} [-g] [--depth=<dependency-depth>] 查询已安装的包,及包的依赖。

npm outdated 检查需要更新的包。

npm {update | up | upgrade} [-g] [<package-name] 更新包。

npm {uninstall | remove | rm | r | un} [-g] <package-name> 卸载包。

package.json 和 package-lock.json

可以手动创建 package.json,但通常用命令 npm init 创建。它描述了:

使用 npm init --yesnpm init -y 可以在生成 package.json 时自动填充默认配置。

npm install 会在本地安装所有依赖 (dependencies + devDependencies),npm install --production 仅安装生产环境的依赖 (dependencies)。

同时,npm install <package> 会自动在 package.json 的 dependencies 字段中保存包信息,npm install -D <package> 会自动在 package.json 的 devDependencies 字段中保存包信息。

package-lock.json 在 npm install 执行时生成,用以记录当前实际安装的各个包的具体来源和版本号。package-lock.json 文件的作用是锁定安装时的包的版本号,可以上传到 git,以保证其他人安装的依赖版本和本地保持一致。

npm install --package-lock-only 用于根据 package.json 更新 package-lock.json,但需要注意,执行此命令后,node_modules 中保存的包的版本可能和 package-lock.json 中声明的不一致,需要删除 node_modules 后重新执行 npm install 下载所需依赖。

语义版本

符号描述示例示例描述
>大于某个版本>1.2.1大于1.2.1版本
>=大于等于某个版本>=1.2.1大于等于1.2.1版本
<小于某个版本<1.2.1小于1.2.1版本
<=小于等于某个版本<=1.2.1小于等于1.2.1版本
-介于两个版本之间1.2.1 - 1.4.5介于1.2.1和1.4.5之间
x不固定的版本号1.3.x只要保证主版本号是1,次版本号是3即可
~补丁版本号可增~1.3.4保证主版本号是1,次版本号是3,补丁版本号大于等于4
^此版本和补丁版本可增^1.3.4保证主版本号是1,次版本号可以大于等于3,补丁版本号可以大于等于4
*最新版本*始终安装最新版本

如果 a b 两个包依赖同一个包的不同版本,保存在 node_modules 目录下的 a b 两包会在各自的目录下下载各自的依赖,从而形成嵌套目录:

├── node_modules
│   ├── a 
│   │   ├── node_modules
│   │   │   ├── c
│   │   │   |   |—— c包的文件
│   │   │── a包的文件
│   ├── b 
│   │   ├── node_modules
│   │   │   ├── c
│   │   │   |   |—— c包的文件
│   │   │── b包的文件