摘要:事实上已经出现了模块规范,如果使用的模块规范是无需环境的。因此,需要将规范和的模块规范区分开来。三模块规范的好处模块规范很好地解决变量污染问题,每个模块具有独立空间,互不干扰,命名空间等方案与之相比相形见绌。
写在前面:
一个文件就是一个模块。
另外本文中的示例代码需要在node.js环境中方可正常运行,否则将出现错误。事实上ES6已经出现了模块规范,如果使用ES6的模块规范是无需node.js环境的。因此,需要将commonJS规范和ES6的模块规范区分开来。
一、为什么制定CommonJS规范?
在后端,JavaScript的规范远远落后并且有很多缺陷,这使得难以使用JavaScript开发大型应用。比如:
没有模块系统 标准库较少 没有标准接口 缺乏包管理系统 列表内容
CommonJS规范的提出,主要是为了弥补JavaScript没有标准的缺陷,已达到像Python、Ruby和Java那样具备开发大型应用的基础能力,而不是停留在开发浏览器端小脚本程序的阶段。
二、CommonJS模块规范
CommonJS模块规范主要分为三部分:模块引用、模块定义、模块标识。
1、模块引用
如果在a.js文件中使用如下语句
var math=require("math");
意为使用require()方法,引入math模块,并赋值给变量math。事实上,命名的变量名和引入的模块名不必相同,就像这样:
var Math=require("math");
赋值的意义在于,a.js中将仅能识别Math,因为这是已经定义的变量,并不能识别math,因为math没有定义。
带路径和不带路径
上面例子中require的参数仅仅是模块名字的字符串,没有带有路径,引用的是a.js所在当前目录下的node_modules目录下的math模块。如果当前目录没有node_modules目录或者node_modules目录里面没有安装math模块,便会报错。
如果要引入的模块在其他路径,就需要使用到相对路径或者绝对路径,例如:
var add=require("./add.js")
上面例子中引入了当前目录下的add.js文件,并赋值给add变量。
2、模块定义
module对象:在每一个模块中,module对象代表该模块自身。 export属性:module对象的一个属性,它向外提供接口。
仍然采用上一个示例,假设add.js中的代码如下:
function add(num1,num2){ alert(num1+num2); }
尽管a.js文件引入了add.js文件,前者却仍然无法使用后者中的add函数,在a.js文件中add(3,5)这样的代码会报错,提示add不是一个函数。
add.js中的函数要能被其他模块使用,就需要暴露一个对外的接口,export属性用于完成这一工作。将add.js中代码改为如下:
exports.add=function (num1,num2){ alert(num1+num2); }
a.js文件就可以正常调用add.js中的方法,例如add.add(3,5)这样的调用能够正常执行,前一个add意为本文件中add变量代表的模块,后一个add是引入模块的add方法。
3、模块标识
模块标识指的是传递给require方法的参数,必须是符合小驼峰命名的字符串,或者以 . 、.. 、开头的相对路径,或者绝对路径。
三、CommonJS模块规范的好处
CommonJS模块规范很好地解决变量污染问题,每个模块具有独立空间,互不干扰,命名空间等方案与之相比相形见绌。
CommonJS规范定义模块十分简单,接口十分简洁。
CommonJS模块规范支持引入和导出功能,这样可以顺畅地连接各个模块,实现彼此间的依赖关系。
作者:夜色芜染
来源:CSDN
原文:https://blog.csdn.net/u012443...
版权声明:本文为博主原创文章,转载请附上博文链接!
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/98727.html
摘要:要想让模块再次运行,必须清除缓存。模块加载的顺序,按照其在代码中出现的顺序。最近参加了公司开展的一次培训,结构性思维培养。 序言 模块化,大家用vue,react等东西,都会接触到像exports,module.exports,export,export default,require,define,import等等字段,感觉很多人对于这些东西还是分不清,概念非常的模糊,便想着写这么一...
摘要:二模块化规范概述应用由模块组成,采用模块规范。模块化语法命令用于规定模块的对外接口,命令用于输入其他模块提供的功能。 前言 在JavaScript发展初期就是为了实现简单的页面交互逻辑,寥寥数语即可;如今CPU、浏览器性能得到了极大的提升,很多页面逻辑迁移到了客户端(表单验证等),随着web2.0时代的到来,Ajax技术得到广泛应用,jQuery等前端库层出不穷,前端代码日益膨胀,此时...
摘要:二模块化规范概述应用由模块组成,采用模块规范。模块化语法命令用于规定模块的对外接口,命令用于输入其他模块提供的功能。 前言 在JavaScript发展初期就是为了实现简单的页面交互逻辑,寥寥数语即可;如今CPU、浏览器性能得到了极大的提升,很多页面逻辑迁移到了客户端(表单验证等),随着web2.0时代的到来,Ajax技术得到广泛应用,jQuery等前端库层出不穷,前端代码日益膨胀,此时...
摘要:模块化总结最近重新复习的模块化的相关知识,总结一下,仅供自己理解和大家参考。模块化的优点可维护性根据定义,每个模块都是独立的。良好设计的模块会尽量与外部的代码撇清关系,以便于独立对其进行改进和维护。 模块化总结 最近重新复习的模块化的相关知识,总结一下,仅供自己理解和大家参考。 模块化的优点 可维护性:根据定义,每个模块都是独立的。良好设计的模块会尽量与外部的代码撇清关系,以便于独立...
摘要:所有依赖这个模块的语句,都定义在一个回调函数中,等到所有依赖加载完成之后前置依赖,这个回调函数才会运行。如果将前面的代码改写成形式,就是下面这样定义了一个文件,该文件依赖模块,当模块加载完毕之后执行回调函数,这里并没有暴露任何变量。 模块化是我们日常开发都要用到的基本技能,使用简单且方便,但是很少人能说出来但是的原因及发展过程。现在通过对比不同时期的js的发展,将JavaScript模...
阅读 3477·2021-11-25 09:43
阅读 1223·2021-09-08 09:45
阅读 2612·2021-09-07 09:59
阅读 1443·2021-08-09 13:45
阅读 3256·2019-08-30 15:54
阅读 640·2019-08-29 18:35
阅读 461·2019-08-29 17:18
阅读 960·2019-08-29 14:10