6.Node.js模块系统简介

问一:模块化?

在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将会自动根据该路径来引入外部模块
这里路径,如果使用相对路径,必须以.或..开头

6.Node.js模块系统简介

 

 

 

问四:如何在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 文件:

6.Node.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 = {}
 
 
 
 
 
 

 

上一篇:vue3 使用百度地图,踩坑日历


下一篇:Node.js(3)— 模块和包 及其创建和使用