跳转至

Node.js

node --version  # 查看版本

node demo.js  # 运行脚本

# 进入交互式环境 REPL(Read-Eval-Print Loop),类似于浏览器的控制台
node  # 退出:.exit

安装

参考:https://nodejs.org/en/download/package-manager

Windows

直接安装最新安装包即可

Mac

直接安装最新安装包或使用 NVM 版本管理器安装

brew install node  # Homebrew 安装,不建议

Ubuntu

推荐使用 NVM 版本管理器安装

sudo apt update

# 不推荐,因为Ubuntu 22.04软件源中包含的Node.JS版本是12.22.9
sudo apt install nodejs -y
sudo apt install npm -y

# 卸载
sudo apt purge nodejs
sudo apt autoremove

版本管理器

n(不推荐)

使用 n 管理 node 版本前,首先需要一个 node 环境

npm cache clean --force  # 清除缓存
sudo npm install n -g  # 安装n模块
n stable  # 升级node.js到稳定版本
hash -r  # 查看版本如果显示的还是旧版本,可以新开一个命令行,reset the location hash

# 卸载
sudo n prune
sudo npm uninstall -g n
sudo rm -r /usr/local/n
sudo rm /usr/local/bin/node

NVM(推荐)

https://github.com/nvm-sh/nvm

nvm 不是一个 npm package,而是一个独立软件包

# 不要使用 sudo 运行,因为这会为 root 用户启用 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash

# 验证 nvm 是否已安装
command -v nvm

# 安装后重新打开终端
nvm --version

nvm ls  # 列出已安装的node
nvm use x.x.x  # 切换当前版本
nvm alias default 12.16.3  # 修改默认版本

# 安装
nvm list-remote  # 列出所有可安装版本

nvm install node  # 安装最新版本
nvm install --lts  # 安装最新的LTS版本,比如v18.5.0(推荐)
nvm install 18.5.0  # 安装指定版本

# 如果使用 sudo npm/npx 提示没有权限时,需要link下
sudo ln -s "$(which node)" /usr/bin/node
sudo ln -s "$(which npm)" /usr/bin/npm

包管理

包是一个目录,其中包含一个名为 package.json 的文件,描述了包的名称、版本、内容,依赖等

包分两种

  • 库:用 npm 安装
  • 可执行文件:需要用 npx 执行(npx在安装node时默认已经安装)

包管理器:NPM、Yarn

NPM

全球最大开源库生态系统

npm -v
npm help
npm list -g  # 查看已安装包,不带-g看不到全局的包

手动初始化,生成 package.json

npm init -y  # 加 -y: yes 参数则不会一步步引导,而是直接生成
'
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help init` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (card_test) 
version: (1.0.0) 
description: 
entry point: (index.js) 
test command: 
git repository: 
keywords: 
author: 
license: (ISC) 
About to write to /Users/xxx/demo/package.json:

{
  "name": "demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}


Is this OK? (yes) yes
npm notice 
npm notice New major version of npm available! 8.19.2 -> 10.2.4
npm notice Changelog: https://github.com/npm/cli/releases/tag/v10.2.4
npm notice Run npm install -g npm@10.2.4 to update!
npm notice 
'

不手动初始化,在安装第一个包时也会自动生成 package.jsonpackage-lock.json 文件

{
  "dependencies": {
    "ethers": "^6.9.0"
  }
}

安装,默认安装到 $PWD/node_modules/...

npm install xxx  # npm install 可简写为 npm i
"
-g/--global
    本地安装(默认)
    全局安装,可以通过命令行在任何地方调用
--save
    配置信息存储到 package.json 的 dependencies 字段
--save-dev
    配置信息存储到 package.json 的 devDependencies 字段
--force
    强制 npm 获取远程资源,即使磁盘上存在本地副本也是如此
"

# 从 package.json 安装
# --production 只安装dependencies的包,不安装devDependencies的包
# --omit=dev
npm install [--production]

# 从github安装,默认主分支
npm install "https://github.com/ZuoRight/xxx.git#branch-name"
npm install "github:ZuoRight/xxx.git#branch-name"  # 方式2

npm uninstall <name1> <name2>  # 卸载插件

npm install npm -g  # 更新npm自身
npm update <name> [-g] [--save-dev]  # 更新插件,不指定name则更新全部

NPM 官方源比较慢,可以使用第三方源,NRM 可以用来管理 NPM 源

npm install nrm -g
nrm ls  # 列出可用NPM源,带星号的为当前使用源
nrm test [xxx] # 测试源的速度
nrm use cnpm  # 切换源

Yarn

https://yarnpkg.com/getting-started/install

yarn = npm + npx

Yarn 是由 Facebook、Google、Exponent 和 Tilde 联合推出了一个新的 JS 包管理工具,弥补 NPM 的一些缺陷而出现的。

NPM 是串行安装,安装慢,如果中间某个包的安装出现了错误,NPM 不会停止,而是会继续安装,这就会导致如果后面还有错误的话将难以排查。

Yarn 是并行安装,安装快,但为了安全考虑有些工具的官方文档提示不建议用yarn安装

# nodejs 16.10以上版本默认自带yarn,只需要开启corepack即可使用
# Mac可能需要:brew install corepack
corepack enable
yarn --version

# 更新yarn
corepack prepare yarn@stable --activate

yarn help
yarn init [-2]
yarn install  # 安装所有依赖

# 安装指定包
yarn add [package]@[version]
yarn add [package] --dev  # dev dependencies

yarn up [package]  # 更新
yarn remove [package]  # 移除

yarn list  # 查看安装的包,不带global看不到全局的包

环境变量

隐私信息存储在 .env

INFURA_URL='https://sepolia.infura.io/v3/xxx'
PRIVATE_KEY="xxx"  # 0x62BABAf230c29e611756e10D4520d0490B189aC1

npm install dotenv

require('dotenv').config();

const INFURA_URL = process.env.INFURA_URL;
const privateKey = process.env.PRIVATE_KEY;