node的模块化结构(入门进阶二)

版权声明:转载请注明出处 https://blog.csdn.net/weixin_43586120/article/details/89923302

Node.js采用模块化结构,按照CommonJS规范定义和使用模块。模块与文件是一一对应关系,即加载一个模块,实际上就是加载对应的一个模块文件。

1、概述

1>  require命令用于指定加载模块,加载时可以省略脚本文件的后缀名。

//自定义模块
var circle = require('./circle.js');

// node的内置模块/第三方模块
var circle = require('./circle');//这时node会到模块的安装目录,去寻找已安装的模块

2>  有时候,一个模块本身就是一个目录,目录中包含多个文件。Node会在package.json文件中,寻找main属性所指明的模块入口文件。

//package.json
{
  "name" : "bar",
  "main" : "./lib/bar.js"
}
//模块的启动文件为lib子目录下的bar.js。当使用require('bar')命令加载该模块时,实际上加载的是./node_modules/bar/lib/bar.js文件
//如果模块目录中没有package.json文件,node.js会尝试在模块目录中寻找index.js或index.node文件进行加载。
var bar = require('bar/lib/bar.js')
//与上面写法效果同

模块一旦被加载以后,就会被系统缓存。如果第二次还加载该模块,则会返回缓存中的版本,这意味着模块实际上只会执行一次。如果希望模块执行多次,则可以让模块返回一个函数,然后多次调用该函数。

2、node的模块分为三类 : 内置模块、第三方模块、自定义模块。

1> 自定义模块

var circle = require('./circle');

2> 内置模块(node本身还提供了一系列功能模块,不用下载就可以使用,可与操作系统互动,加载时最优先加载)

http 提供HTTP服务器功能
url 解析URL
fs 与文件系统交互
querystring 解析URL的查询字符串
child_process 新建子进程
util 提供一系列实用小工具
path 处理文件路径
crypto 提供加密和解密功能,基本上是对OpenSSL的包装

内置模块的源码都在Node的lib子目录中。为了提高运行速度,它们安装时都会被编译成二进制文件。

3> 第三方模块(需要先下载才能使用)

// foo.js
module.exports = function(x) {
    console.log(x);
};
// index.js
var m = require('./foo');
m("这是自定义模块");
$ node index
这是自定义模块

module是整个模块文件的顶层变量,它的exports属性就是模块向外输出的接口。如果直接输出一个函数,那么调用模块就是调用一个函数。但是模块也可以输出一个对象。

// foo.js
var out = new Object();
out.print = (a)=>{
  console.log(a);
};
module.exports = out;
// index.js
var m = require('./foo');
m.print("这是自定义模块");

猜你喜欢

转载自blog.csdn.net/weixin_43586120/article/details/89923302