02nodeJS中使用的模块化规范commonJS
来源:互联网 发布:网络考试系统破解版 编辑:程序博客网 时间:2024/05/22 21:17
导航:
1、模块化
2、前端模块化AMD和CMD
3、commonJS规范
内容:
一、模块化
如果你学过java,那么JS中的模块化就跟定义的一个个*.java文件是一样的,使用时,用import即可;如果你学过c/c++,模块化就是一个个.cpp文件,使用时include就行。
目前通行的JavaScript模块规范主要有: AMD,CMD, CommonJS。其中,AMD,CMD专注于 Web 浏览器端,CommonJS 则专注于服务器端。
1、为什么要使用模块化
举例说明:假设在a.html中包含了若干了js文件,如:
<script src="1.js"></script>
<script src="2.js"></script>
<script src="3.js"></script>
这段代码依次加载多个js文件。
缺点:
1)、js文件之间存在依赖关系,因此必须严格保证加载顺序。依赖性最大的模块一定要放到最后加载,当依赖关系很复杂的时候,代码的编写和维护都会变得困难。由模块化规范来完成。
2)、a.html文件并不是直接使用所有的js文件。如:a.html直接需要的是3.js文件的代码。而3.js文件里需要2.js里的代码,2.js里需要1.js文件的代码。这样就会显得职责不够明确,应该是,自己对自己需要依赖的文件进行引入。即a.html中只引入3.js文件,而3.js中引入2.js,2.js中引入1.js,这样显得职责清晰分明,而以前JS语言本身和环境不具备js文件引入js文件的能力,所以就需要使用模块化规范完成这个功能。
2、使用模块化:
模块化一般使用时,有两步:第一:定义模块(*.js文件),第二:使用模块,即引入*.js文件。如果你使用过java,c++或者c#的话,就非常好理解了。这个模块化,只是由于JS语言本身和执行环境以前不具备这样的能力。
类比java语言:
1)、定义模块:写一个 *.java文件
2)、使用模块:import *.java;
类别C++语言:
1)、定义模块:写一个*.cpp文件
2)、使用模块:include “*.cpp”
二、前端模块化(仅做回顾):AMD和CMD
1、AMD:
第二个参数:是当前模块的代码
格式:require([加载模块名], function (模块的返回值){
加载完模块后,执行的代码。});
var name = 'Byron';var age = 100;function printName(){console.log(name);}function setAge(transAge){age = transAge;}function getAge(transAge){return age;}return {printName: printName,setAge:setAge,getAge:getAge});};
<script type="text/javascript">// 加载模块require([‘person’], function (my){ //模块加载完成后执行的函数my.printName();my.setAge(80);console.log(my.getAge());});</script>
注意:以上引入js文件时,没有使用script标记的src属性,而是使用require函数(当然,需要下载require.js文件,然后在html中引入)。
2、CMD:
就是Common Module Definition,中文名是 通用模块加载规范. SeaJS是一个遵循CMD规范的JavaScript模块加载框架,在使用CMD时,需要先下载seaJS。
define(function(require,exports,module){let t = require(“m01”);//相当于<script src=“m01.js”></script>exports.sayHello = function(str) {alert(“hi,亲!”);};});
- require:模块的依赖关系
require函数的参数m01是要引入的模块名(m01.js),赋给的变量t是个对象。
- exports:模块的输出
exports.sayHello是对外公开的函数。即如果需要对外公开函数,就用exports参数的属性方式。2)、使用模块:
seajs.use(" sayHi ",function(say){$("#btn01").click(function(){say.sayHello("box","Hello SeaJS!");});});表示加载模块sayHi(即引入sayHi.js文件),
- function的参数say表示模块对应的对象,即say就代表sayHi。
- sayHello函数,是定义时,用exports对象的属性输出的函数。
a模块依赖b模块,b模块依赖c模块的代码格式a.jsdefine(function(require,exports,module){var b = require(“b");………………});b.jsdefine(function(require,exports,module){var c = require(“c");………………});c.jsdefine(function(require,exports,module){………………});
三、后端模块化:commonJS规范
//定义:var p = {id : "007",name :"张三丰",work:function(str){return this.name+"在努力地敲代码";},add:function(n1,n2){return n1+n2;}}//模块接口暴露(直接对外公开整个对象)module.exports = p;//如果只是公开某个函数://module.exports.work = p.work;
- 02nodeJS中使用的模块化规范commonJS
- CommonJS,AMD模块化规范
- NodeJS学习二CommonJS规范
- CommonJS模块规范与NodeJS的模块系统底层原理
- CommonJS包规范与NodeJS的包管理工具NPM
- JavaScript模块化规范commonJs、AMD、CMD
- javascript模块化编程:CommonJS和AMD规范
- 模块化开发,AMD,CMD,Commonjs规范
- JS模块化规范:AMD/CMD/CommonJS
- 使用 AMD、CommonJS 及 ES Harmony 编写模块化的 JavaScript
- 使用 AMD、CommonJS 及 ES Harmony 编写模块化的 JavaScript
- Javascript模块化编程系列三: CommonJS & AMD 模块化规范描述
- CommonJS的模块规范
- CommonJS规范和Nodejs模块机制
- 针对模块化,CommonJS规范,require原理和包查找机制等的整理
- 前端面试之模块化-2、AMD规范和CommonJS规范
- JavaScript、CommonJS、NodeJs的关系
- Web前端 之 CommonJS 模块化规范与Node实现
- Mysql的正则匹配与常用匹配符_Mysql必知必会学习记录01
- 算法第15周Wildcard Matching[hard]
- Leetcode 740. Delete and Earn
- C++primer学习 12.17
- 机房重构之退卡——触发器增强版
- 02nodeJS中使用的模块化规范commonJS
- myeclipse的com.mysql.jbdc.Driver异常和java.lang.NullPointerException异常解决方法
- Python实现--贪心算法与活动安排问题
- 制作一个购物车函数
- 关于OSG 帮助文档。
- App启动那点事整理啊
- 页面中文乱码的处理
- 处理 1 counts of IllegalAnnotationExceptions Class has two properties of the same name "ITEM"
- MVP注册登录