网站首页 > 网络编程 > 其它综合 正文
写在前面:
一个文件就是一个模块。
另外本文中的示例代码需要在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模块规范支持引入和导出功能,这样可以顺畅地连接各个模块,实现彼此间的依赖关系。
- 上一篇: express的项目生成器
- 下一篇: 恩华云储存的登录、文件下载源码
猜你喜欢
- 2022-09-22 这些 ECMAScript 模块知识,都是我需要知道的
- 2022-09-22 Javascript:ES6-ES11(2)
- 2022-09-22 什么是设计模式(什么是设计模式,目标是什么)
- 2022-09-22 斗鱼发布首个开源框架Jupiter(斗鱼go框架)
- 2022-09-22 Javascript 中的 CJS、AMD、UMD 和 ESM 是什么?
- 2022-09-22 推荐10个可以提高开发效率的Javascript库(javascript函数库)
- 2022-09-22 common.js规范和es6规范以及cmd、amd规范(js umd规范)
- 2022-09-21 JavaScript框架的四个时代(技术革命的四个时代)
- 2022-09-20 前端模块化:CommonJS、AMD、CMD、ES6(前端模块化和组件化区别)
你 发表评论:
欢迎- 百度站内搜索
- 关注微信公众号
- 网站分类
-
- 网站公告
- 电子书书籍
- 程序员工具箱
- 编程工具
- 易语言相关
- 网络相关源码
- 图形图像源码
- 系统工具源码
- 易语言模块源码
- 易语言支持库
- 数据库类源码
- 易语言例程
- 易语言游戏开发
- 易语言模块
- 多媒体类源码
- 易语言资源网
- 易语言视频教程
- JS分析教程
- 易语言图文教程
- 易语言常见问题及笔记
- 工具源码
- 易语言版本
- 网络编程
- javascript
- PHP编程
- html
- 正则表达式
- 面试题
- nodejs
- 其它综合
- 脚本专栏
- python
- 按键精灵相关
- 按键精灵图文教程
- 按键精灵视频教程
- 按键精灵Q语言
- 按键精灵安卓版
- golang
- 游戏安全
- 火山相关
- 火山安卓软件
- 火山常见问题及笔记
- 火山安卓源码
- 火山视频教程
- 火山PC版本下载
- 火山PC视窗例程
- 互联网那些事
- 引流推广
- 项目揭秘
- 网络营销
- 营销软件
- QQ营销软件
- 娱乐软件
- 机器人插件
- 培训教程
- 技术教程
- 活动线报
- 数据库
- Redis
- Access
- MongoDB
- Mysql
- 问答
- 其它
- 易语言
- 需求
- 在线教程
- 多线程培训班
- 觅风易语言教程
- 模拟系列教程
- 集中营易语言教程
- 历史数据
- 随机tag
本文暂时没有评论,来添加一个吧(●'◡'●)