Node.js
Node.js 诞生于 2009 年,Node.js 采用 C++语言编写而成,是 一个 Javascript 的运行环境。Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境 ,让 JavaScript 的运行脱离浏览器端,可以使用 JavaScript 语言 书写服务器端代码。
模块化
在 JavaScript 发展初期就是为了实现简单的页面交互逻辑,寥寥数语即,如今随着前端代码日益膨胀
这时候 JavaScript 作为嵌入式的脚本语言的定位动摇了,JavaScript 却没有为组织代码提供任何明显帮助,JavaScript 极其简单的代码组织规范不足以驾驭如此庞大规模的代码;
好处
- 提高了代码的复用性
- 提高了代码的可维护性
- 可以实现按需加载
CommonJS
-
CommonJS 就是为 JS 的表现来制定规范,因为 js 没有模块的功能所以 CommonJS 应运而生,它希望 js 可以在任何地方运行,不只是浏览器中。 1、创建自定义模块
-
引入一个文件 形式模块
home.js 执行文件
//通过require来引入 require("./a"); //注意一定要有"./",文件后缀可加可不加。 -
引入文件夹形式模块
- home.js 执行文件
require("./a"); //必须加"./"a 里的 index.js 文件,会自动查找文件夹下的 index.js 文件执行
- 当然也可以配置默认启动文件,在文件夹内新建 package.json 来指定执行文件
{ "name": "aModule", "version": "1.0.0", "main": "test.js" }
-
-
自定义模块的按需导出 通过 module.exports 导出; ___dirname , __filename
module.exports = { a: "我是a的值", b() { console.log("我是导出的b函数"); }, };引入导出文件
let mymodule = require("bModule"); console.log(mymodule.a); mymodule.b();或者 通过 exports 来导出
exports.fn = function () { console.log("我是fn函数"); };导入文件
let myfn = require("bModule").fn; myfn(); // 或者 通过解构赋值 let { fn } = require("bModule"); fn(); -
模块加载的优先级 ,先文件再目录;
内置模块
nodejs 内置模块有:Buffer,C/C++Addons,Child Processes,Cluster,Console,Crypto,Debugger,DNS,Domain,Errors,Events,File System,Globals,HTTP,HTTPS,Modules,Net,OS,Path,Process,Punycode,Query Strings,Readline,REPL,Stream,String De coder,Timers,TLS/SSL,TTY,UDP/Datagram,URL, Utilities,V8,VM,ZLIB;内置模块不需要安装,外置模块需要安装;
fs 模块
-
fs 是文件操作模块,所有文件操作都是有同步和异步之分,特点是同步会加上 "Sync" 如:异步读取文件 "readFile",同步读取文件 "readFileSync";
文件操作
// 异步读取 let fs = require("fs"); fs.readFile("1.txt", (err, data) => { if (err) { return console.log(err); } console.log(data.toString()); }); // 同步读取 let fs = require("fs"); let res = fs.readFileSync("1.txt"); console.log(res.toString()); // 文件写入 let fs = require("fs"); //flag配置 "a":追加写入,"w":写入,"r":读取 fs.writeFile("2.txt", "我是要写入的内容", { flag: "w" }, (err) => { if (err) { return console.log(err); } console.log("写入成功"); }); // 文件删除 fs.unlink("2.txt", (err) => { if (err) { return console.log(err); } console.log("删除成功"); }); // 复制文件 先读取文件再写入文件 function mycopy(src, dest) { fs.writeFileSync(dest, fs.readFileSync(src)); } mycopy("1.txt", "4.txt"); // 修改文件名,目录也可以通过 rename 来操作 fs.rename("1.txt", "5.txt", function (err) { if (err) { console.log(err); } else { console.log("修改成功"); } }); // 判断文件是否存在 fs.exists("4.txt", function (exists) { console.log(exists); });
buffer 缓冲区
buffer 的创建
- 直接创建
- 数组创建
- 字符串创建
- 乱码的处理
- buffer 转换 tostring
stream 流
流与数据处理方面密不可分
- 流的原理
- 流数据的获取
- pipe
- data
- end
- copy 的流方法实现
- 加载视图的流方法实现
npm 包管理器
NPM(Node Package Manager) 官网的地址是 npm 官网
- npm 常用指令;
- npm init:引导创建一个 package.json 文件
- npm help(npm -h) :查看 npm 帮助信息
- npm version (npm -v) : 查看 npm 版本;
- npm search:查找
- npm install (npm i):安装 默认在当前目录,如果没有 node_modules 会创建文件夹;
- npm install module_name -S 或者--save 即 npm install module_name --save 写入 dependencies
- npm install module_name -D 或者 —save-dev 即 npm install module_name --save-dev 写入 devDependencies
- npm install module_name -g 全局安装(命令行使用)
- 指定版本安装模块 npm i module_name @1.0 通过 "@"符号指定;
- npm update(npm -up):更新
- npm remove 或者 npm uninstall:删除
- npm root 查看当前包安装的路径 或者通过 npm root -g 来查看全局安装路径;