NodeJS全集(二)

117 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第12天,点击查看活动详情

Node 模块化

模块的查找

我们使用require进行模块导入,所填入的参数是一个路径。可以使用绝对路径,并且其他的路径写法都会转为绝对路径。

相对路径有两种写法./../,路劲相对于当前模块。同样的最后会转为绝对路径。
使用相对路径的时候

  1. 会先检查是不是内置模块,如:fs、path...
  2. 检查目录中的 node_modules
  3. 检查上级目录中的 node_modules
  4. 转化为绝对路径

关于后缀名,如果不提供后缀名,会自动补全。补全顺序是 js、json、node、mjs

在 package.json 配置中,可以通过 main 字段配置入口文件,默认值为 index.js。表示包的默认入口。导入或执行包时若仅提供目录,则会通过 main 补全入口。

module 对象

在控制台输出module对象。里面除了我们常用 exports 之外还有一些其他的属性。

  • id:模块的绝对路径
  • path:表示当前模块目录
  • paths: 表示查找过程的路径
  • parent: 导入该模块的模块(父模块)信息
    • loaded:表示模块是否加载完成
    • children:导入了的模块(子模块)

在控制台输出require对象。

  • resolve 它返回的是文件的绝对路径。
  • extensions 表示根据后缀名来进行响应的处理模式。
  • cache:表示模块的缓存,模块 id 作为属性名。

当执行一个模块或使用 require,会将模块放置在一个函数环境中,从而实现模块化变量不会污染全局。

ES 模块化

开启ES 模块化:文件后缀名为 .mjs 或 最近的 package.json 文件中 type 的值是 module。

目前 ES 模块化仍然处于试验阶段。在 Node 中模块化要么是 commonjs 要么是 es,由于 commonjs 模块化执行在函数环境中,es模块化不是在函数环境,所以不能混杂使用。webpack 会将所有的模块化转化为函数环境,所以我们才能在 webpack 中使用两种模块化。

当使用 ES 模块化时,必须要添加 --experimental-modules 标记

Node 内置模块

介绍 Node 的前置知识之后呢,我们开始真正的学习如何使用 Node。

  • OS:获取操作系统的信息
    • EOL:一行结束的分隔符,不同的操作系统各不相同。
    • arch:获取cpu的架构名称。
    • cpus:获取cpu每个核的信息。
    • freemem:得到当前还剩多少空闲内存,单位是字节。
    • homedir:获取用户目录。
    • hostname:获取主机名。
    • tmpdir:获取操作系统的临时目录路径,不同的操作系统各不相同。
  • path:配置路径信息
    • basename:获取整个路径最后一部分。
    • delimiter:每个部分的分隔符。
    • sep:获取当前操作系统的分隔符。
    • dirname:获取前置路径。
    • extname:获取后缀名。
    • join:将多段路径拼接。
    • normalize:获取标准路径。
    • relative:将两个路径得到相对路径关系。
    • resolve:得到绝对路径。
  • url:url地址处理
    • URL:得到地址解析后的详细信息。
    • format:将路径配置对象转换成url字符串。
  • util:内置工具库
    • callbackify:将异步promise转换为回调模式。
    • promisify:将回调模式转换为异步模式。
    • inherited:实现构造函数继承。
    • isDeepStrictEqual:将两个对象深度比较,使用的是严格相等。