一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第12天,点击查看活动详情。
Node 模块化
模块的查找
我们使用require进行模块导入,所填入的参数是一个路径。可以使用绝对路径,并且其他的路径写法都会转为绝对路径。
相对路径有两种写法./ 或 ../,路劲相对于当前模块。同样的最后会转为绝对路径。
使用相对路径的时候
- 会先检查是不是内置模块,如:fs、path...
- 检查目录中的 node_modules
- 检查上级目录中的 node_modules
- 转化为绝对路径
关于后缀名,如果不提供后缀名,会自动补全。补全顺序是 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:将两个对象深度比较,使用的是严格相等。