CommonJs

模块化模式

模块化:将代码拆分为独立的块,然后将这些块连接起来通过模块模式来实现。使用模块化的方式更加方便代码的维护,使代码更利于复用

这种模式背后的思想很简单:把逻辑分块,各自封装,相互独立,每个块决定对外暴露什么,同时自行决定引入执行哪些外部代码。

实际操作中,将不同的模块用单独的js文件封装,(ES6以前)通过exports.property的方式向外输出指定代码。又通过require(文件路径)的方式引入文件。

CommonJs

在ES6模块化规范推出之前,浏览器原生不支持模块的行为,ECMAScript同样不支持模块。社区制定了一些模块加载方案,最主要的有 CommonJS 和 AMD 两种。前者用于服务器,后者用于浏览器。

CommonJs主要在服务器端实现代码模块化组织,所以在Node.js中采用 CommonJS 模块规范
也可以定义浏览器中使用的模块依赖,CommonJs语法不能在浏览器中直接运行

模块依赖

CommonJs模块定义使用require( )传递一个文件路径来指定依赖,返回一个对象。即是指定引入哪些执行的代码,node会根据该路径引入模块,如果使用相对路径,必须以 . 或者 . . 开头

模块定义

在每一个模块定义的代码都是在包装在一个函数中,所以这些实际上在函数内部的变量无法在外部得以访问。而在CommonJs中使用exports对象定义自己的公共API,即使定义那些向外暴露的代码

模块标识

使用require( )引入外部模块的方式就是利用模块标识
核心模块:模块名字作为标识
文件模块:用户自己创建的模块,要引入文件的路径

演示

// 01.js 即是模块01
console.log('hello world!')
exports.a=35,
exports.one=function(a,b){
  return a+b
}

// 02.js,即是模块02
let sa=require('./01');       //引入模块01,01属于文件模块,此处使用的是文件地址的相对路径
console.log(sa)             //require()返回的是一个对象 { a: 35, one: [Function (anonymous)] }
console.log(sa.one(32,326))   //调用模块a中的one()方法,前提是one()方法要设置向外暴露
let f=require('fs')           //核心模块,node内置的,模块标识直接使用模块名称即可
console.log(f)

最后

ES6 在语言标准的层面上,实现了模块功能,而且实现得相当简单,完全可以取代 CommonJS 和 AMD 规范,成为浏览器和服务器通用的模块解决方案。

实际中考虑和使用较多的是ES6模块化功能

posted @ 2021-01-10 11:32  Serenpity  阅读(66)  评论(0编辑  收藏  举报