06-02-模块机制

什么是模块

(1).模块是啥?

在js中的模块化开发中,模块其实就是文件。模块和文件是一一对应的。一个模块就是一个文件。反之,一个文件对应于一个模块。模块是Node.js应用程序的基本组成部分。

(2).为什么需要模块

以前,我们的js都是在浏览器端来运行的。但是,现在不是在浏览中来运行js,而是在node环境中来运行js。我们的代码都是js代码,根本就没有html。如果编写如下代码,只会出错。实际上,以前,在浏览器端,js文件也不能相互引用。之所以不影响最终的开发,只是因为它借助了html文件来引入。在服务端情况就完全不一样。如果我们不能在js文件中引入js文件,开发将无法开展。
为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统。

(3).js模块化发展简史

在这里插入图片描述

在node.js中,一般都使用commonjs的模块化
在浏览器端,一般都使用es6的模块化方案
基于此,我们必须要掌握两种模块化方案:

  • CommonJS
  • Es6的模块化

模块化在服务端就是必须的,在js文件中引入js文件的唯一方式。
在浏览器端,模块化主要解决如下两大问题:

  • 避免全局变量污染
  • 更好的实现文件依赖

(4).具体表现为哪些文件?
在node中,如下三种文件都可以作为模块来引入

  • js文件,以.js作为后缀的
  • Json文件,以.json为后缀的
  • 基于C/C++的json扩展文件,以.node为后缀的。

在浏览器端,哪些文件可以作为模块引入?

  • js文件
  • css文件
  • 图片文件
  • vue文件

载入模块

核心模块

这是最简单的,因为核心模块是node自带。只需要传入模块的名称即可。

const http = require('http');
const fs = require('fs');

注意,常量的名称可以是随意的,但是为了语义,尽量和模块名称保持一致。不能再加任何和路径相关的写法,否则就出错了.

第三方模块

属于用户模块,是非核心。所以,必须要分两步完成:

  • 先下载 npm install
  • 然后使用require引入

下载
在这里插入图片描述
引入在这里插入图片描述
第三方模块和核心模块的引入写法是一模一样的,但是其原理是有区别的。
核心模块是已经被编译好了,本身就存在于内存中。
第三方模块,其实是放在当前的node_modules文件夹中的。

自定义模块

需要分成两步:

  • 第一步,需要定义一个模块
  • 第二步,引入自定义模块

第一步,定义一个模块,使用一个空文件作为模块
在这里插入图片描述

第二步,使用require引入
在这里插入图片描述
对于自定义模块,必须要使用相对路径来引入,必须是使用./或者…/开头。否则报错
最好加上后置
如果require的是文件夹名称,默认会引入该文件夹下的index.js文件
针对核心模块和第三方模块,千万不要画蛇添足加上.js后缀

自定义模块的实现

使用module.exports导出模块

module.exports 是一个全局变量。可以直接在js文件中对其赋值。
在使用require方法引入一个模块的时候,返回的就是module.exports。
module.exports默认是空对象。所以,针对一个空js文件,引入之后的结果是{}。

var title= "wangcai";
function NBAPlayer(name,age,sex) {
    this.name = name;
    this.age = age;
    this.sex = sex;
}
exports.title= title;		//这种使用的时候需要打点使用
module.exports = NBAPlayer;//相当于把NBAPlayer直接导出去,这种可以直接使用

exports对象

在CommonJS中,导出模块是通过module.exports来实现的。
在CommonJS中,使用requrie方法,得到的结果就是module.exports。
在CommonJS中,给module.exports起了一个别名exports。
在这里插入图片描述
这种写法是错误的。所谓的起别名,就是 相当于,定义了exports对象,然后将module.exports的值赋给它。

在这里插入图片描述
这么写为什么可以?
因为,此时只是给exports对象添加了新的属性,和module.exports还是指向同一个对象,相当于给module.exports添加了属性。
自己在导出模块的时候,尽量使用module.exports

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值