问一:模块化?
在node中,一个js文件就是一个模块;
问二:如何定义一个模块文件
直接新建js文件即可
问三:怎么引用外部模块?
定义模块 02.module.js
console.log("我是一个模块,我是02.module.js");
定义模块 03.module.js,并引入02.module.js ,其中md就是引进来的02.module.js 需要访问变量,函数等,直接md.变量名称或者md.函数名称
var md = require("./02.module");
运行:右键运行 module.js 是会执行02.module.js 中的代码
注意路径问题:
require()可以传递一个文件的路径作为参数,node将会自动根据该路径来引入外部模块
这里路径,如果使用相对路径,必须以.或..开头
问四:如何在03.module.js中访问02.module.js中的变量或者是函数?
需要使用:
exports 来向外部暴露变
量和方法
02.module.js
exports.x = "我是02.module.js中的x"; exports.y = "我是y"; exports.fn = function () { };
03.module.js 访问
var md = require("./02.module"); console.log(md);
console.log("这是module中的变量x"+md.x);
console.log("这是module中的变量y"+md.y);
运行module.js 文件:
问五:普通引用js文件和node.js中引入文件的区别在于:普通引入的js文件相当于全部暴露,而node.js
引入,则在需要对外暴露的变量前用exports 关键字修饰,如果不用关键字修饰,直接在其他文件中访问则会报错。
问六:什么是模块标识?
模块分为两类:
1.核心模块(有由node引擎提供的模块,核心模块的标识就是,模块的名字)
2.文件模块 :由用户自己创建的模块,文件模块的标识就是文件路径(绝对路径,相对路径)
相对路径用.或者..开头
引入核心模块:
var fs = require("fs");
引入文件模块:
///02.module自己定义的模块 var md = require("./02.module");
问七:为什么说模块中的代码全都是被包装在一个看不见的函数中的?
正是因为被包装在一个函数中,所以在模块中var 定义的变量全部是局部变量,如果要被引入的文件使用,则
需要在定义变量的时候用 exprots 修饰,其他的文件才能访问;
验证如下:
新建04.module.js
代码如下
var a = 10; console.log(arguments.callee + "");
运行如下04.module.js 文件,控制台输出:模块中的代码被包裹在:
function (exports, require, module, __filename, __dirname) {
}这个函数中;
function (exports, require, module, __filename, __dirname) { var a = 10; console.log(arguments.callee + ""); }
exports:该对象用来将变量或函数暴露在外部
require:函数,用来引入外部的模块
module:就是当前模块本身,exports就是module的属性
console.log(exports==module.export); true 所以用
exports.y = "我是y"; 和
module.export.y="我是y"; 效果相同
__filename:当前模块的完整路径
C:\Users\lilichao\WebstormProjects\class0705\01.node\04.module.js
__dirname:当前模块的所在文件夹的完整路径
C:\Users\lilichao\WebstormProjects\class0705\01.node
问八:module.export和的区别export;
新建:helloModule.js模块:
写法一:
module.exports.name = "孙悟空"; module.exports.age = 18; module.exports.sayName = function () { console.log("我是孙悟空~~~"); };
写法二:
module.exports = { name:"猪八戒", age:28, sayName:function () { console.log("我是猪八戒"); } };
写法三:
exports = { name:"猪八戒", age:28, sayName:function () { console.log("我是猪八戒"); } };
在新建05.Module.js中访问:
var hello = require("./helloModule"); console.log(hello.name); console.log(hello.age); hello.sayName();
运行结果是写法一,写法2可以访问,写法三在05.Module.js中执行会报错
区别:
exports 和 module.exports
- 通过exports只能使用.的方式来向外暴露内部变量
exports.xxx = xxx
- 而module.exports既可以通过.的形式,也可以直接赋值
module.exports.xxx = xxxx
module.exports = {}