美文网首页
高级4-模块化

高级4-模块化

作者: 24_Magic | 来源:发表于2017-04-10 01:42 被阅读25次

1. 为什么要使用模块化?

最主要的目的:
解决命名冲突
依赖管理

其他价值:
提高代码可读性
代码解耦,提高复用性

2.CMD、AMD、CommonJS 规范分别指什么?有哪些应用

CommonJS: 服务器端的模块化

流程:
1.定义模块 根据CommonJS规范,一个单独的文件就是一个模块。每一个模块都是一个单独的作用域,也就是说,在该模块内部定义的变量,无法被其他模块读取,除非定义为global对象的属性
2.模块输出: 模块只有一个出口,module.exports对象,我们需要把模块希望输出的内容放入该对象
3.加载模块: 加载模块使用require方法,该方法读取一个文件并执行,返回文件内部的module.exports对象
示例:

//定义模块a.js
function sayHello(){
    console.log('HelloWorld!')
}
module.exports = {
    sayHello: sayHello
}

//同一路径b.js中加载该模块
var sayModule = require('./a.js')
sayModule.sayHello()

AMDAsynchronous Module Definition,异步模块定义,一个在浏览器端模块化开发的规范

requireJS主要解决两个问题:
1.多个js文件可能有依赖关系,被依赖的文件需要早于依赖它的文件加载到浏览器
2.js加载的时候浏览器会停止页面渲染,加载文件越多,页面失去响应时间越长
示例:

//定义模块a.js
define(['dependency'], function(){
    function sayHello{
        console.log('HelloWorld!')
    }
    return {
        sayHello: sayHello
    }
})

//加载该模块
require(['a'], function(my){
    my.sayHello()
})

优点: RequireJS是前端模块化工具的老牌,它在推广过程中推出了AMD的开发理念,解放了生产力,在推出初期拥有不可磨灭的影响力,同时在它的发展过程中推出了许多插件,促进了整个生态的发展,也为广大前端开发者提供了极大的便利。

缺点: 在多个文件同时加载的过程中,会产生过多请求,浪费网络资源,降低性能;必须引入require.js文件,对于轻量级应用而言,尤其是移动端项目,未免有些臃肿庞大。

CMDCommon Module Definition,通用模块化定义,CMD规范是国内发展出来的,就像AMD有个requireJS,CMD有个浏览器的实现SeaJS,SeaJS要解决的问题和requireJS一样,只不过在模块定义方式和模块加载(可以说运行、解析)时机上有所不同

//定义模块a.js
define(function(require, exports, module){
    var $ = require('jquery.js')    //接受其他模块的接口
        console.log($(window).width())    //需要jquery时加载
    exports.init = function(){
        //实现代码
    }
        var sayHello = require('sayHello.js')    //需要sayHello时加载
        console.log('sayHello.name'+'loaded')
})
//加载模块
<script src='sea.js'></script>
<script>seajs.use(['a.js']), function(my){
    my.init()
}</script>

优点: CMD规范推崇依赖后置,我们可以在需要使用模块的地方再使用引入语句 require,更符合人的自然思维,而不需要像Require.js一样在定义一个模块的时候就把依赖写上(新版本的RequireJS好像也可以依赖后置了)。

缺点: sea.js的文档不完善,社区衰落。
3.
代码
demo

相关文章

  • 高级4-模块化

    1. 为什么要使用模块化? 最主要的目的:解决命名冲突依赖管理 其他价值:提高代码可读性代码解耦,提高复用性 2....

  • 高级任务4-模块化

    为什么要使用模块化? 解决命名冲突在浏览器运行的 js 实际上会合并代码挂载到全局对象(window)下,虽然有匿...

  • 基础4-高级-注解

    JDK内置注解 自定义注解

  • 面试涉及的知识点

    csshtml重点:javascript(闭包,作用域,高级特性) 重点:es6 async ,作用域,模块化...

  • 学习笔记TF054:TFLearn、Keras

    元框架(metaframework)。 TFLearn。模块化深度学习框架,更高级API,快速实验,完全透明兼容。...

  • Javascript 高级模块化

    我们发现在一个正常的项目中,我们要 在页面上导入大量 js 文件,jQuery 文件,jQuery 各种插件...

  • Javascript高级模块化

    RequireJS 是一个非常小巧的 javascript 模块载入框架,是AMD(Asynchronous Mo...

  • 进阶学习4-函数/模块化

    总结 项目描述备注全局变量修改关键字:gloab作用域:全局局部变量/作用域:函数内部嵌套函数变量修改关键字:no...

  • python工程师学习路线图

    1-python基础及高级 2-数据库与版本控制等 3-前端与移动端开发 4-数据爬虫 5-web服务器开发 6-...

  • Python 核心编程(第2版)

    第1章 欢迎来到 Python 世界 Python 提倡简洁的代码设计、高级的数据结构和模块化的组件。Python...

网友评论

      本文标题:高级4-模块化

      本文链接:https://www.haomeiwen.com/subject/kvnqattx.html