- Published on
node.js 相关概念备忘
- Authors
- Name
这篇文章用来记录 Node.js 生态里最常见、也最容易混淆的一些概念。
如果你经常会把 Node.js、npm、npx、nvm、yarn 混在一起看,这篇可以当作一个简明备忘。
什么是 node.js
Node.js 是一个免费、开源、跨平台的 JavaScript 运行时环境,它让开发者可以在浏览器之外运行 JavaScript,用来构建:
- 服务端应用
- 命令行工具
- 构建脚本
Node.js 底层运行的是 V8 引擎,也就是 Chrome 所使用的 JavaScript 引擎。
什么是 V8 引擎
V8 是 Google 开源的 JavaScript 引擎,负责解析并执行 JavaScript 代码。
要注意区分:
V8负责执行 JavaScript浏览器还会额外提供 DOM、事件系统、fetch等 Web APINode.js则在 V8 之外提供文件系统、进程、网络等服务端 API
所以常说的“JavaScript 能运行”,并不只靠语言本身,还依赖具体运行时环境提供的能力。
你可以通过 Node.js 的以下命令查看使用的 V8 引擎版本:
node -p process.versions.v8
通常只要安装了 Node.js,就不需要单独安装 V8,因为 V8 已经内置在 Node.js 里。
什么是 npm
npm 是 Node.js 生态里最常用的包管理工具之一。
它包含三部分:
- 网站
- 命令行工具(CLI)
- 包注册中心(registry)
我们平时说“用 npm 安装依赖”,通常指的是使用 npm CLI 从 npm registry 下载和管理包。
需要注意一个常见误区:npm 现在不被官方当作缩写来解释,不建议把它写成 Node.js Packager Manager。更准确的说法是:npm 是 Node.js 平台上的 package manager。
npm 常用命令
npm run
npm run 是 npm run-script 的缩写,用来执行 package.json 里的脚本。
例如这个博客项目里就定义了如下命令:
"scripts": {
"start": "next dev",
"dev": "cross-env INIT_CWD=$PWD next dev",
"build": "cross-env INIT_CWD=$PWD next build && cross-env NODE_OPTIONS='--experimental-json-modules' node ./scripts/postbuild.mjs",
"serve": "next start",
"analyze": "cross-env ANALYZE=true next build",
"lint": "next lint --fix --dir pages --dir app --dir components --dir lib --dir layouts --dir scripts"
},
例如:
npm run dev
它会启动当前项目里定义的开发服务。
npm init
用来初始化一个 Node.js 项目。
执行后会创建一个 package.json 文件:
{
"name": "nodejs-starter",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
npm install
从 npm registry 安装依赖。
npm install安装依赖到当前项目npm install -D等价于npm install --save-dev,安装到devDependenciesnpm install -g全局安装,通常用于 CLI 工具
"devDependencies": {
"@vuepress/bundler-webpack": "^2.0.0-rc.7",
"@vuepress/theme-default": "^2.0.0-rc.11",
"vue": "^3.4.0",
"vuepress": "^2.0.0-rc.7"
}
npm update
用于升级已安装的依赖版本,具体升级范围取决于 package.json 里的版本约束。
什么是 nvm
nvm 是 Node Version Manager,用来管理多个 Node.js 版本。
当你需要在不同项目间切换 Node 版本时,它会特别有用。
什么是 npx
npx 用来直接运行 npm 包中的可执行命令。
它特别适合下面两类场景:
- 运行当前项目里本地安装的 CLI
- 临时执行一个不想全局安装的工具
例如:
npx create-next-app@latest my-app
什么是 yarn
Yarn 也是 JavaScript 生态中的包管理工具,和 npm 类似,都可以用来:
- 安装依赖
- 更新依赖
- 管理脚本
- 处理 workspace / monorepo
不同团队会根据历史原因、功能偏好和仓库习惯选择 npm、Yarn 或 pnpm。
在实际项目里,优先遵循仓库已经使用的包管理器,不要混用。
小结
如果要一句话区分这些工具:
Node.js是运行时V8是 JavaScript 引擎npm/yarn是包管理工具npx用来执行包里的命令nvm用来切换 Node.js 版本