首先,在Node中,一个JS文件,就是一个模块,这个文件可能是JS、JSON 或者编译过的C/C++ 扩展。
1、引入
通过 require() 函数 引入外部的模块, 参数可以是一个文件的路径地址,这个路径,可以输相对路径,也可以是绝对路径, 注意必须以 ./ (当前) 或 ../ (上一级)开头, 不能使用缩写方式;举个最简单的栗子:
//m1.js
console.log("I'M m1.js");
//m2.js
require("./m1"); //只要文件名即可, 后缀的.js 可以省略
打开m2.js 实行了m1.js 的代码;
使用 require 引入模块后,该函数会返回一个对象,这个对象代表的就是引入的模块
如图:
2、导出
在node中,每个模块都是独立的运行在各自的函数中,并不是全局作用域,模块之间的变量及函数在其他模块中无法访问,上面是因为直接一句console.log() 可以直接被输出,但是要是通用其他模块的变量或函数等, 还需要使用 exports 外部模块需要引用什么,就把它设置为 exports 的属性即可;
//m1.js
exports.a="I'M aaa";
exports.fn=function () {
}
//m2.js
var M2=require("./m1.js");
console.log(M2);
如图:
3、模块标识
通过 require 函数 引入外部的模块时,使用的就是模块标识,也可以说是模块的名字,就是传递给 require() 的参数模块主要分为两大类, 核心模块 和 文件模块
核心模块: 是由node引擎提供的模块,核心模块的标识,使用的时候直接就是模块的名字即可
通过Npm或 cnpm 下载的包都放在node_modules文件夹里,使用时直接通过包名引入即可;
node在使用模块名字来引入模块时,它会首先在当前目录的node_modules中寻找是否含有需要的模块,
如果有,直接使用,没有会继续再上一级目录的node_modules里寻找,直到找到为止,
找寻的目录截至到磁盘的根目录,依然没有的话,就报错;
文件模块: 是由用户自己创建的模块,文件模块的标识,就是文件路径;
4、其他
node中没有window对象。window是浏览器的规范,并非js语言规范,所以在nodejs当然不能用。
不过nodejs有个类似的全局变量 ->, golgal
在全局创建的变量都被作为golgal 的属性,全局的方法也会作为golgal的方法保存。
在node中,每个模块都是被包装在各自的函数中,我们可以用arguments来检查一下:
(arguments,伪数组对象,可以用 arguments 对象检测函数的参数;)
如图:
简单解释下:
当node在执行模块中的代码时,它会自动的在代码的首尾处添加图中的代码
顶部:
function (exports, require, module, __filename, __dirname) {
结尾处:
}
中间部分就是我们自己写的代码;
参数的用处简单介绍下:
exports 用来将变量或函数暴露在外部使用
require 引入外部的模块
module 当前模块本身,exports就是module的属性
module.exports==exports ; //true
//exports只能用 .的方式向外部暴露变量,
exports.a="I'M aaa";
exports.fn=function () {}
//module.exports既可以通过.来赋值,也可以直接赋值
module.exports.aa="I'M aaa1";
//或
module.exports={
aa:"I'M aaa1",
fn:function () {
}
}
__filename 当前模块的完整路径
__dirname 当前模块所在文件见的完整路径
nodeJS 中文官网:http://nodejs.cn/