软件中的模块开发:
一个功能就是一个模块,多个模块可以组成完整应用,抽离一个模块不会影响其他功能的运行
require: node 和 es6 都支持的引入
export / import : 只有es6 支持的导出引入
module.exports / exports: 只有 node 支持的导出
Node.js的模块系统
CommonJS:它是一个致力于将 JavaScript 生态系统标准化的一个组织,它最出名的一个提议就是我们众所周知的 CommonJS modules ,Node 则是在本规范的基础上构建了他自己的模块系统,并且添加了一些自定义扩展。
-
CommonJS定义的模块分为: 模块标识(module)、模块定义(exports) 、模块引用(require)
-
Node.js规定一个 JavaScript文件 就是一个模块,模块内部定义的变量、函数、类默认情况下在外部无法得到。
-
模块内部可以使用exports对象进行成员导出, 使用require()方法导入其他模块
-
Node.js主要用于服务器端编程,无须考虑非同步加载的方式,选择CommonJS规范。
-
按照CommonJS规范要求,使用exports接口对象导出模块中的成员,通过require()方法将其他模块的输出加载到当前模块作用域中。
为什么要使用模块
- Node.js将可重用代码封装在各种模块中,减少应用程序的代码量,提高开发效率和代码的可读性。
- 模块打包代码的方式不会改变全局作用域,开发人员可以在被载入的模块文件中选择要对外暴露的方法和变量。
- 模块可以发布到npm仓库中与他人共享。
模块的使用
- require()方法,除了用来加载某个模块外,还可以拿到当前加载进来的文件模块导出的接口对象,因为在每个文件模块中都提供了一个exports对象,这个exports对象它是用来将某个方法或变量暴露(导出)出去。
- exports默认是一个空对象。
- 我们可以动态地为这个exports对象添加一些成员,我们现在要做的便是把所有需要被外部访问到的成员方法或属性挂载到这个exports对象当中,如果没有挂载到exports对象中的方法或变量,外部是无法访问的。
模块中成员暴露的方法
通过exports:
exports.变量名 主要用来暴露变量和函数
exports返回的是模块函数
//j1.js
var func1 = function() {
console.log("func1"