目录1. 认识 Node2. Node 基本的命令行操作3. Node 的模块化开发1. 自定义模块2. 内置模块1. fs 模块file system文件系统1. 异步读取文件内容2. 同步读取文件内容3. 异步写入文件内容4. 同步写入文件内容2. path 模块路径信息1. join( ) - 拼接 相对 路径2. resolve( ) - 拼接绝对路径3. http 模块开启服务1. createServer( ) - 创建服务2. listen( ) - 让服务运行起来3. 服务配置4. 认识 npm5. npm 的基本使用6. 认识 nrm简图1. 认识 Node什么是 Node : 就是一个 软件 chrome 这个软件是用来解析 .html 文件的 word 这个软件是用来解析 .docx 文件的 node 这个软件是用来解析 .js 文件的 浏览器为什么能识别 js 代码 因为浏览器这个 软件 内内置了一个js代码的解释器 (解析器) Node 有人把浏览器内的解释器给拆了 专门把这个解释器做成了一个 软件 起名叫做 Node 在解释器的基础上, 增加了一些别的内容 官方解释是一个基于 Chrome V8 解析引擎的 JavaScript 运行时环境 私人解释一个专门用来执行js 文件 ( 代码 )的 软件Node 的作用 : 当 js 代码引入在 html 文件内, 在 浏览器 打开的时候 使用 ECMAScript 操作 BOM 和 DOM 我们叫做前端 js 当 js 代码直接被 Node 运行的时候 没有了 BOM 和 DOM 增加了一些操作你电脑的能力 例如 :- 操作文件的增删改查- 操作 文件夹 ( 目录 ) 的 增删改查- 操作 电脑操作 系统- 操作 数据库 我们叫做后端 js前端 js 和 NodeJS 的区别 :前端 js: 可以操作浏览器的部分内容 可以操作DOM的部分内容 操作和 用户交互 的部分 NodeJS: 可以操作你 电脑 的 操作系统 可以操作你 电脑上 文件 及 文件夹 的 增删改查 可以操作数据库 可以当做服务器使用区分 js 文件 : 一个 js 文件是属于前端 js 文件, 还是后端 js 文件 不取决于 js 文件内的代码 ,js 代码不分前后端的 只是取决于你把 js 代码 运行 在什么位置 :如果你是把这个 js 文件以html文件引入, 在浏览器内打开运行, 那么就是前端 js 代码如果你是把这个 js 文件以node 软件在你电脑系统内打开运行, 那么就是后端 js 代码 当你把这个 js 文件当做 前端 js 来使用时 : 不要写和后端相关的 API因为会报错 不能操作 电脑 系统 , 不能操作数据库 只能操作浏览器和DOM的内容 当你把这个 js 文件当做 后端 js 来使用时 : 不要写和前端相关的 API因为会报错 不能操作 浏览器 和 DOM 的内容 可以操作数据库 可以操作电脑系统Node 环境的安装 : 打开官网 : Node.js 官网下载安装包 ( 推荐下载LTS的版本 ) 双击安装 ( 最好安装在软件推荐安装的目录位置 ) 安装完毕以后, 你的电脑里面就有了 Node 这个 软件 ( 环境 ) 就可以独立运行 js 文件 不过这个 软件 不是一个有快捷方式的软件 是直接装在你的电脑操作系统内部 想使用 node 这个软件, 需要通过命令行来打开node 的检测 : 打开命令行win:win R键, 输入cmd回车mac: 直接点击终端打开 输入指令 $node --version $node -v 能出现版本号, 表示安装成功了 如果出现报错信息, 那么表示安装失败了node 的卸载 : 打开我的电脑 添加和删除程序 找到 node 软件 右键 卸载node 运行 js 代码的方式 :1. 直接启动命令行, 执行 js 代码 打开命令行, 目录无所谓 输入指令: $ node 就会进入 js 编辑模式2. 使用 node 这个软件来执行一个 .js 文件 把代码书写好在 .js 文件内 打开命令行, 切换目录到 js 文件所在的目录 输入指令: $node 文件名 就会直接在 控制台 以 node 这个 软件 来运行 该 js 文件2. Node 基本的命令行操作 操作电脑的根本一些简单的指令 当你的命令行打开以后, 你看到的目录就是你将来指令生效的目录 例子: 你打开命令行显示的目录是 : C:\Users\m1330 你将来使用的 所有指令 都是在这个目录下生效 比如你执行了一个创建文件夹的指令 那么新创建的文件夹就会放在 C:\Users\m1330 目录下0. 明确命令行目录 打开 命令行 (cmd/ 终端 ) 以后 会在左边出现一个 目录结构 表示你当前处在哪一个目录下1.dir 打开命令行 输入指令 : $dir 作用:查看当前目录下的所有信息( 有哪些文件或者文件夹存在 )2. 切换目录cd 输入指令: $cd 文件夹名称 作用: 把当前终端切换到该文件夹下 前提: 你切换的文件夹, 必须在当前目录下能找到3. 退出当前目录 ( 返回上一级目录 ) 输入指令: $cd .. 作用: 把当前终端切换到该文件夹的上一级文件夹 前提: 你得有上一级文件夹4. 切换盘符 E 输入指令: $盘符: 作用: 把当前终端进入到另一个盘符的根目录 前提: 你得有这个盘符 注意: cd xx 的指令是不能进行盘符的切换的 只能在当前盘符下切换目录环境5. 清屏cls 输入指令 $cls 就会把当前命令行清空 OS: $clear其它了解的指令 :1. 输入指令 $md文件夹名称 在当前目录下创建文件夹2. 输入指令 $rmdir文件夹名称删除当前目录下的文件夹⭐️3. 输入指令 $ping网址测试网络环境 和 延迟4. 输入指令 $systeminfo 查看电脑基本的 操作系统信息⭐️5. 输入指令 $ipconfig查看电脑 IP 网路环境的信息 OS: $ifconfig ...3. Node 的模块化开发 模块: 每一个 js 文件 , 我们叫做一个独立的模块文件 每一个 js 文件有自己独立的 文件作用域( 模块作用域 ) 官方发布的模块化语法:commonJS模块化语法 规范 在 前端 开发的时候 可以独立文件开发, 在html内依次引入每一个 js 文件 因为你在一个 html 内引入的多个 js 文件, 共用一个全局 在 后端 开发的时候 直接使用node运行某一个 js 文件 多个 js 文件之间互相没有关联, 没有共同的全局 文件只能使用自己文件内书写的代码 node 的 开发 , 为什么必须是模块化开发 ? 当你在 前端引入 js 的时候 把多个 js 文件引入到一个 html 文件里面运行 当你在一个窗口打开 html 文件的时候 你引入的 多个 js 文件共用一个全局 window 当你在 node 执行 js 文件的时候 因为每一个文件都是相对独立的 js 文件 任何一个 js 文件不能随便使用另一个 js 文件内的 内容 因为在 node 环境下, 每一个 js 文件都是相对 独立的 如何使用多个 js 文件完成一段程序 就需要模块化 开发( 导入require/ 导出module.exports/ exports ) 你想在 a.js 内使用 b.js 内的内容- 首先你需要在 b.js 文件内把可以让别人使用的内容导出- 在 a.js 文件内导入b.js 文件- 此时才可以在 a.js 内使用 b.js 文件内导出的数据内容 node 有自己的 模块化 开发标准- 叫做CommonJS模块化开发标准 Node 的模块化开发大致分成三种1.自定义模块你自己书写的 js 文件2.内置模块node 天生自带的模块3.第三方模块 不是自己写的也不是内置模块 别人书写的 js 文件你自己下载下来使用Node.js 模块化三种分类正确版1、内置模块核心模块Node.js 天生自带的模块不用下载、不用自己写直接 require 就能用例fs 模块file system文件系统、path 模块路径信息、http 模块、url、querystring 等2、自定义模块文件模块你自己写的 JS 文件通过require 引入使用例require (./utils.js)3、第三方模块既不是 Node 自带也不是你写的别人写好的包通过npm 下载后使用例axios、express、mysql2 等极简记忆口诀面试直接说内置Node 自带自定义我自己写第三方npm 下载1. 自定义模块a.js (导入语法 :require( 指定的 js 文件 ))// 我是一个 a.js 文件 , 我是一个独立的模块 , 我有自己的独立作用域 // 我只能使用我自己的内容 , 但我又想使用 b .js 文件内的数据 // 2. 我需要导入 b.js 文件 /* 语法: require(指定的 js 文件) 注意: 如果你导入的文件是 .js 后缀, 可以默认省略后缀不写 返回值: 该 js 文件内导出的那个 对象数据类型 */ // 导入 b.js 文件 // 在 b.js 文件内导出的对象, 赋值给了 变量 moduleB const moduleB require(./b.js) console.log(我是 a.js 文件内的打印信息) console.log(moduleB) console.log(moduleB.num) moduleB.showStr() console.log() /* 如何使用 node 这个软件来运行 js 文件 方式: 打开命令行, 切换目录到你要执行的文件目录 输入指令 $ node 文件名称 表示使用 node 环境运行你指定的 js 文件 */b.js (导出语法 :module.exports { 要导出的内容 })// 我成为一个模块了 , 我有自己的独立作用域 // 我是一个 b.js 文件, 我有一些内容可能需要给别人使用 const num 100 const str hello world function fn() { console.log(str) } // 1. 我想被其它模块使用我的内容 // 我需要暴露出去 // 我要在自己的文件内进行导出 /* 语法: module.exports { 书写上你要导出的内容 } */ // 把所需要导出的整体内容书写在这个 对象内 // 谁导入我, 谁就可以得到下面这个对象 module.exports { // 导出了一个叫做 num 的数据, 用的是我自己的 num 这个变量的值 // 导出一个叫做 num 的数据, 值是 100 num: num, showStr: fn }2. 内置模块1. fs 模块file system文件系统 node 天生自带的一个模块, 叫做file system( 文件系统 ) node 内置模块之一, 这个模块内封装了一些方法,都是专门用来操作电脑中 各种文件和文件夹的 当你需要使用的时候, 直接导入就可以了const fs require(fs)// 0. 导入内置模块 fs const fs require(fs) console.log(fs); console.log(start) console.log(end)使用 fs 模块内提供的一些方法 :1. 异步读取文件内容 语法:fs.readFile(文件路径, 格式, 回调函数)- 文件路径: 你要读取的文件地址, 如果该地址不存在, 就会出现错误信息, 读取失败- 格式: 选填, 默认是buffer 格式, 选填 utf-8 , 表示以 utf-8 的 格式来读取内容- 回调函数:必填, 读取结束后执行的回调函数console.log(start) // 1. 异步读取文件内容 fs.readFile(./test.txt, utf-8, function (err, data) { // 这个回调函数接受两个形参 // 第一个形参 err 会在读取失败的时候有值 , 表示错误信息 // 第二个形参 data 会在读取成功的时候有值 , 表示读取到的该文件中的内容 console.log(读取文件信息完成) if (err) return console.log(err) // 替换敏感词 data data.replace(/l/g, *) console.log(data) }) console.log(end)2.同步读取文件内容 语法:fs.readFileSync(文件路径, 格式) 返回值: 读取到的文件内容 注意 : ~ 如果读取文件失败, 会直接报错, 阻断程序的继续执行console.log(start) // 2. 同步读取文件内容 const data fs.readFileSync(./test.txt, utf-8) console.log(data) console.log(end)3. 异步写入文件内容 语法:fs.writeFile(文件路径, 写入的内容, 回调函数)~ 文件路径: 把内容写入到哪一个文件内, 如果该路径不存在,会直接创建一个这个文件 , 再写入 ( 不取决你有没有这个文件 , 不重要 )~ 写入的内容: 你要向文件内书写的内容 注意:是完全覆盖式的写入~回调函数:必填, 写入完毕后执行的函数代码console.log(start) // 3. 异步写入文件内容 fs.writeFile(./test.txt, 你好 世界, () { console.log(写入完成) }) console.log(end)如果该文件路径不存在(没有此文件的话) , 会直接创建一个这个文件 , 再写入 :fs.writeFile(./test.css, div { width: 100px; }, () { console.log(写入完成) })4.同步写入文件内容 语法:fs.writeFileSync(文件路径, 写入的内容)console.log(start) // start // 2-4. 同步写入文件内容 fs.writeFileSync(./test.txt, 这个人很懒, 什么都没有留下 !) console.log(end) // end2. path 模块路径信息 node 内置模块之一 一个专门用来操作路径信息的模块 主要功能, 是用来帮你组装路径信息的( 两种拼接路径没啥区别 , 只是 node 里 有的 API 需要用相对路径 , 有的需要用绝对路径 )【绝对路径从 根目录E 出发的路径叫做 绝对路径】: 一个/代表根目录 例子: 有时候你得到的路径信息是 a/ 和 b/ 和 c.txt 你需要把它们合并成为一个完整的路径信息 a/b/c.txt 自己组装会比较麻烦 使用的时候直接导入就可以了const path require(path)// 0. 导入 path 模块 const path require(path)1. join( ) - 拼接相对路径 把你需要的路径组装成一个相对路径信息 语法:path.join( 路径片段信息1, 路径片段信息2, ...) 返回值:组装好的完整相对路径信息// 1. join() const url path.join(a, b, c.txt) console.log(url) // 1. 拼接路径 const res path.join(a, b, c.txt, ../d.txt) console.log(res)↑↑ ↑↑// 需求: 准备一个数组, 每一个内容都是 a 文件夹下的路径信息 // 已知, 目前的路径信息的是 desc/a 目录结构 // 1. desc/b.js // 2. desc/c.css // 3. d.html // 0. 导入 path 模块 const path require(path) const a [ ./b.js, c.css, ../d.html ] a.forEach(item { const url path.join(desc/a/, item) console.log(url) })2. resolve( ) - 拼接绝对路径【绝对路径从根目录E 出发的路径叫做 绝对路径】 把你需要的路径组装成一个绝对路径信息 语法: path.resolve( 路径片段1, 路径片段2, ...) 返回值: 组装好的完整绝对路径信息// 2. resolve() const res2 path.resolve(a, b, c.txt) console.log(res2) // a\b\c.txt // D:\xxx\3. http 模块开启服务 node 的内置模块之一, 专门用来开启 http服务的模块 用 js 书写服务器的模块 我们的 js 在 node 环境中运行的时候, 完全可以当做一个服务器使用 使用的时候直接导入就可以了const http require(http)// 0. 导入 http 模块 const http require(http) // 导入内置模块 fs const fs require(fs)1. createServer( ) - 创建服务 语法:http.createServer(函数) 返回值: 是一个 服务2. listen( ) - 让服务运行起来 语法:服务.listen(端口号, 函数) 【http.createServer(函数).listen(端口号, 函数)】 端口号: 0 ~ 65535 ( 建议是 1024 以上 )3. 服务配置 createServer 的时候, 接受的函数 是一个服务的回调函数 只要在当前端口发来的任何一个请求, 都会触发这个函数 这个函数接受两个参数~ 一个叫做request( req ), 表示请求报文~ 一个叫做response( res ), 表示响应报文以上代码书写完毕 : 当你把该 js 文件在 命令中 使用 node 执行以后 此时你的 命令行 就变成了一个服务器 可以接受 前端的请求, 并且根据不同的请求给出不同的响应{ } data.json[ { name: phone, desc: good, goods_id: 1 }, { name: phone, desc: good, goods_id: 2 }, { name: phone, desc: good, goods_id: 3 }, { name: phone, desc: good, goods_id: 4 } ]1、创建一个服务http.createServer(函数) 函数接受两个参数reqres~ 一个叫做request( req ), 表示请求报文里面有一个信息叫做url表示请求来的地址由哪一个地址发起的请求method请求方法~ 一个叫做response( res ), 表示响应报文【里面有一个方法叫做end语法res.end‘文本内容’后端返回给前端的内容】// 1. 创建一个服务 // server 接受的就是一个服务,当这个服务运行起来以后,就可以接收前端发来的请求了 // 函数: 注册了一个事件处理函数 // 什么事件: 请求事件, 当 前端 有请求发来的时候, 触发函数 // 函数 a 会在什么时候执行 // 只要前端有任何一个请求请求到了 8080 端口号, 就会执行一次 const server http.createServer(function a(req, res) { // 这个 a 函数接受两个参数 // 第一个叫做 request, 表示本次请求过来的所有信息 // 第二个叫做 response, 表示本次响应的所有内容 // 拿到你请求的 请求地址 // req 请求报文内, 有一个信息叫做 url // 表示请求来的地址, 由哪一个地址发起的请求 const url req.url // 拿到你本次请求的 请求地址 const method req.method // 判断, 当你以 get 方式, 请求 /test/first 这个地址的时候 if (method GET url /test/first) { // response 内有一个方法叫做 end() // 语法: res.end(文本内容) // 后端返回给前端的内容 res.end(hello world) } // 判断 if (method GET url /test/second) { const obj { name: jack, age: 18 } res.end(JSON.stringify(obj)) } // 判断 if (method GET url /goods/list) { // 读取 data.json 文件 fs.readFile(./data.json, utf-8, (err, data) { // 如果出了错误, 后面的代码不需要继续执行了 if (err) return console.log(err) // 代码能执行到这里, 说明你请求的文件存在 // data 就是我读取到的内容 // 直接把读取到的内容给你 res.end(data) }) } }) // 2. 服务监听一个端口 // 注册一下我监听哪一个端口号 // 从 8080 端口号发来的请求, 我才接受 server.listen(8080, () console.log(我正在监听 8080 端口号))2、listen( ) - 让服务运行起来 语法:服务.listen(端口号, 函数)4. 认识 npm 一个 js 的包管理器( 工具, 软件, 环境 ) 是一个依赖于 node 环境运行的工具 软件 如果你想运行 npm 这个工具 你的电脑上一定要有 node 环境 专门下载第三方 js 包的一个 软件 专门管理所有和 js 相关的第三方内容npm 的安装 : 不需要独立安装 当你安装好 node 以后, npm 会自动一起安装完毕npm 的检测 : 打开命令行, 目录无所谓 输入指令: $npm --version 简写 : $npm -v 能出现版本号, 表示安装成功npm 的卸载 : 不需要独立卸载 当你卸载 node 的时候, npm 会自动一起卸载了5. npm 的基本使用场景模拟: 一个完整的项目, 你用了多少个第三方, 分别是什么 每一个第三方的版本号是多少 方案1: 逐个翻 html 文件, 记录一下一共引入了多少个第三方 方案2: 在项目开始的时候, 准备好一个 文档 每下载一个第三方, 就在文档内记录一些信息 jquery: 3.3.6 swiper: 5.24.1 pullpage: 1.1.01. npm 初始化 : 打开命令行, 切换目录到你需要初始化的项目根目录 输入指令: $npm init 会进入询问界面, 一个选择模块, 填写一些信息package name: 你当前的项目名称, 可以不写,默认使用文件夹名称(文件夹名称必须是英文,不要用中文)version: 你项目的版本号description: 描述信息说明, 你的项目的描述git repository: 关联的 git 仓库地址keywords: 项目网站关键字author: 项目的作者 填写信息完毕以后, 会在当前目录文件夹下生成得到一个叫做package.json的文件 该文件就是你当前的项目的描述信息文件 有了这一个文件以后,将来你在这个目录下安装第三方(使用 npm) 都会自动被记录进这个 package.json 的文件内简写指令(前提: 你的文件夹名称必须是英文) $npm init -y $npm init --yes 所有的内容都按照默认值填写,自动生成一个 package.json 文件注意: package name 会按照你的文件夹名称生成, 所以你的文件夹名称不能用中文或者空格2. 使用 npm 下载第三方包 : 打开命令行, 切换到 你需要下载第三方的 项目根目录 输入指令: $npm install 包名 简写指令: $npm i 包名 等待结果 : 第一次下载完毕以后, 会在当前目录下生成一个叫做node_modules的文件夹 该文件夹内部就有你刚才下载的第三方内容 第二次装包, 会直接安装在 node_modules 内部 注意: 以前版本的 npm, 如果你没有初始化, 是没有关系的, 一样会下载在当前目录下 最新版本的 npm, 如果你没有初始化, 那么默认下载在你电脑的 系统 目录下,不会下载在当前目录下 , 只有 npm 初始化以后, 才能下载在当前目录下3. 使用 npm 下载指定版本的第三方包 : 打开命令行, 切换到 你需要下载第三方的 项目根目录 输入指令: $npm install 包名版本号 简写指令: $npm i 包名版本号 等待结果 : 注意: 如果你已经有了一个同名包, 会把当前版本覆盖 一个项目内, 一个同名包只能留存一个版本 当你下载一个其他版本的时候, 会自动帮你把之前的版本清除掉4. 查看 npm 上可以下载的某一个包的所有版本 : 打开命令行, 目录无所谓 输入指令: $npm view 包名 versions 给你看到该包所有的发布的可下载的版本5. 卸载 npm 安装的第三方包 : 不推荐手动删除 打开命令行, 切换到 你需要删除第三方的 项目根目录 输入指令: $npm uninstall 包名 简写指令: $npm un 包名 等待结果 会把你下载的包相关文件删除, 并且自动删除 package.json 文件内的记录6. npm 统一下载 ( 一次性下载所有项目相关第三方 ) : 打开命令行, 切换目录到 package.json 文件所在的目录 要保证你的项目目录内有 package.json 文件 输入指令: $npm install 简写指令: $npm i会自动读取 , 把 package.json 文件内记录的所有第三方包一次性下载完毕7. npm 清除缓存文件 :7-1. 清除下载缓存 打开命令行, 目录无所谓 输入指令 $npm cache clear -f 清除下载的路径记录7-2. 清除缓存文件 ( 强力清除本地下载缓存 ) 手动删除打开我的电脑:系统盘符 C:/users/你自己的用户名/AppData(可能是个隐藏文件夹)/roaming 删除这里的 npm-cache 文件夹6. 认识 nrm 是一个环境工具 一个基于 node 运行的工具 当你的电脑里面安装了 node 以后, 就会伴随安装一个 npm 只要是基于 node 环境运行的 软件, 都可以直接使用 npm 安装 作用 : 专门管理和修改你电脑内的 npm 这个工具的 下载地址 程序员给 下载地址 这个玩意起了一个名字:镜像源地址nrm 的下载 : 是一个全局工具, 一个电脑只需要下载一次 也是一个基于 node 环境使用的工具 使用 npm 安装项目内使用的第三方- 使用的指令是 $ npm install 包名 使用 npm 安装电脑第三方环境的时候(一个 基于node 的 软件)- 使用的指令是 $ npm install --global 包名 安装 nrm 打开命令行, 目录无所谓 输入指令: win: $npm install --global nrm mac: $sudonpm install --global nrm 如果没有 sudo 关键字, 会报错, 错误代码是 13 在安装过程中会让你输入一次密码(你的开机密码)-简写: $npm i -g nrm 等待结果- 安装完毕以后, 你的电脑不会有图标也不会有变化首次下载: 修改一下代码: 最新版本的 nrm 出现一些问题 需要对 nrm 进行一些修改 找到 nrm 的安装目录下找到 cli.js 文件第 17 行- C:/users/你的账户/appdata/roaming/npm/nodu_modules/nrm/cli.js 把本身的 17 行代码注释或修改掉 写上 :const NRMRC path.join(process.env[(process.platform win32) ? USERPROFILE : HOME], .nrmrc);检测 nrm : 打开命令行, 目录无所谓 输入指令: $nrm --version卸载 nrm : 打开命令行, 目录无所谓 输入指令: win: $ npm uninstall --global nrm mac: $ sudo npm uninstall --global nrm- 简写: $npm un -g nrmnrm 的基本常用指令 :1.检测所有镜像源地址的网络延迟 打开命令行, 目录无所谓 输入指令: $nrm test 作用: 检测所有可使用的 镜像源地址的网路延迟npm ---- 829msyarn --- 841mscnpm --- 550ms* taobao - 170msnj ----- Fetch ErrornpmMirror 837msedunpm - 4467ms 中划线前面是 镜像源地址 名称 中划线后面是 镜像源地址 网络延迟 前面带有 星号 的表示你现在正在使用的 镜像源地址2. 切换镜像源地址 : 打开命令行, 目录无所谓 输入指令: $nrm use 镜像源地址名称 作用: 切换 npm 这个工具以后下载第三方包的镜像源地址简图
Node _ 初学版
发布时间:2026/7/2 15:09:37
目录1. 认识 Node2. Node 基本的命令行操作3. Node 的模块化开发1. 自定义模块2. 内置模块1. fs 模块file system文件系统1. 异步读取文件内容2. 同步读取文件内容3. 异步写入文件内容4. 同步写入文件内容2. path 模块路径信息1. join( ) - 拼接 相对 路径2. resolve( ) - 拼接绝对路径3. http 模块开启服务1. createServer( ) - 创建服务2. listen( ) - 让服务运行起来3. 服务配置4. 认识 npm5. npm 的基本使用6. 认识 nrm简图1. 认识 Node什么是 Node : 就是一个 软件 chrome 这个软件是用来解析 .html 文件的 word 这个软件是用来解析 .docx 文件的 node 这个软件是用来解析 .js 文件的 浏览器为什么能识别 js 代码 因为浏览器这个 软件 内内置了一个js代码的解释器 (解析器) Node 有人把浏览器内的解释器给拆了 专门把这个解释器做成了一个 软件 起名叫做 Node 在解释器的基础上, 增加了一些别的内容 官方解释是一个基于 Chrome V8 解析引擎的 JavaScript 运行时环境 私人解释一个专门用来执行js 文件 ( 代码 )的 软件Node 的作用 : 当 js 代码引入在 html 文件内, 在 浏览器 打开的时候 使用 ECMAScript 操作 BOM 和 DOM 我们叫做前端 js 当 js 代码直接被 Node 运行的时候 没有了 BOM 和 DOM 增加了一些操作你电脑的能力 例如 :- 操作文件的增删改查- 操作 文件夹 ( 目录 ) 的 增删改查- 操作 电脑操作 系统- 操作 数据库 我们叫做后端 js前端 js 和 NodeJS 的区别 :前端 js: 可以操作浏览器的部分内容 可以操作DOM的部分内容 操作和 用户交互 的部分 NodeJS: 可以操作你 电脑 的 操作系统 可以操作你 电脑上 文件 及 文件夹 的 增删改查 可以操作数据库 可以当做服务器使用区分 js 文件 : 一个 js 文件是属于前端 js 文件, 还是后端 js 文件 不取决于 js 文件内的代码 ,js 代码不分前后端的 只是取决于你把 js 代码 运行 在什么位置 :如果你是把这个 js 文件以html文件引入, 在浏览器内打开运行, 那么就是前端 js 代码如果你是把这个 js 文件以node 软件在你电脑系统内打开运行, 那么就是后端 js 代码 当你把这个 js 文件当做 前端 js 来使用时 : 不要写和后端相关的 API因为会报错 不能操作 电脑 系统 , 不能操作数据库 只能操作浏览器和DOM的内容 当你把这个 js 文件当做 后端 js 来使用时 : 不要写和前端相关的 API因为会报错 不能操作 浏览器 和 DOM 的内容 可以操作数据库 可以操作电脑系统Node 环境的安装 : 打开官网 : Node.js 官网下载安装包 ( 推荐下载LTS的版本 ) 双击安装 ( 最好安装在软件推荐安装的目录位置 ) 安装完毕以后, 你的电脑里面就有了 Node 这个 软件 ( 环境 ) 就可以独立运行 js 文件 不过这个 软件 不是一个有快捷方式的软件 是直接装在你的电脑操作系统内部 想使用 node 这个软件, 需要通过命令行来打开node 的检测 : 打开命令行win:win R键, 输入cmd回车mac: 直接点击终端打开 输入指令 $node --version $node -v 能出现版本号, 表示安装成功了 如果出现报错信息, 那么表示安装失败了node 的卸载 : 打开我的电脑 添加和删除程序 找到 node 软件 右键 卸载node 运行 js 代码的方式 :1. 直接启动命令行, 执行 js 代码 打开命令行, 目录无所谓 输入指令: $ node 就会进入 js 编辑模式2. 使用 node 这个软件来执行一个 .js 文件 把代码书写好在 .js 文件内 打开命令行, 切换目录到 js 文件所在的目录 输入指令: $node 文件名 就会直接在 控制台 以 node 这个 软件 来运行 该 js 文件2. Node 基本的命令行操作 操作电脑的根本一些简单的指令 当你的命令行打开以后, 你看到的目录就是你将来指令生效的目录 例子: 你打开命令行显示的目录是 : C:\Users\m1330 你将来使用的 所有指令 都是在这个目录下生效 比如你执行了一个创建文件夹的指令 那么新创建的文件夹就会放在 C:\Users\m1330 目录下0. 明确命令行目录 打开 命令行 (cmd/ 终端 ) 以后 会在左边出现一个 目录结构 表示你当前处在哪一个目录下1.dir 打开命令行 输入指令 : $dir 作用:查看当前目录下的所有信息( 有哪些文件或者文件夹存在 )2. 切换目录cd 输入指令: $cd 文件夹名称 作用: 把当前终端切换到该文件夹下 前提: 你切换的文件夹, 必须在当前目录下能找到3. 退出当前目录 ( 返回上一级目录 ) 输入指令: $cd .. 作用: 把当前终端切换到该文件夹的上一级文件夹 前提: 你得有上一级文件夹4. 切换盘符 E 输入指令: $盘符: 作用: 把当前终端进入到另一个盘符的根目录 前提: 你得有这个盘符 注意: cd xx 的指令是不能进行盘符的切换的 只能在当前盘符下切换目录环境5. 清屏cls 输入指令 $cls 就会把当前命令行清空 OS: $clear其它了解的指令 :1. 输入指令 $md文件夹名称 在当前目录下创建文件夹2. 输入指令 $rmdir文件夹名称删除当前目录下的文件夹⭐️3. 输入指令 $ping网址测试网络环境 和 延迟4. 输入指令 $systeminfo 查看电脑基本的 操作系统信息⭐️5. 输入指令 $ipconfig查看电脑 IP 网路环境的信息 OS: $ifconfig ...3. Node 的模块化开发 模块: 每一个 js 文件 , 我们叫做一个独立的模块文件 每一个 js 文件有自己独立的 文件作用域( 模块作用域 ) 官方发布的模块化语法:commonJS模块化语法 规范 在 前端 开发的时候 可以独立文件开发, 在html内依次引入每一个 js 文件 因为你在一个 html 内引入的多个 js 文件, 共用一个全局 在 后端 开发的时候 直接使用node运行某一个 js 文件 多个 js 文件之间互相没有关联, 没有共同的全局 文件只能使用自己文件内书写的代码 node 的 开发 , 为什么必须是模块化开发 ? 当你在 前端引入 js 的时候 把多个 js 文件引入到一个 html 文件里面运行 当你在一个窗口打开 html 文件的时候 你引入的 多个 js 文件共用一个全局 window 当你在 node 执行 js 文件的时候 因为每一个文件都是相对独立的 js 文件 任何一个 js 文件不能随便使用另一个 js 文件内的 内容 因为在 node 环境下, 每一个 js 文件都是相对 独立的 如何使用多个 js 文件完成一段程序 就需要模块化 开发( 导入require/ 导出module.exports/ exports ) 你想在 a.js 内使用 b.js 内的内容- 首先你需要在 b.js 文件内把可以让别人使用的内容导出- 在 a.js 文件内导入b.js 文件- 此时才可以在 a.js 内使用 b.js 文件内导出的数据内容 node 有自己的 模块化 开发标准- 叫做CommonJS模块化开发标准 Node 的模块化开发大致分成三种1.自定义模块你自己书写的 js 文件2.内置模块node 天生自带的模块3.第三方模块 不是自己写的也不是内置模块 别人书写的 js 文件你自己下载下来使用Node.js 模块化三种分类正确版1、内置模块核心模块Node.js 天生自带的模块不用下载、不用自己写直接 require 就能用例fs 模块file system文件系统、path 模块路径信息、http 模块、url、querystring 等2、自定义模块文件模块你自己写的 JS 文件通过require 引入使用例require (./utils.js)3、第三方模块既不是 Node 自带也不是你写的别人写好的包通过npm 下载后使用例axios、express、mysql2 等极简记忆口诀面试直接说内置Node 自带自定义我自己写第三方npm 下载1. 自定义模块a.js (导入语法 :require( 指定的 js 文件 ))// 我是一个 a.js 文件 , 我是一个独立的模块 , 我有自己的独立作用域 // 我只能使用我自己的内容 , 但我又想使用 b .js 文件内的数据 // 2. 我需要导入 b.js 文件 /* 语法: require(指定的 js 文件) 注意: 如果你导入的文件是 .js 后缀, 可以默认省略后缀不写 返回值: 该 js 文件内导出的那个 对象数据类型 */ // 导入 b.js 文件 // 在 b.js 文件内导出的对象, 赋值给了 变量 moduleB const moduleB require(./b.js) console.log(我是 a.js 文件内的打印信息) console.log(moduleB) console.log(moduleB.num) moduleB.showStr() console.log() /* 如何使用 node 这个软件来运行 js 文件 方式: 打开命令行, 切换目录到你要执行的文件目录 输入指令 $ node 文件名称 表示使用 node 环境运行你指定的 js 文件 */b.js (导出语法 :module.exports { 要导出的内容 })// 我成为一个模块了 , 我有自己的独立作用域 // 我是一个 b.js 文件, 我有一些内容可能需要给别人使用 const num 100 const str hello world function fn() { console.log(str) } // 1. 我想被其它模块使用我的内容 // 我需要暴露出去 // 我要在自己的文件内进行导出 /* 语法: module.exports { 书写上你要导出的内容 } */ // 把所需要导出的整体内容书写在这个 对象内 // 谁导入我, 谁就可以得到下面这个对象 module.exports { // 导出了一个叫做 num 的数据, 用的是我自己的 num 这个变量的值 // 导出一个叫做 num 的数据, 值是 100 num: num, showStr: fn }2. 内置模块1. fs 模块file system文件系统 node 天生自带的一个模块, 叫做file system( 文件系统 ) node 内置模块之一, 这个模块内封装了一些方法,都是专门用来操作电脑中 各种文件和文件夹的 当你需要使用的时候, 直接导入就可以了const fs require(fs)// 0. 导入内置模块 fs const fs require(fs) console.log(fs); console.log(start) console.log(end)使用 fs 模块内提供的一些方法 :1. 异步读取文件内容 语法:fs.readFile(文件路径, 格式, 回调函数)- 文件路径: 你要读取的文件地址, 如果该地址不存在, 就会出现错误信息, 读取失败- 格式: 选填, 默认是buffer 格式, 选填 utf-8 , 表示以 utf-8 的 格式来读取内容- 回调函数:必填, 读取结束后执行的回调函数console.log(start) // 1. 异步读取文件内容 fs.readFile(./test.txt, utf-8, function (err, data) { // 这个回调函数接受两个形参 // 第一个形参 err 会在读取失败的时候有值 , 表示错误信息 // 第二个形参 data 会在读取成功的时候有值 , 表示读取到的该文件中的内容 console.log(读取文件信息完成) if (err) return console.log(err) // 替换敏感词 data data.replace(/l/g, *) console.log(data) }) console.log(end)2.同步读取文件内容 语法:fs.readFileSync(文件路径, 格式) 返回值: 读取到的文件内容 注意 : ~ 如果读取文件失败, 会直接报错, 阻断程序的继续执行console.log(start) // 2. 同步读取文件内容 const data fs.readFileSync(./test.txt, utf-8) console.log(data) console.log(end)3. 异步写入文件内容 语法:fs.writeFile(文件路径, 写入的内容, 回调函数)~ 文件路径: 把内容写入到哪一个文件内, 如果该路径不存在,会直接创建一个这个文件 , 再写入 ( 不取决你有没有这个文件 , 不重要 )~ 写入的内容: 你要向文件内书写的内容 注意:是完全覆盖式的写入~回调函数:必填, 写入完毕后执行的函数代码console.log(start) // 3. 异步写入文件内容 fs.writeFile(./test.txt, 你好 世界, () { console.log(写入完成) }) console.log(end)如果该文件路径不存在(没有此文件的话) , 会直接创建一个这个文件 , 再写入 :fs.writeFile(./test.css, div { width: 100px; }, () { console.log(写入完成) })4.同步写入文件内容 语法:fs.writeFileSync(文件路径, 写入的内容)console.log(start) // start // 2-4. 同步写入文件内容 fs.writeFileSync(./test.txt, 这个人很懒, 什么都没有留下 !) console.log(end) // end2. path 模块路径信息 node 内置模块之一 一个专门用来操作路径信息的模块 主要功能, 是用来帮你组装路径信息的( 两种拼接路径没啥区别 , 只是 node 里 有的 API 需要用相对路径 , 有的需要用绝对路径 )【绝对路径从 根目录E 出发的路径叫做 绝对路径】: 一个/代表根目录 例子: 有时候你得到的路径信息是 a/ 和 b/ 和 c.txt 你需要把它们合并成为一个完整的路径信息 a/b/c.txt 自己组装会比较麻烦 使用的时候直接导入就可以了const path require(path)// 0. 导入 path 模块 const path require(path)1. join( ) - 拼接相对路径 把你需要的路径组装成一个相对路径信息 语法:path.join( 路径片段信息1, 路径片段信息2, ...) 返回值:组装好的完整相对路径信息// 1. join() const url path.join(a, b, c.txt) console.log(url) // 1. 拼接路径 const res path.join(a, b, c.txt, ../d.txt) console.log(res)↑↑ ↑↑// 需求: 准备一个数组, 每一个内容都是 a 文件夹下的路径信息 // 已知, 目前的路径信息的是 desc/a 目录结构 // 1. desc/b.js // 2. desc/c.css // 3. d.html // 0. 导入 path 模块 const path require(path) const a [ ./b.js, c.css, ../d.html ] a.forEach(item { const url path.join(desc/a/, item) console.log(url) })2. resolve( ) - 拼接绝对路径【绝对路径从根目录E 出发的路径叫做 绝对路径】 把你需要的路径组装成一个绝对路径信息 语法: path.resolve( 路径片段1, 路径片段2, ...) 返回值: 组装好的完整绝对路径信息// 2. resolve() const res2 path.resolve(a, b, c.txt) console.log(res2) // a\b\c.txt // D:\xxx\3. http 模块开启服务 node 的内置模块之一, 专门用来开启 http服务的模块 用 js 书写服务器的模块 我们的 js 在 node 环境中运行的时候, 完全可以当做一个服务器使用 使用的时候直接导入就可以了const http require(http)// 0. 导入 http 模块 const http require(http) // 导入内置模块 fs const fs require(fs)1. createServer( ) - 创建服务 语法:http.createServer(函数) 返回值: 是一个 服务2. listen( ) - 让服务运行起来 语法:服务.listen(端口号, 函数) 【http.createServer(函数).listen(端口号, 函数)】 端口号: 0 ~ 65535 ( 建议是 1024 以上 )3. 服务配置 createServer 的时候, 接受的函数 是一个服务的回调函数 只要在当前端口发来的任何一个请求, 都会触发这个函数 这个函数接受两个参数~ 一个叫做request( req ), 表示请求报文~ 一个叫做response( res ), 表示响应报文以上代码书写完毕 : 当你把该 js 文件在 命令中 使用 node 执行以后 此时你的 命令行 就变成了一个服务器 可以接受 前端的请求, 并且根据不同的请求给出不同的响应{ } data.json[ { name: phone, desc: good, goods_id: 1 }, { name: phone, desc: good, goods_id: 2 }, { name: phone, desc: good, goods_id: 3 }, { name: phone, desc: good, goods_id: 4 } ]1、创建一个服务http.createServer(函数) 函数接受两个参数reqres~ 一个叫做request( req ), 表示请求报文里面有一个信息叫做url表示请求来的地址由哪一个地址发起的请求method请求方法~ 一个叫做response( res ), 表示响应报文【里面有一个方法叫做end语法res.end‘文本内容’后端返回给前端的内容】// 1. 创建一个服务 // server 接受的就是一个服务,当这个服务运行起来以后,就可以接收前端发来的请求了 // 函数: 注册了一个事件处理函数 // 什么事件: 请求事件, 当 前端 有请求发来的时候, 触发函数 // 函数 a 会在什么时候执行 // 只要前端有任何一个请求请求到了 8080 端口号, 就会执行一次 const server http.createServer(function a(req, res) { // 这个 a 函数接受两个参数 // 第一个叫做 request, 表示本次请求过来的所有信息 // 第二个叫做 response, 表示本次响应的所有内容 // 拿到你请求的 请求地址 // req 请求报文内, 有一个信息叫做 url // 表示请求来的地址, 由哪一个地址发起的请求 const url req.url // 拿到你本次请求的 请求地址 const method req.method // 判断, 当你以 get 方式, 请求 /test/first 这个地址的时候 if (method GET url /test/first) { // response 内有一个方法叫做 end() // 语法: res.end(文本内容) // 后端返回给前端的内容 res.end(hello world) } // 判断 if (method GET url /test/second) { const obj { name: jack, age: 18 } res.end(JSON.stringify(obj)) } // 判断 if (method GET url /goods/list) { // 读取 data.json 文件 fs.readFile(./data.json, utf-8, (err, data) { // 如果出了错误, 后面的代码不需要继续执行了 if (err) return console.log(err) // 代码能执行到这里, 说明你请求的文件存在 // data 就是我读取到的内容 // 直接把读取到的内容给你 res.end(data) }) } }) // 2. 服务监听一个端口 // 注册一下我监听哪一个端口号 // 从 8080 端口号发来的请求, 我才接受 server.listen(8080, () console.log(我正在监听 8080 端口号))2、listen( ) - 让服务运行起来 语法:服务.listen(端口号, 函数)4. 认识 npm 一个 js 的包管理器( 工具, 软件, 环境 ) 是一个依赖于 node 环境运行的工具 软件 如果你想运行 npm 这个工具 你的电脑上一定要有 node 环境 专门下载第三方 js 包的一个 软件 专门管理所有和 js 相关的第三方内容npm 的安装 : 不需要独立安装 当你安装好 node 以后, npm 会自动一起安装完毕npm 的检测 : 打开命令行, 目录无所谓 输入指令: $npm --version 简写 : $npm -v 能出现版本号, 表示安装成功npm 的卸载 : 不需要独立卸载 当你卸载 node 的时候, npm 会自动一起卸载了5. npm 的基本使用场景模拟: 一个完整的项目, 你用了多少个第三方, 分别是什么 每一个第三方的版本号是多少 方案1: 逐个翻 html 文件, 记录一下一共引入了多少个第三方 方案2: 在项目开始的时候, 准备好一个 文档 每下载一个第三方, 就在文档内记录一些信息 jquery: 3.3.6 swiper: 5.24.1 pullpage: 1.1.01. npm 初始化 : 打开命令行, 切换目录到你需要初始化的项目根目录 输入指令: $npm init 会进入询问界面, 一个选择模块, 填写一些信息package name: 你当前的项目名称, 可以不写,默认使用文件夹名称(文件夹名称必须是英文,不要用中文)version: 你项目的版本号description: 描述信息说明, 你的项目的描述git repository: 关联的 git 仓库地址keywords: 项目网站关键字author: 项目的作者 填写信息完毕以后, 会在当前目录文件夹下生成得到一个叫做package.json的文件 该文件就是你当前的项目的描述信息文件 有了这一个文件以后,将来你在这个目录下安装第三方(使用 npm) 都会自动被记录进这个 package.json 的文件内简写指令(前提: 你的文件夹名称必须是英文) $npm init -y $npm init --yes 所有的内容都按照默认值填写,自动生成一个 package.json 文件注意: package name 会按照你的文件夹名称生成, 所以你的文件夹名称不能用中文或者空格2. 使用 npm 下载第三方包 : 打开命令行, 切换到 你需要下载第三方的 项目根目录 输入指令: $npm install 包名 简写指令: $npm i 包名 等待结果 : 第一次下载完毕以后, 会在当前目录下生成一个叫做node_modules的文件夹 该文件夹内部就有你刚才下载的第三方内容 第二次装包, 会直接安装在 node_modules 内部 注意: 以前版本的 npm, 如果你没有初始化, 是没有关系的, 一样会下载在当前目录下 最新版本的 npm, 如果你没有初始化, 那么默认下载在你电脑的 系统 目录下,不会下载在当前目录下 , 只有 npm 初始化以后, 才能下载在当前目录下3. 使用 npm 下载指定版本的第三方包 : 打开命令行, 切换到 你需要下载第三方的 项目根目录 输入指令: $npm install 包名版本号 简写指令: $npm i 包名版本号 等待结果 : 注意: 如果你已经有了一个同名包, 会把当前版本覆盖 一个项目内, 一个同名包只能留存一个版本 当你下载一个其他版本的时候, 会自动帮你把之前的版本清除掉4. 查看 npm 上可以下载的某一个包的所有版本 : 打开命令行, 目录无所谓 输入指令: $npm view 包名 versions 给你看到该包所有的发布的可下载的版本5. 卸载 npm 安装的第三方包 : 不推荐手动删除 打开命令行, 切换到 你需要删除第三方的 项目根目录 输入指令: $npm uninstall 包名 简写指令: $npm un 包名 等待结果 会把你下载的包相关文件删除, 并且自动删除 package.json 文件内的记录6. npm 统一下载 ( 一次性下载所有项目相关第三方 ) : 打开命令行, 切换目录到 package.json 文件所在的目录 要保证你的项目目录内有 package.json 文件 输入指令: $npm install 简写指令: $npm i会自动读取 , 把 package.json 文件内记录的所有第三方包一次性下载完毕7. npm 清除缓存文件 :7-1. 清除下载缓存 打开命令行, 目录无所谓 输入指令 $npm cache clear -f 清除下载的路径记录7-2. 清除缓存文件 ( 强力清除本地下载缓存 ) 手动删除打开我的电脑:系统盘符 C:/users/你自己的用户名/AppData(可能是个隐藏文件夹)/roaming 删除这里的 npm-cache 文件夹6. 认识 nrm 是一个环境工具 一个基于 node 运行的工具 当你的电脑里面安装了 node 以后, 就会伴随安装一个 npm 只要是基于 node 环境运行的 软件, 都可以直接使用 npm 安装 作用 : 专门管理和修改你电脑内的 npm 这个工具的 下载地址 程序员给 下载地址 这个玩意起了一个名字:镜像源地址nrm 的下载 : 是一个全局工具, 一个电脑只需要下载一次 也是一个基于 node 环境使用的工具 使用 npm 安装项目内使用的第三方- 使用的指令是 $ npm install 包名 使用 npm 安装电脑第三方环境的时候(一个 基于node 的 软件)- 使用的指令是 $ npm install --global 包名 安装 nrm 打开命令行, 目录无所谓 输入指令: win: $npm install --global nrm mac: $sudonpm install --global nrm 如果没有 sudo 关键字, 会报错, 错误代码是 13 在安装过程中会让你输入一次密码(你的开机密码)-简写: $npm i -g nrm 等待结果- 安装完毕以后, 你的电脑不会有图标也不会有变化首次下载: 修改一下代码: 最新版本的 nrm 出现一些问题 需要对 nrm 进行一些修改 找到 nrm 的安装目录下找到 cli.js 文件第 17 行- C:/users/你的账户/appdata/roaming/npm/nodu_modules/nrm/cli.js 把本身的 17 行代码注释或修改掉 写上 :const NRMRC path.join(process.env[(process.platform win32) ? USERPROFILE : HOME], .nrmrc);检测 nrm : 打开命令行, 目录无所谓 输入指令: $nrm --version卸载 nrm : 打开命令行, 目录无所谓 输入指令: win: $ npm uninstall --global nrm mac: $ sudo npm uninstall --global nrm- 简写: $npm un -g nrmnrm 的基本常用指令 :1.检测所有镜像源地址的网络延迟 打开命令行, 目录无所谓 输入指令: $nrm test 作用: 检测所有可使用的 镜像源地址的网路延迟npm ---- 829msyarn --- 841mscnpm --- 550ms* taobao - 170msnj ----- Fetch ErrornpmMirror 837msedunpm - 4467ms 中划线前面是 镜像源地址 名称 中划线后面是 镜像源地址 网络延迟 前面带有 星号 的表示你现在正在使用的 镜像源地址2. 切换镜像源地址 : 打开命令行, 目录无所谓 输入指令: $nrm use 镜像源地址名称 作用: 切换 npm 这个工具以后下载第三方包的镜像源地址简图