diff --git "a/\351\273\204\346\267\274\346\236\227/20260306-\350\256\244\350\257\206nodejs.md" "b/\351\273\204\346\267\274\346\236\227/20260306-\350\256\244\350\257\206nodejs.md" new file mode 100644 index 0000000000000000000000000000000000000000..ad5a3cff674b4c6060cb553b37a72825b2fb1af7 --- /dev/null +++ "b/\351\273\204\346\267\274\346\236\227/20260306-\350\256\244\350\257\206nodejs.md" @@ -0,0 +1,42 @@ +## 笔记 +### 一、初识Nodejs +1.Node.js是什么? +- Node.js是一个基于Chrome V8引擎的JavaScript运行时,让JavaScript可以脱离浏览器在服务器端运行。 + +2. Node.js有什么特点? +- 单线程、事件驱动、非阻塞I/O、高性能。 + +3. 哪些知名网站在用Node.js? +- Netflix、Uber、LinkedIn、GitHub、淘宝等。 + +### 二、Node.js核心特性 +1.单线程(Single Thread) +- 优点: + - 节省内存资源 + - 不存在线程切换开销 + - 编程模型简单 + +2.非阻塞I/O(Non-blocking I/O) +3. 事件驱动(Event-driven) + +## 练习 + +1.Node.js是基于哪个JavaScript引擎开发的? + +B. V8 + +2.以下哪个不是Node.js的核心特性? + +B. 多线程 + +3.Node.js最适合开发以下哪种应用? + +C. 实时聊天系统 + +4.以下哪个是Node.js的创始人? + +B. Ryan Dahl + +5.Node.js中的"I/O"主要指什么? + +A. Input/Output(输入/输出) \ No newline at end of file diff --git "a/\351\273\204\346\267\274\346\236\227/20260309-\346\220\255\345\273\272\345\274\200\345\217\221\347\216\257\345\242\203\343\200\201npm\344\270\216\345\214\205\347\256\241\347\220\206.md" "b/\351\273\204\346\267\274\346\236\227/20260309-\346\220\255\345\273\272\345\274\200\345\217\221\347\216\257\345\242\203\343\200\201npm\344\270\216\345\214\205\347\256\241\347\220\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..d7ed942d6390d07325c240c4736633b94b13d0c3 --- /dev/null +++ "b/\351\273\204\346\267\274\346\236\227/20260309-\346\220\255\345\273\272\345\274\200\345\217\221\347\216\257\345\242\203\343\200\201npm\344\270\216\345\214\205\347\256\241\347\220\206.md" @@ -0,0 +1,60 @@ +## 笔记 +### 搭建开发环境 + +1.开发工具 + +| 工具 | 作用 | 选择 | +| ----------| ------------|----------------------------| +| Node.js | JavaScript运行时 | 官网下载LTS版本 | +| npm | 包管理器 | 随Node.js自动安装 | +| VSCode | 代码编辑器 | 微软官方,推荐使用 | + +2.npm包管理器 +- 什么是npm + *npm(Node Package Manager)是Node.js的包管理器,相当于:* + - Java的Maven + - Python的pip + - 前端的npm + +### npm与包管理 +1.Node.js的三大包管理器 +| 包管理器 | 简介 | 特点 | +| --------- | ---------|---------------| +| npm | Node.js官方包管理器 | 历史最久、生态最大 | +| yarn | Facebook开发 | 速度快、离线安装、确定性安装 | +| pnpm | 公司开发 | 节省磁盘空间、更快、更安全| + +2. npm的强大之处 +- 数量庞大:npm上有超过200万个包 +- 安装简单:一条命令搞定 +- 版本管理:自动处理依赖关系 +- 社区活跃:全球开发者贡献代码 + +## 练习 +1.package.json中,哪个字段用于记录项目运行必需的依赖? + +B. dependencies + +2.版本号"^4.18.0"表示安装什么版本? + +B. 安装4.x.x最新版本 + +3.下面哪个命令可以查看npm的镜像源设置? + +B. npm config get registry + +4.安装全局包的参数是? + +C. --global + +5.npm install 和 npm ci 有什么区别? + +B. npm ci更快,适合CI/CD环境 + +6.yarn相比npm有什么特点? + +B. 支持离线安装 + +7.pnpm的主要特点是什么? + +B. 节省磁盘空间 diff --git "a/\351\273\204\346\267\274\346\236\227/20260311-\346\250\241\345\235\227\347\263\273\347\273\237.md" "b/\351\273\204\346\267\274\346\236\227/20260311-\346\250\241\345\235\227\347\263\273\347\273\237.md" new file mode 100644 index 0000000000000000000000000000000000000000..5552996231f35f650b43e8616dc9ab007e660fe7 --- /dev/null +++ "b/\351\273\204\346\267\274\346\236\227/20260311-\346\250\241\345\235\227\347\263\273\347\273\237.md" @@ -0,0 +1,49 @@ +## 模块系统笔记 +1.为什么要使用模块(模块的好处) +| 好处 | 说明 | +|-------- |-------------| +| 代码复用 | 写一次,处处使用 | +| 便于维护 | 修改一处,不影响全局 | +| 命名空间 | 避免变量名冲突 | +| 清晰结构 | 一眼看出项目组成 | + +2.CommonJS模块系统 +*CommonJS简介* +CommonJS是Node.js默认的模块系统,使用 require() 引入模块,使用 module.exports 导出模块。 + +3.ES Modules模块系统 +*ES Modules简介* +ES Modules(ESM)是JavaScript官方的模块系统,从ES6引入。需要在 package.json 中设置 "type": "module" 或者使用 .mjs 扩展名。 + +4.两种模块系统的区别 +|特性 | CommonJS | ES Modules | +|------ |---------- |-------------| +|引入方式| require() | import| +|导出方式| module.exports| export| +|加载方式| 同步加载 | 异步加载| +|解析时机| 运行时解析 | 编译时确定| +|使用场景| Node.js服务端| 前端/现代Node.js| +|扩展名 | .js | .mjs 或配置| + +## 练习 +1.在CommonJS模块系统中,引入模块使用哪个关键字? + +B. require + +2.以下哪个是正确的CommonJS导出方式? + +C. module.exports = ... + +3.ES Modules需要什么配置才能在Node.js中使用? + +B. 设置 "type": "module" + +4.下面的代码有什么问题? + +exports = function() { console.log('hello'); }; + +B. 应该是 module.exports + +5.以下哪个不是模块化的好处? + +B. 变量名冲突 diff --git "a/\351\273\204\346\267\274\346\236\227/20260312-\347\273\274\345\220\210\345\256\236\350\267\265\357\274\232\345\221\275\344\273\244\350\241\214\346\233\264\346\226\260.md" "b/\351\273\204\346\267\274\346\236\227/20260312-\347\273\274\345\220\210\345\256\236\350\267\265\357\274\232\345\221\275\344\273\244\350\241\214\346\233\264\346\226\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..84505217463ea7daa4c593a32e70e70ff7f917f0 --- /dev/null +++ "b/\351\273\204\346\267\274\346\236\227/20260312-\347\273\274\345\220\210\345\256\236\350\267\265\357\274\232\345\221\275\344\273\244\350\241\214\346\233\264\346\226\260.md" @@ -0,0 +1,126 @@ +## Node.js 命令行工具(CLI)实战笔记 + +### 一、命令行工具基础 + +定义:无图形界面,通过终端输入命令操作的程序(CLI) +常见工具:npm/git/vue/nodemon +开发价值:自动化、提效、服务器适配、巩固 Node 基础 + +### 二、核心知识点 +*1. 命令行参数* + +- process.argv:获取命令参数(前两项为 node 路径 / 文件路径) +- 解析:const args = process.argv.slice(2) → 取命令 + 参数 +- 简化库:commander + +*2. 文件操作* + +- 读取:fs.readFileSync() / fs.promises.readFile() +- 写入:fs.writeFileSync() +- 路径:path.join(__dirname, '文件') 确保路径正确 + +*3. 交互输入* + +- 基础:readline +- 增强:inquirer +### 三、待办 CLI 实现 + +- 1. 项目初始化 + - bash +- 运行 + - npm init -y +*package.json 添加 "bin": {"todo": "./todo.js"}* +- 入口文件头部:#!/usr/bin/env node + +*2. 核心功能* +| 命令 | 功能 | +|-------- | ------------ | +| add <内容> | 添加待办 | +| list | 列出所有待办 | +| done <编号> | 标记完成 | +| delete <编号> | 删除待办 | +| clear | 清空待办 | +| help | 查看帮助 | + +*3. 数据存储* +- 文件:todos.json +- 结构:[{id, content, done, createdAt}] + +### 四、关键代码 +- 读取 / 保存待办:loadTodos() / saveTodos() +- 命令分发:switch(command) 处理增删改查 +- 异常处理:参数校验、索引越界判断 + +## 练习 +### 一、选择题 +1. Node.js 中,获取命令行参数的属性是? + +答案:B. process.argv + +2. 以下哪个命令可以读取文件内容? + +答案:B. fs.readFile +解析: +fs.writeFile:写入文件(覆盖原有内容) +fs.readFile:异步读取文件内容 +fs.appendFile:追加内容到文件 +fs.copyFile:复制文件 + +3. __dirname 表示什么? + +答案:B. 当前文件所在目录 +解析: +__dirname:当前执行文件所在目录的绝对路径 +__filename:当前文件的完整路径(包含文件名) +process.cwd():脚本运行时的目录 +Node.js 安装目录需通过环境变量 / 配置查询 + +4. package.json 中,哪个字段用于配置全局命令? + +答案:C. bin +解析: +main:指定模块入口文件 +scripts:配置 npm 脚本命令 +bin:配置可执行文件的全局命令映射 +dependencies:项目依赖 + +5. 下面哪个不是命令行工具的优点? +答案:B. 图形界面更美观 + +### 二、简单题 +1.请解释什么是CLI工具?它和GUI有什么区别? +答:a.CLI 工具:即命令行界面(Command Line Interface)工具,是通过终端 / 命令行输入文本命令来交互、完成特定任务的程序(如 Node.js 的npm、Linux 的ls)。 +b. +|维度 | CLI 工具 | GUI(图形界面)工具| +|-------- | ------------ | ---------------- | +| 交互方式 |文本命令输入 | 鼠标 / 触屏点击、拖拽| +| 界面形式 |纯文本终端 | 图形化窗口、按钮、菜单| +| 资源占用 |极低(无界面渲染) | 较高(需渲染图形)| +| 自动化适配|易脚本化、批量处理 | 难自动化,依赖人工操作| +| 学习成本 |需记命令,入门稍高 | 直观,入门成本低| +2.process.argv返回的数组包含哪些内容? + +process.argv 是一个字符串数组,包含 Node.js 进程启动时的命令行参数,具体内容: +第 0 项:Node.js 可执行文件的完整路径(如/usr/local/bin/node); +第 1 项:当前执行的 JavaScript 文件的完整路径(如/Users/test/todo.js); +第 2 项及以后:用户输入的自定义命令行参数(如执行node todo.js add 吃饭,则第 2 项是add,第 3 项是吃饭)。 + +3.请说明fs.readFileSync和fs.readFile的区别。 + +4.为什么要使用JSON文件存储数据?有什么优缺点? +- 使用原因:JSON 是轻量级文本格式,语法兼容 JavaScript 对象,易读写、跨语言解析(几乎所有编程语言都支持),适合存储结构化数据(如待办、笔记)。 +- 优点: + - 语法简洁,人类可读可写; + - 跨语言兼容,易与程序交互; + - 体积小,解析效率高; +- 缺点: + - 不支持注释(易降低可读性); + - 存储大量数据时解析性能下降(无索引); + - 写入时需覆盖整个文件(无法局部修改); + - 无数据类型校验,易出现格式错误。 +5.如何让开发的CLI工具可以全局使用? +步骤1:在package.json中配置bin字段,指定命令名与可执行文件的映射 +步骤2:在可执行文件(如todo.js)顶部添加shebang,指定解释器 +步骤3:给文件添加可执行权限(Linux/Mac) +步骤4:本地测试:执行npm link,将命令链接到全局; +步骤5:发布(可选):发布到 npm 后,用户执行npm install -g 包名即可全局使用。 \ No newline at end of file