node笔记

80 阅读3分钟

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 来查看全局安装路径;