没有合适的资源?快使用搜索试试~ 我知道了~
1. 循环require 在JavaScript中,模块之间可能出现相互引用的情况,例如现在有三个模块,他们之间的相互引用关系如下,大致的引用关系可以表示为 A -> B -> C -> A,要完成模块A,它依赖于模块C,但是模块C反过来又依赖于模块A,此时就出现了循环require。 // a.js const B = require('./b.js'); console.log('B in A', B); const A = { name: 'A', childName: B.name, }; module.exports = A; // b.js const C = re
资源推荐
资源详情
资源评论
详解小程序循环详解小程序循环require之坑之坑
1. 循环循环require
在JavaScript中,模块之间可能出现相互引用的情况,例如现在有三个模块,他们之间的相互引用关系如下,大致的引用关系
可以表示为 A -> B -> C -> A,要完成模块A,它依赖于模块C,但是模块C反过来又依赖于模块A,此时就出现了循环
require。
// a.js
const B = require('./b.js');
console.log('B in A', B);
const A = {
name: 'A',
childName: B.name,
};
module.exports = A;
// b.js
const C = require('./c.js');
console.log('C in B', C);
const B = {
name: 'B',
childName: C.name,
}
module.exports = B;
// c.js
const A = require('./a.js');
console.log('A in C', A);
const C = {
name: 'C',
childName: A.name,
};
module.exports = C;
那JS引擎会一直循环require下去吗?答案是不会的,如果我们以a.js为入口执行程序,C在引用A时,a.js已经执行,不会再重
新执行a.js,因此c.js获得的A对象是一个空对象(因为a.js还没执行完成)。
2. 小程序中的坑小程序中的坑
在正常情况下,JS引擎是可以解析循环require的情形的。但是在一些低版本的小程序中,居然出现程序一直循环require的情
况,最终导致栈溢出而报错,实在是天坑。
那如何解决呢,很遗憾,目前并未找到完美的方法来解决,只能找到程序中的循环require的代码,并进行修改。为了快速定
位程序中的循环引用,写了一段NodeJs检测代码来检测进行检测。
const fs = require('fs');
const path = require('path');
const fileCache = {};
const requireLink = [];
if (process.argv.length !== 3) {
console.log(`please run as: node ${__filename.split(path.sep).pop()} file/to/track`);
return;
}
const filePath = process.argv[2];
const absFilePath = getFullFilePath(filePath);
if (absFilePath) {
resolveRequires(absFilePath, 0);
} else {
console.error('file not exist:', filePath);
}
/**
资源评论
weixin_38747025
- 粉丝: 129
- 资源: 1111
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功