跳到主要内容

Node

异步请求

发请求一直是我不太会的事情,async await then 这些在我看来像天书一样。而普通的业务前端没有接口,又没办法自行测试学习。 最近发现了一个联系发送异步请求的好方法—— 用 apifox mock 数据,然后在 node 里面发请求

Node

模块化

  • 模块化是每种高级语言都应该具备的能力,类似 Java 中 的概念,目的是能够更好地复用轮子。
  • JS 原生没有提供模块化的解决方案,在前端发展的过程中,多种模块化的方案各显神通。最终,ES 规范组织制定了 ES6 模块方案,我认为是未来的主流。

node 默认情况下是 CommonJS 规范,但新版本的 Node 已经支持 ES6 模块规范,可以通过在 package.json 配置文件中 指定typemodule 或者使用 .mjs 作为 js 文件的拓展名,从而开启 ES6模块 特性

常见的模块化解决方案

方案名称代表实践备注
IIFEjQuery通过立即执行函数向全局变量 window 注入自己的设计的 api,有命名冲突的风险
AMDrequire.js基本不用
CMDSea.js基本不用
CommonJSnode服务端(非浏览器环境下)的模块化方案,使用方法 module.exports = {} 搭配 require()
UMD兼容以上多种方案的缝合怪,基本思路就是判断 可用性
ES6 模块真正的大一统,官方推出的语言层面的模块化方案,用 import export ,咱 js 村里终于通电了

Node 中具体是如何实现模块化呢?

首先,Node 将模 C:\Users\asus-pc\Desktop\project_for_test\package.json C:\Users\asus-pc\Desktop\project_for_test\src\index.js C:\Users\asus-pc\Desktop\project_for_test\src\index.htm 块分为两种——核心模块和文件模块

核心模块文件模块
由 node 提供,启动时已经编译为二进制加载进内存,速度非常快由用户编写,要经过 路径分析、文件定位、编译执行三个阶段
  • 路径分析

    前文提到核心模块已被加载进内存,无需路径分析、对于文件模块,根据向 require 传入的是路径或者标识符分为两种情况

    • 路径
      • 无论是绝对路径还是相对路径,都会被转化成为真实路径,并将结果放到缓存中,方便下次加载
    • 标识符
      • 类似作用域链、查找顺序为当前目录的 node_modules父级目录的 node_modules递归向上直至根目录 。肉眼可见,这种情况耗时最长。
  • 文件定位

    • .js.json.node
    • 如果有 package.json 就会从main 指定的文件入口开始查找
  • 编译执行

    • 值得注意的是,一旦被执行过,这些模块就会被加载进缓存,下次直接从缓存中查找,不在进行这一老长串流程。