模块

1. 内置模块

NodeJS中内置了很多模块,可以直接用require来进行引用。

名字最好和模块的名字一样。

var http = require("http");

var qs = require("requrystring");

内置模块的引用使用require函数,require表示引用的意思。

2. 自定义模块

每一个js文件就是一个模块。

2.1 require谁就会运行谁

同级目录中有两个文件  test.js 2.js

test.js:

require('./2.js');
console.log('我是test.js文件里的语句')
 
2.js
console.log('我是2.js里的文件')
 
运行text.js

结论:require()谁,就会运行谁。

注意点:

require的文件中如果有异步语句,此时nodejs不会死等它结束,会返回执行主文件中的程序,如果文件读取完毕,执行回调函数。

可以连续require

如果循环引用  

如果A引用BB引用A会发生什么?

nodejs很智能,如果B重新引用了A,此时如同没有引用一样,会帮你自动抑制。

test.js:

require('./2.js');
console.log('我是test.js文件里的语句')
 
2.js
require('./test.js')
console.log('我是2.js里的文件')

js文件天生是隔离作用域的

test.js:

require('./2.js');
console.log('我是test.js文件里的语句.a的值是'+a)
 
2.js
var a=100
console.log('我是2.js里的文件.a的值是'+a)
程序报错
在2.js中定义的a,不能再test.js中使用

Node.js中,每个js文件是单独的作用域

 


如果我们想在test..js中使用2.js定义的a

可以使用exports.xx = xx的语法暴露

test.js

2.js

运行test.js

我们如果想要把变量或者函数向外暴露,此时可以使用exports.** = **向外暴露。

此时引用这个模块的文件将用等号来接收,等号左边的变量将自动成为exports对象。

使用module.exports暴露

如果js文件中,仅仅向外暴露一个东西,

使用exports.xx = xx很不方便

此时可以使用 module.exports =xx的写法

如果一个js文件要向外暴露多个变量、函数,此时exports.xx = xx;如果仅仅暴露一个东西,通常是构造函数,此时语法为module.exports = xx;

原文地址:https://www.cnblogs.com/kun666/p/9490947.html