diff --git "a/\351\203\255\345\205\201\346\226\214/20240209-\345\256\211\350\243\205nodejs\345\222\214\345\214\205.md" "b/\351\203\255\345\205\201\346\226\214/20240209-\345\256\211\350\243\205nodejs\345\222\214\345\214\205.md" new file mode 100644 index 0000000000000000000000000000000000000000..56d83fd355ee7e031ff5d23ec67aa249c714e199 --- /dev/null +++ "b/\351\203\255\345\205\201\346\226\214/20240209-\345\256\211\350\243\205nodejs\345\222\214\345\214\205.md" @@ -0,0 +1,37 @@ +## 什么是 Node? +Node(正式名称 Node.js)是一个开源的、跨平台的运行时环境,有了它,开发人员可以使用 JavaScript 创建各种服务器端工具和应用程序。此运行时主要用于浏览器上下文之外(即可以直接运行于计算机或服务器操作系统上)。据此,该环境省略了一些浏览器专用的 JavaScript API,同时添加了对更传统的 OS API(比如 HTTP 库和文件系统库)的支持。 + +- 从 web 服务器开发的角度来看,Node 有很多好处: + +1. 卓越的性能表现!Node 为优化 web 应用的吞吐量和扩展度而生,对常见的 web 开发问题是一套绝佳方案(比如实时 web 应用)。 +2. 代码还是熟悉的老伙伴 JavaScript,这意味着在客户端和服务器端“上下文切换”的时间成本更低。 +3. 与传统的 web 服务器语言(例如 Python、PHP 等)相比,JavaScript 理念更新,语言设计的改进带来了诸多好处。许多其他新近流行的语言也可编译/转换成 JavaScript,所以 TypeScript、CoffeeScript、ClojureScript、Scala、LiveScript 等等也可以使用。 +4. Node 包管理工具(node package manager,NPM)提供了数十万个可重用的工具包。它还提供了一流的依赖解决方案,可实现自动化工具链构建。 +5. Node.js 是可移植的,可运行于 Microsoft Windows、macOS、Linux、Solaris、FreeBSD、OpenBSD、WebOS 和 NonStop OS。此外,许多 web 主机供应商对其提供了良好支持(包括专用的基础框架和构建 Node 站点的文档)。 + +### 使用 NPM +构建 Node 应用过程中,NPM 是除了 Node 本身之外最重要的工具。可用于获取应用开发、测试以及生产所需的所有包(JavaScript 库)。也可运行开发过程中使用的测试单元和工具。 +#### 查看 npm 的版本 +- npm -v //安装成功会返回版本号 +#### 查看各个命令的简单用法 +- npm -l +#### 查看 npm 命令列表 +- npm help +#### 查看 npm 的配置 +- npm config list -l + +#### npm init 创建模块 +npm init用来初始化生成一个新的package.json文件。它会向用户提问一系列问题,如果觉得不用修改默认配置,一路回车就可以了。 + +尾缀带-f(代表force)、-y(代表yes),则跳过提问阶段,直接生成一个新的package.json文件,不带尾缀的话,默认有提问阶段。 +#### npm search 搜索模块 +npm search命令用于搜索npm仓库,它后面可以跟字符串,也可以跟正则表达式。 +#### npm list 查看模块 +- 当前项目安装的所有模块 +npm list +- 列出全局安装的模块 带上[--depth 0] 不深入到包的支点 更简洁 +npm list -g --depth 0 +#### npm install 安装模块 +读取package.json里面的配置单安装 +$ npm install +//可简写成 npm i \ No newline at end of file diff --git "a/\351\203\255\345\205\201\346\226\214/20240301-\345\257\274\345\205\245\346\250\241\345\235\227\345\222\214\346\232\264\351\234\262.md" "b/\351\203\255\345\205\201\346\226\214/20240301-\345\257\274\345\205\245\346\250\241\345\235\227\345\222\214\346\232\264\351\234\262.md" new file mode 100644 index 0000000000000000000000000000000000000000..a2ee885e99c1d1ca88fab87d40651003e0b1498c --- /dev/null +++ "b/\351\203\255\345\205\201\346\226\214/20240301-\345\257\274\345\205\245\346\250\241\345\235\227\345\222\214\346\232\264\351\234\262.md" @@ -0,0 +1,27 @@ +### 什么是模块化与模块 ? +1. 将一个复杂的程序文件依据一定规则(规范)拆分成多个文件的过程称之为 模块化 +2. 其中拆分出的 每个文件就是一个模块 ,模块的内部数据是私有的,不过模块可以暴露内部数据便便其他模块使用 + +### 暴露数据 +模块暴露数据的方式有两种: +1. module.exports = value +2. exports.name = value + ``` +1. module.exports 可以暴露 任意 数据 +2. 不能使用 exports = value 的形式暴露数据,模块内部 module 与 exports 的隐式关系 +exports = module.exports = {} ,require 返回的是目标模块中 module.exports 的值 + ``` + + #### 导入(引入)模块 + require 使用的一些注意事项: +1. 对于自己创建的模块,导入时路径建议写 相对路径 ,且不能省略 ./ 和 ../ +2. js 和 json 文件导入时可以不用写后缀,c/c++编写的 node 扩展文件也可以不写后缀,但是一 +般用不到 +3. 如果导入其他类型的文件,会以 js 文件进行处理 +4. 如果导入的路径是个文件夹,则会 首先 检测该文件夹下 package.json 文件中 main 属性对应 +的文件, +如果存在则导入,反之如果文件不存在会报错。 +如果 main 属性不存在,或者 package.json 不存在,则会尝试导入文件夹下的 index.js 和 +index.json , +如果还是没找到,就会报错 +5. 导入 node.js 内置模块时,直接 require 模块的名字即可,无需加 ./ 和 ../ \ No newline at end of file diff --git "a/\351\203\255\345\205\201\346\226\214/20240302-fs\346\250\241\345\235\227\345\206\231\345\205\245.md" "b/\351\203\255\345\205\201\346\226\214/20240302-fs\346\250\241\345\235\227\345\206\231\345\205\245.md" new file mode 100644 index 0000000000000000000000000000000000000000..6a0b1ed2c72c684b9e4288bd620c98d403d89af3 --- /dev/null +++ "b/\351\203\255\345\205\201\346\226\214/20240302-fs\346\250\241\345\235\227\345\206\231\345\205\245.md" @@ -0,0 +1,51 @@ +## fs 模块 +fs 全称为 file system ,称之为 文件系统 ,是 Node.js 中的 内置模块 ,可以对计算机中的磁盘进行操 +作。 +- writeFile 异步写入 +- writeFileSync 同步写入 +- appendFile / appendFileSync 追加写入 +- createWriteStream 流式写入 +#### writeFile 异步写入 +语法: fs.writeFile(file, data[, options], callback) +参数说明: +file 文件名 +data 待写入的数据 +options 选项设置 (可选) +callback 写入回调 +返回值: undefined +``` +const fs = require('fs'); +//将 『三人行,必有我师焉。』 写入到当前文件夹下的『座右铭.txt』文件中 +fs.writeFile('./座右铭.txt', '三人行,必有我师焉。', err => { +//如果写入失败,则回调函数调用时,会传入错误对象,如写入成功,会传入 null +if(err){ +console.log(err); +return; +} +console.log('写入成功'); +}); + +``` +###### 同步写入大体一样只是没有callback参数 +#### appendFile / appendFileSync 追加写入 +appendFile 作用是在文件尾部追加内容,appendFile 语法与 writeFile 语法完全相同 +语法: +fs.appendFile(file, data[, options], callback) +fs.appendFileSync(file, data[, options]) +返回值: 二者都为 undefined +``` +fs.appendFile('./座右铭.txt','择其善者而从之,其不善者而改之。', err => { +if(err) throw err; +console.log('追加成功') +}); +fs.appendFileSync('./座右铭.txt','\r\n温故而知新, 可以为师矣'); +``` +#### createWriteStream 流式写入 +语法: fs.createWriteStream(path[, options]) +参数说明: +path 文件路径 +options 选项配置( 可选 ) +返回值: Object +##### 注意 +程序打开一个文件是需要消耗资源的 ,流式写入可以减少打开关闭文件的次数。 +流式写入方式适用于 大文件写入或者频繁写入 的场景, writeFile 适合于 写入频率较低的场景 diff --git "a/\351\203\255\345\205\201\346\226\214/20240303-fs\346\250\241\345\235\227\350\257\273\345\217\226.md" "b/\351\203\255\345\205\201\346\226\214/20240303-fs\346\250\241\345\235\227\350\257\273\345\217\226.md" new file mode 100644 index 0000000000000000000000000000000000000000..b1cc06ed8eaf60f351398fa80041005794e97949 --- /dev/null +++ "b/\351\203\255\345\205\201\346\226\214/20240303-fs\346\250\241\345\235\227\350\257\273\345\217\226.md" @@ -0,0 +1,37 @@ +### fs模块文件读取 +- readFile 异步读取 +- readFileSync 同步读取 +- createReadStream 流式读取 + +#### readFile 异步读取 +语法: fs.readFile(path[, options], callback) +参数说明: +path 文件路径 +options 选项配置 +callback 回调函数 +返回值: undefined +``` +const fs = require('fs'); + +fs.readFile('./座右铭.txt', 'utf-8',(err, data) => { +if(err) throw err; +console.log(data); +}); +``` +#### readFileSync 同步读取 +语法: fs.readFileSync(path[, options]) +参数说明: +path 文件路径 +options 选项配置 +返回值: string | Buffer +``` +let data2 = fs.readFileSync('./座右铭.txt', 'utf-8'); +``` +#### createReadStream 流式读取 +语法: fs.createReadStream(path[, options]) +参数说明: +path 文件路径 +options 选项配置( 可选 ) +返回值: Object + +