Nodejs的模块化
在我们日常进行web开发的过程中, 对于模块化总是跑不掉的, 各家的模块化有各家的实现方式, 百花齐放, nodejs遵循commonjs规范的模块化
-
把每一个文件都看做是一个模块
-
如果一个模块需要暴露一些数据或者功能供其他模块使用, 需要写上
module.exports = xxx
, 该过程称之为模块的导出 -
如果一个模块需要用到另一个模块导出的代码, 需要使用require(’…’)来引入, require函数的返回值就是索引模块暴露出的内容
-
模块中的所有全局代码产生的变量, 函数均不会造成全局污染, 仅在模块内使用
-
模块具有缓存, 第一次导入模块时就会缓存该模块, 之后再次导入同一个模块的时候, 直接使用之前的结果
-
每个模块可能被其他模块所依赖, 也可能会依赖于其他模块
module.exports和require的使用
我新建一个index.js
// index.js
const result = require('./test.js');
console.log(result); // 输出{ a: 100 }
然后我再新建一个test.js
// test.js
const a = 100;
module.exports = {
a
}
我们进入terminal, 执行index.js文件, 会发现打印出来的result
是一个对象, 因为我们在test.js中直接导出了一个对象, 对象中有个变量a
而如果我什么都不导出就光秃秃的写个a
的声明加赋值, 我在index.js中是拿不到任何东西的
// test.js
const a = 100;
// index.js
const result = require('./test.js');
console.log(result); // 输出{}
如图我们会看到输出的是空, 所以我们但凡想将变量或者数据供外部使用, 我们就要使用module.exports
对想让外界模块可使用的变量或者数据进行导出, 再到另一个模块中使用require
进行导入两者缺一不可
在test文件中, 我们想要导出啥, 我们就module.exports
啥, 比如我就想导出个a
// test.js
const a = 100;
module.exports = a;
// index.js
const result = require('./test.js');
console.log(result); // 输出的就是100
而本质上module.exports
就是一个对象, 我们可以通过modul