对模块化不是很了解,回答问题也是一知半解,这次把模块化的知识漏洞一起补掉
顾名思义,把一个整体拆分成若干模块,并能提供模块控制的方案就是模块化。很形象的例子就是积木,每一块积木就是一个模块,搭积木的过程就是模块化的过程。在js中,相应的就是js根据某些功能特性,编写成模块,然后应用控制模块的过程就是js的模块化。
在没有模块化的时代
js主要有5种模块化方案
node的模块系统采用的是CommonJS规范,每个模块都是一个独立的作用域,内部的变量,函数等都是私有的。module代表当前模块,外部访问内部的变量需要通过exports接口来完成。在外部通过require加载导出的模块。
//cal.js
function calculator(type, x, y) {
return types[type](x, y);
}
module.exports = {
calculator,
};
//index.js
const { calculator } = require('./js/cal.js');
console.log(`${a}+${b}=${calculator('add',a, b)}`);
模块在以一次加载后会被缓存,后续的调用,将返回缓存后的结果。需要注意的一个地方是,在一些一些不区分大小写的文件系统或者操作系统上,不同的解析文件名,对于node来讲就是不同的文件,所以,foo.js 与 FOO.js 即便他们是指向同一个文件,但是依然会被缓存两次。