JavaScript CommonJS

版权声明:本文为simorel原创文章,未经simorel允许不得转载。 https://blog.csdn.net/Simoral/article/details/88573465

CommonJS


系列文章

这是JavaScript系列文章:



简介

  1. 输出
    在Node中,每个js文件都相当于一个独立的‘’,域外和域内互不干涉,但是我们想要访问属于域内的变量或者函数,就需要人为添加标识暴露出来。
    这个标识:
    module 当前模块,对象类型
    exports 是module的属性,是实际对外的接口 module.exports
    module.export = app => {}
  2. Node中引用某个模块
    const example = require('./example.js');
  3. CommonJS特点
    1. 仅在模块作用域内有效
    2. 多次加载的模块仅加载一次,并缓存,之后会从缓存读取模块
    3. 模块加载顺序和引用顺序相对应

module

module对象

属性 对象 说明
id String 模块标识符,绝对路径模块名
filename String 模块文件名,带有绝对路径
loader Boolean 模块是否已经完成加载
parent Object 调用此模块的模块
chileren Array 该模块调用的其他模块
exports - 对外输出的变量或者函数

module.exports

module.exports 其实就像对接口,其他模块实际调用的就是这个 module.exports 变量

exports

  1. exports 本质上是Node实现的 module.exports 的简写模式: var exports = module.exports;

  2. 因此,不能直接将某个值赋值给 exports
    错误示例:

    exports = function(x) {console.log(x)};
    
  3. 只给 module.exports 赋单一值时,就意味着 exports 不会再起作用
    module.exports = function (x) { console.log(x);};

  4. 为了避免混淆,最好的办法是放弃 exports

require

require用于加载模块文件,若未读取到指定模块则会报错

调用自身

// initial.js 文件
module.exports = function () {
	console.log('立刻执行该函数');
}

require('./initial.js')();  // 立即执行: "立刻执行该函数"

加载路径

require 加载的文件默认会添加 ‘.js’,
所以说:const test = require('./test'); = const test = require('./test.js');

开头 路径说明 示例代码 加载结果
/ 绝对路径 require('/app/test.js') /app/test.js
./ 相对路径,相对于当前执行js的文件的同层文件路径 require('./test.js') 同层test.js
- 默认提供的是核心模块,或者node_module内的模块 require('./test.js') 同层test.js
- 路径 先找到路径首文件,在以此为基础查找 require('app/test.js') 先找到app文件夹,在此基础上找test.js
- 若上面都未查找到,则会在未添加后缀的引用尝试添加其他后缀(.js/.json/.node)继续查找 - -

文件夹下加载规则

加载规则

参考链接

[1] 阮一峰, CommonJS规范

猜你喜欢

转载自blog.csdn.net/Simoral/article/details/88573465