[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"menus-public":3,"blog-10017":83,"blog-10017-comments":92},[4,15,43,66],{"id":5,"title":6,"link":7,"icon":8,"target":9,"sort_order":10,"is_active":11,"parent_id":12,"created_at":13,"children":14},10001,"首页","\u002F","","_blank",0,true,null,"2026-04-04T12:03:45",[],{"id":16,"title":17,"link":18,"icon":8,"target":19,"sort_order":20,"is_active":11,"parent_id":12,"created_at":21,"children":22},10038,"墨言博客","\u002Fblog","_self",1,"2026-10-30T23:08:14",[23,29,36],{"id":24,"title":25,"link":26,"icon":8,"target":19,"sort_order":20,"is_active":11,"parent_id":16,"created_at":27,"children":28},10039,"技术前沿","\u002Fblog?category=10001","2026-10-30T23:10:46",[],{"id":30,"title":31,"link":32,"icon":8,"target":19,"sort_order":33,"is_active":11,"parent_id":16,"created_at":34,"children":35},10042,"生活随笔","\u002Fblog?category=20007",2,"2026-10-30T23:55:19",[],{"id":37,"title":38,"link":39,"icon":8,"target":19,"sort_order":40,"is_active":11,"parent_id":16,"created_at":41,"children":42},10043,"旅游日记","\u002Fblog?category=20006",3,"2026-10-31T00:00:11",[],{"id":33,"title":44,"link":45,"icon":8,"target":19,"sort_order":33,"is_active":11,"parent_id":12,"created_at":46,"children":47},"新闻中心","\u002Fnews","2026-10-24T19:09:40",[48,54,60],{"id":49,"title":50,"link":51,"icon":8,"target":19,"sort_order":20,"is_active":11,"parent_id":33,"created_at":52,"children":53},10046,"产品动态","\u002Fnews?category=20010","2026-10-31T00:17:38",[],{"id":55,"title":56,"link":57,"icon":8,"target":19,"sort_order":33,"is_active":11,"parent_id":33,"created_at":58,"children":59},10047,"新闻热点","\u002Fnews?category=20009","2026-10-31T00:17:55",[],{"id":61,"title":62,"link":63,"icon":8,"target":19,"sort_order":40,"is_active":11,"parent_id":33,"created_at":64,"children":65},10045,"公司动态","\u002Fnews?category=20008","2026-10-31T00:17:11",[],{"id":67,"title":68,"link":69,"icon":8,"target":19,"sort_order":67,"is_active":11,"parent_id":12,"created_at":46,"children":70},4,"精彩视频","\u002Fvideo",[71,77],{"id":72,"title":73,"link":74,"icon":8,"target":19,"sort_order":10,"is_active":11,"parent_id":67,"created_at":75,"children":76},13,"活动记录","\u002Fvideo?category=6","2026-10-25T21:04:39",[],{"id":78,"title":79,"link":80,"icon":8,"target":19,"sort_order":20,"is_active":11,"parent_id":67,"created_at":81,"children":82},11,"产品展示","\u002Fvideo?category=5","2026-10-25T21:02:59",[],{"id":84,"category_id":5,"title":85,"author":8,"summary":86,"cover":87,"content":88,"tags":8,"seo_title":8,"seo_description":8,"seo_keywords":8,"og_image":8,"views":89,"comment_count":10,"is_top":90,"is_published":11,"created_at":91},10017,"如何安装node.js","Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时，让 JavaScript 能够在服务端运行。它采用事件驱动、非阻塞 I\u002FO 模型，适合构建高并发的网络应用。","\u002Fstatic\u002Fuploads\u002Fblogs\u002F1777773945456-280051419.jpg","# Node.js 安装及使用\n\n> Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时，让 JavaScript 能够在服务端运行。它采用事件驱动、非阻塞 I\u002FO 模型，适合构建高并发的网络应用。\n\n---\n\n## 一、安装\n\n### 1. 官方安装包（推荐新手）\n\n前往 [Node.js 官网](https:\u002F\u002Fnodejs.org\u002Fzh-cn\u002Fdownload\u002F) 下载对应操作系统的安装包。\n\n#### Windows\n\n1. 下载 `Windows Installer (.msi)`（64 位或 ARM64）。\n2. 双击运行，按向导完成安装（建议勾选 `Add to PATH`）。\n3. 安装完成后打开 CMD 或 PowerShell 验证。\n\n#### macOS\n\n1. 下载 `.pkg` 安装包。\n2. 双击运行，按向导完成安装。\n3. 或使用 Homebrew：\n\n```bash\nbrew install node\n```\n\n#### Linux\n\n下载预编译二进制包（`node-vX.X.X-linux-x64.tar.xz`），解压并配置环境变量：\n\n```bash\n# 解压\ntar -xJf node-v20.11.0-linux-x64.tar.xz\nsudo mv node-v20.11.0-linux-x64 \u002Fusr\u002Flocal\u002Fnode\n\n# 配置环境变量（追加到 ~\u002F.bashrc 或 ~\u002F.zshrc）\necho 'export PATH=$PATH:\u002Fusr\u002Flocal\u002Fnode\u002Fbin' >> ~\u002F.bashrc\nsource ~\u002F.bashrc\n```\n\n### 2. 通过包管理器安装\n\n#### Ubuntu \u002F Debian\n\n```bash\n# 使用 NodeSource 仓库安装指定版本\ncurl -fsSL https:\u002F\u002Fdeb.nodesource.com\u002Fsetup_20.x | sudo -E bash -\nsudo apt-get install -y nodejs\n```\n\n#### CentOS \u002F RHEL \u002F Fedora\n\n```bash\ncurl -fsSL https:\u002F\u002Frpm.nodesource.com\u002Fsetup_20.x | sudo bash -\nsudo yum install -y nodejs\n```\n\n#### macOS（Homebrew）\n\n```bash\nbrew install node\n\n# 安装 LTS 版本\nbrew install node@20\n```\n\n#### Arch Linux\n\n```bash\nsudo pacman -S nodejs npm\n```\n\n### 3. 通过 NVM 安装（推荐开发者）\n\n通过 nvm 可在多个 Node.js 版本间自由切换，详见 [nvm 安装及用法](computer:\u002F\u002F\u002Fworkspace\u002Fnvm-guide.md)。\n\n```bash\n# 安装最新 LTS 版本\nnvm install --lts\n\n# 设置默认版本\nnvm alias default 20.11.0\n```\n\n### 4. Docker 方式运行\n\n无需本地安装，直接使用官方镜像：\n\n```bash\n# 运行一次性脚本\ndocker run --rm -v \"$PWD\":\u002Fapp -w \u002Fapp node:20 node app.js\n\n# 进入交互式环境\ndocker run -it --rm node:20 bash\n```\n\n### 5. 验证安装\n\n```bash\nnode -v\nnpm -v\n```\n\n---\n\n## 二、镜像源配置（加速下载）\n\n国内访问 npm 官方源较慢，建议切换为国内镜像。\n\n### 1. 切换 npm 源\n\n```bash\n# 使用淘宝镜像源（推荐）\nnpm config set registry https:\u002F\u002Fregistry.npmmirror.com\n\n# 验证\nnpm config get registry\n\n# 恢复官方源\nnpm config set registry https:\u002F\u002Fregistry.npmjs.org\n```\n\n### 2. 使用 nrm 管理多个源\n\n```bash\n# 安装 nrm\nnpm install -g nrm\n\n# 列出可用源\nnrm ls\n\n# 切换源\nnrm use taobao\n\n# 测速\nnrm test\n```\n\n### 3. 可选镜像源\n\n| 名称 | 地址 |\n|------|------|\n| npm 官方 | `https:\u002F\u002Fregistry.npmjs.org` |\n| 淘宝 \u002F 阿里（推荐） | `https:\u002F\u002Fregistry.npmmirror.com` |\n| 腾讯云 | `https:\u002F\u002Fmirrors.cloud.tencent.com\u002Fnpm\u002F` |\n| 华为云 | `https:\u002F\u002Fmirrors.huaweicloud.com\u002Frepository\u002Fnpm\u002F` |\n\n---\n\n## 三、基础使用\n\n### 1. 运行 JavaScript 文件\n\n创建 `hello.js`：\n\n```javascript\nconsole.log('Hello, Node.js!');\n```\n\n执行：\n\n```bash\nnode hello.js\n```\n\n### 2. 交互式运行（REPL）\n\n```bash\nnode\n```\n\n进入交互环境后可直接输入 JavaScript 代码并回车执行，按 `Ctrl + C` 两次退出。\n\n### 3. 执行 JavaScript 表达式\n\n```bash\nnode -e \"console.log(1 + 2)\"\n```\n\n### 4. 查看 Node.js 信息\n\n```bash\n# 查看 V8 引擎版本\nnode -p \"process.versions.v8\"\n\n# 查看安装路径\nnode -p \"process.execPath\"\n\n# 查看 Node.js 内置模块列表\nnode -p \"Object.keys(require('module').builtinModules)\"\n```\n\n---\n\n## 四、模块与包管理\n\n### 1. 初始化项目\n\n```bash\n# 交互式生成 package.json\nnpm init\n\n# 使用默认值快速生成\nnpm init -y\n```\n\n`package.json` 示例：\n\n```json\n{\n  \"name\": \"my-app\",\n  \"version\": \"1.0.0\",\n  \"description\": \"我的第一个 Node.js 应用\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"start\": \"node index.js\"\n  },\n  \"license\": \"MIT\"\n}\n```\n\n### 2. 安装依赖包\n\n```bash\n# 安装项目依赖（写入 dependencies）\nnpm install \u003Cpackage>\n\n# 安装到开发依赖（写入 devDependencies）\nnpm install \u003Cpackage> --save-dev\n\n# 全局安装\nnpm install -g \u003Cpackage>\n\n# 安装指定版本\nnpm install \u003Cpackage>@1.2.3\n\n# 安装 package.json 中所有依赖\nnpm install\n```\n\n### 3. 卸载依赖包\n\n```bash\nnpm uninstall \u003Cpackage>\nnpm uninstall -g \u003Cpackage>\n```\n\n### 4. 更新依赖包\n\n```bash\n# 检查可更新的包\nnpm outdated\n\n# 更新指定包\nnpm update \u003Cpackage>\n\n# 更新所有包\nnpm update\n```\n\n### 5. 查看已安装包\n\n```bash\n# 查看本地已安装包\nnpm list\n\n# 查看全局已安装包\nnpm list -g --depth=0\n```\n\n### 6. 运行脚本\n\n在 `package.json` 的 `scripts` 中定义命令：\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"node index.js\",\n    \"dev\": \"node --watch index.js\",\n    \"test\": \"echo \\\"no tests\\\"\"\n  }\n}\n```\n\n执行：\n\n```bash\nnpm run start\nnpm run dev\n```\n\n`start` 与 `test` 可简写为 `npm start`、`npm test`。\n\n---\n\n## 五、CommonJS 模块化\n\n### 1. 导出模块\n\n创建 `math.js`：\n\n```javascript\n\u002F\u002F 单个导出\nmodule.exports.add = (a, b) => a + b;\n\n\u002F\u002F 整体导出（覆盖上面的导出）\nmodule.exports = {\n  add: (a, b) => a + b,\n  subtract: (a, b) => a - b,\n};\n```\n\n### 2. 引入模块\n\n创建 `index.js`：\n\n```javascript\nconst math = require('.\u002Fmath');\n\nconsole.log(math.add(1, 2));        \u002F\u002F 3\nconsole.log(math.subtract(5, 2));    \u002F\u002F 3\n```\n\n### 3. 使用内置模块\n\n```javascript\nconst fs = require('fs');\nconst path = require('path');\nconst http = require('http');\nconst os = require('os');\n\nconsole.log(os.platform());         \u002F\u002F 操作系统平台\nconsole.log(os.cpus().length);       \u002F\u002F CPU 核心数\n```\n\n---\n\n## 六、ES Modules（ESM）\n\nNode.js 支持 ES 模块语法。在 `package.json` 中设置：\n\n```json\n{\n  \"type\": \"module\"\n}\n```\n\n或使用 `.mjs` 后缀的文件。\n\n### 1. 导出\n\n创建 `math.mjs`：\n\n```javascript\nexport const add = (a, b) => a + b;\nexport const subtract = (a, b) => a - b;\n\nexport default { add, subtract };\n```\n\n### 2. 引入\n\n```javascript\nimport math, { add, subtract } from '.\u002Fmath.mjs';\n\nconsole.log(add(1, 2));\nconsole.log(math.subtract(5, 2));\n```\n\n---\n\n## 七、内置核心模块\n\n| 模块 | 用途 |\n|------|------|\n| `fs` | 文件系统读写 |\n| `path` | 路径处理 |\n| `http` \u002F `https` | HTTP 服务与请求 |\n| `os` | 操作系统信息 |\n| `url` | URL 解析 |\n| `querystring` | 查询字符串解析 |\n| `crypto` | 加密\u002F哈希 |\n| `buffer` | 二进制数据处理 |\n| `stream` | 流式数据处理 |\n| `events` | 事件触发器 |\n| `child_process` | 子进程管理 |\n| `util` | 工具函数 |\n\n### 示例：创建 HTTP 服务\n\n```javascript\nconst http = require('http');\n\nconst server = http.createServer((req, res) => {\n  res.statusCode = 200;\n  res.setHeader('Content-Type', 'text\u002Fplain');\n  res.end('Hello, World!\\n');\n});\n\nserver.listen(3000, () => {\n  console.log('Server running at http:\u002F\u002Flocalhost:3000\u002F');\n});\n```\n\n启动并访问 `http:\u002F\u002Flocalhost:3000\u002F`：\n\n```bash\nnode server.js\n```\n\n### 示例：读写文件\n\n```javascript\nconst fs = require('fs');\n\n\u002F\u002F 同步读取\nconst data = fs.readFileSync('input.txt', 'utf8');\nconsole.log(data);\n\n\u002F\u002F 异步读取\nfs.readFile('input.txt', 'utf8', (err, data) => {\n  if (err) throw err;\n  console.log(data);\n});\n\n\u002F\u002F Promise 方式（推荐）\nconst fsp = require('fs').promises;\nfsp.readFile('input.txt', 'utf8')\n  .then(data => console.log(data))\n  .catch(err => console.error(err));\n\n\u002F\u002F 写入文件\nfs.writeFileSync('output.txt', 'Hello Node.js');\n```\n\n---\n\n## 八、环境变量与进程\n\n### 1. 读取命令行参数\n\n```javascript\n\u002F\u002F process.argv 前两项是 node 路径和脚本路径\nconst args = process.argv.slice(2);\nconsole.log(args);\n```\n\n执行：\n\n```bash\nnode app.js --name=hello --port=8080\n```\n\n### 2. 读取环境变量\n\n```bash\n# 启动时设置\nPORT=8080 NODE_ENV=production node app.js\n```\n\n```javascript\nconst port = process.env.PORT || 3000;\nconst env = process.env.NODE_ENV || 'development';\nconsole.log(`Running in ${env} on port ${port}`);\n```\n\n### 3. 使用 dotenv 管理环境变量\n\n```bash\nnpm install dotenv\n```\n\n创建 `.env`：\n\n```text\nDB_HOST=localhost\nDB_PORT=5432\n```\n\n```javascript\nrequire('dotenv').config();\n\nconsole.log(process.env.DB_HOST);\nconsole.log(process.env.DB_PORT);\n```\n\n### 4. 退出进程\n\n```javascript\nprocess.exit(0);   \u002F\u002F 正常退出\nprocess.exit(1);   \u002F\u002F 异常退出\n```\n\n---\n\n## 九、调试\n\n### 1. 使用 Node.js 内置 Inspector\n\n```bash\n# 启动调试模式\nnode --inspect app.js\n\n# 启动并在第一行断点\nnode --inspect-brk app.js\n```\n\n打开 Chrome 浏览器，访问 `chrome:\u002F\u002Finspect`，点击 `inspect` 即可调试。\n\n### 2. 使用 console.log\n\n```javascript\nconsole.log('普通日志');\nconsole.error('错误日志');\nconsole.warn('警告');\nconsole.table([{ a: 1 }, { a: 2 }]);\n```\n\n### 3. 使用 VSCode 调试\n\n在 `.vscode\u002Flaunch.json` 中配置：\n\n```json\n{\n  \"version\": \"0.2.0\",\n  \"configurations\": [\n    {\n      \"type\": \"node\",\n      \"request\": \"launch\",\n      \"name\": \"启动程序\",\n      \"program\": \"${workspaceFolder}\u002Fapp.js\"\n    }\n  ]\n}\n```\n\n按 `F5` 即可启动调试。\n\n---\n\n## 十、常用工具与脚手架\n\n### 1. nodemon（文件变动自动重启）\n\n```bash\nnpm install -g nodemon\nnodemon app.js\n```\n\n### 2. Node.js 内置 --watch（v18+）\n\n```bash\nnode --watch app.js\n```\n\n### 3. 常用框架脚手架\n\n```bash\n# Express（轻量 Web 框架）\nnpx express-generator myapp\n\n# Koa\nnpm install koa\n\n# NestJS（企业级框架）\nnpx @nestjs\u002Fcli new my-project\n\n# Fastify（高性能框架）\nnpm install fastify\n\n# Next.js（React SSR 框架）\nnpx create-next-app@latest\n\n# Nuxt.js（Vue SSR 框架）\nnpx nuxi@latest init my-project\n```\n\n---\n\n## 十一、常见问题\n\n### 1. `node: command not found`\n\n- 检查环境变量 `PATH` 是否包含 Node.js 安装路径。\n- 重启终端或重新打开命令行窗口。\n- Linux \u002F macOS 可执行 `source ~\u002F.bashrc` 或 `source ~\u002F.zshrc`。\n\n### 2. `npm: command not found`\n\n- Node.js 安装包通常自带 npm，若缺失可重新安装 Node.js。\n- 单独安装 npm：`sudo apt install npm`（Debian\u002FUbuntu）。\n\n### 3. 权限不足（`EACCES`）\n\n```bash\n# 方式一：使用 sudo（不推荐，易引发权限混乱）\nsudo npm install -g \u003Cpackage>\n\n# 方式二：配置 npm 全局安装目录到用户目录（推荐）\nmkdir ~\u002F.npm-global\nnpm config set prefix '~\u002F.npm-global'\necho 'export PATH=~\u002F.npm-global\u002Fbin:$PATH' >> ~\u002F.bashrc\nsource ~\u002F.bashrc\n```\n\n### 4. 安装包过慢或失败\n\n- 切换国内镜像源（见第二章）。\n- 清理缓存：`npm cache clean --force`。\n- 删除 `node_modules` 和 `package-lock.json` 后重装。\n\n### 5. Node.js 版本不兼容\n\n使用 nvm 切换到项目要求的版本：\n\n```bash\nnvm use 20\n```\n\n### 6. 全局安装的命令找不到\n\n确保 npm 全局 `bin` 目录在 `PATH` 中：\n\n```bash\n# 查看全局 bin 路径\nnpm config get prefix\n\n# 添加到 PATH（Linux\u002FmacOS）\necho 'export PATH=$(npm config get prefix)\u002Fbin:$PATH' >> ~\u002F.bashrc\n```\n\n---\n\n## 十二、命令速查表\n\n| 命令 | 说明 |\n|------|------|\n| `node -v` | 查看 Node.js 版本 |\n| `node \u003Cfile>` | 运行 JavaScript 文件 |\n| `node -e \"\u003Ccode>\"` | 执行单行代码 |\n| `node --inspect` | 启用调试 |\n| `node --watch \u003Cfile>` | 文件变动自动重启 |\n| `npm -v` | 查看 npm 版本 |\n| `npm init` | 初始化项目 |\n| `npm install` | 安装所有依赖 |\n| `npm install \u003Cpkg>` | 安装指定包 |\n| `npm install -g \u003Cpkg>` | 全局安装 |\n| `npm install \u003Cpkg> --save-dev` | 安装开发依赖 |\n| `npm uninstall \u003Cpkg>` | 卸载包 |\n| `npm update \u003Cpkg>` | 更新包 |\n| `npm list` | 查看已安装包 |\n| `npm list -g --depth=0` | 查看全局包 |\n| `npm run \u003Cscript>` | 运行 scripts 中的命令 |\n| `npm outdated` | 查看过期包 |\n| `npm cache clean --force` | 清理缓存 |\n| `npm config get registry` | 查看当前源 |\n| `npm config set registry \u003Curl>` | 切换源 |\n\n---\n\n## 十三、参考链接\n\n- Node.js 官网：https:\u002F\u002Fnodejs.org\n- Node.js 官方文档：https:\u002F\u002Fnodejs.org\u002Fzh-cn\u002Fdocs\u002F\n- npm 官网：https:\u002F\u002Fwww.npmjs.com\n- 淘宝 npm 镜像：https:\u002F\u002Fnpmmirror.com\n- nvm 安装及用法：见同目录 [nvm-guide.md](computer:\u002F\u002F\u002Fworkspace\u002Fnvm-guide.md)",55,false,"2026-10-09T08:25:51",{"list":93,"total":20,"page":20,"size":99},[94],{"id":95,"blog_id":84,"nickname":96,"content":97,"created_at":98},10009,"wang","还可以收葳了","2026-10-16T09:36:36",30]