一.什么是模块化开发

  • 将软件产品看作为一系列功能模块的组合
  • 通过特定的方式实现软件所需模块的划分、管理、加载

二.模块化开发好处

  • 解决命名冲突问题
    添加命名空间YUI 、EXTJS—可以从一定程度上解决命名冲突,但是增加了开发人员记忆冗长api的难度。

  • 解决文件依赖问题
    团队变大后,维护大量的文件依赖关系非常困难,公共模块的维护、升级很不方便。

三.实现规范

  • 服务器端规范
    CommonJS—nodejs
  • 浏览器端规范
    AMD—RequireJS 国外相对流行
    CMD—SeaJS 国内相对流行

四.具体实现(SeaJs为例)

RequireJS 与SeaJs实现方式大同小异,这里就以SeaJs为例介绍了

1. 在页面中引入sea.js文件

<script src="node_modules/seajs/dist/sea.js"></script>

2.定义一个主模块如calculator.js, 在主模块文件中通过define的方式定义一个模块,并导出公共成员

// 定义一个模块,遵循Seajs的写法
define(function(require, exports, module) {// 此处是模块的私有空间// 定义模块的私有成员// 载入01-convertor模块var convertor = require('./01-convertor.js');function add(a, b) {return convertor.convertToNumber(a) + convertor.convertToNumber(b);}function subtract(a, b) {return convertor.convertToNumber(a) - convertor.convertToNumber(b);}function multiply(a, b) {return convertor.convertToNumber(a) * convertor.convertToNumber(b);}function divide(a, b) {return convertor.convertToNumber(a) / convertor.convertToNumber(b);}// 暴露模块的公共成员exports.add = add;exports.subtract = subtract;exports.multiply = multiply;exports.divide = divide;
});

3. 在页面的行内脚本中通过seajs.use(‘path’,fn)的方式使用模块

  seajs.use('./01-calculator.js', function(calculator) {});

五.其他介绍

require

require 用来获取指定模块的接口。

define(function(require, exports, module) {var convertor = require('./01-convertor.js');}

require.async

用来在模块内部异步加载一个或多个模块。

导出成员的方式

  • module.exports
  • exports.xxx
  • return

配置

seajs.config({// 别名配置alias: {'es5-safe': 'gallery/es5-safe/0.9.3/es5-safe','json': 'gallery/json/1.0.2/json','jquery': 'jquery/jquery/1.10.1/jquery'},// 路径配置paths: {'gallery': 'https://a.alipayobjects.com/gallery'},// 变量配置vars: {'locale': 'zh-cn'},// 映射配置map: [['http://example.com/js/app/', 'http://localhost/js/app/']],// 预加载项preload: [Function.prototype.bind ? '' : 'es5-safe',this.JSON ? '' : 'json'],// 调试模式debug: true,// Sea.js 的基础路径base: 'http://example.com/path/to/base/',// 文件编码charset: 'utf-8'
});

这里举一个别名的例子

    seajs.config({alias: {// 变化点封装calc: './modules/calc.js',}});seajs.use('calc');

SeaJS和RequireJS对比

  • 对于依赖的模块,AMD是提前执行,CMD是延后执行
  • CMD推崇依赖就近,AMD推崇依赖前置
  • AMD的API默认是一个当多个用,CMD的API严格区分,推崇职责单一

javascript模块化开发相关推荐

  1. JavaScript模块化开发整理

    在网上已经有很多关于模块化开发的文章了,这里还是按照自己的理解来整理一下. 随着项目文件的越来越大和需求的越来越贴近现实(我发现现在客户不如:一个领导说我要审批你们报上来的资料,系统发布以后用的还不错 ...

  2. JavaScript模块化开发(一)基础知识

    2019独角兽企业重金招聘Python工程师标准>>> 随着前段JavaScript代码越来越重,如何组织JavaScript代码变得非常重要,好的组织方式,可以让别人和自己很好的理 ...

  3. JavaScript模块化开发的演进历程

    写在前面的话 js模块化历程记录了js模块化思想的诞生与变迁 历史不是过去,历史正在上演,一切终究都会成为历史 拥抱变化,面向未来 延伸阅读 - JavaScript诞生(这也解释了JS为何一开始没有 ...

  4. JavaScript模块化开发技术概述

    2019独角兽企业重金招聘Python工程师标准>>> 什么是模块化开发? 前端开发中,起初只要在script标签中嵌入几十上百行代码就能实现一些基本的交互效果,后来js得到重视,应 ...

  5. 前端JAVASCRIPT模块化开发

    什么是模块化开发? 前端开发中,起初只要在script标签中嵌入几十上百行代码就能实现一些基本的交互效果,后来js得到重视,应用也广泛起来了,jQuery,Ajax,Node.Js,MVC,MVVM等 ...

  6. JavaScript 模块化开发入门

    JS 为什么要模块化 JavaScript 语言最初设计的主要作用仅仅是用来验证表单输入的有效性,为Web页面添加一些动画效果等,并不包含太多的高级语言的特性,此时通常直接在HTML页面中编写简单的 ...

  7. 初探Javascript模块化开发

    随着简单网页逐渐变成交互复杂的网站应用,网页上的Javascript代码也变得越来越庞大,越来越复杂.加之随即而来的多人协作分工的开发方式,每个人只负责其中一个或者几个很小的功能模块,最终必须通过把各 ...

  8. Node 之 JavaScript 模块化开发

    目录 一.模块化 1. 概念 2. 历史 01 - 早期 02 - 现在 3. 问题 问题一 01 - 定义 foo.js 02 - 定义 bar.js 03 - 定义 html 页面 问题二 二.C ...

  9. JavaScript 模块化简述

    JavaScript 模块化简述 前言 关于模块化,最直接的表现就是我们写的 require 和 import 关键字,如果查阅相关资料,就一定会遇到 CommonJS .CMD AMD 这些名词,以 ...

最新文章

  1. 因买不到RTX 3090,小哥自己搭建了一个专业级机器学习工作站
  2. (五)Redis在项目中应用
  3. 关于高级导数的一个不等式估计
  4. 对于我今后人生受益匪浅的几句话
  5. htmlplay前端编辑器下载_2019年最好用的代码编辑器推荐
  6. 物联网可能面临灾难性安全风险
  7. 数据库中常见的面试问题(转)
  8. Java、JavaScript、C/C++、Python分别用来开发什么?
  9. npm安装vant(有赞UI)框架 - cmd篇
  10. 2017年进口食品代理加盟排行榜
  11. 一年月份大小月口诀_《认识年月日》大小月记忆法知识点教学设计
  12. smith 图中Q值和阻抗匹配
  13. 【Lua】ToLua逻辑热更新
  14. 腾讯安卓开发面试,腾讯+字节+阿里面经真题汇总,Android篇
  15. jd+jbe修改jar包中class文件
  16. 如何用计算机制作统计图,如何在EXCEL里做条形统计图?
  17. D.G.Pals游戏5月23日晚9点新上线,布局Cronos协议Panterra游戏生态
  18. 制作一款简易的可燃气体报警器,你来吗?
  19. 怎样增加混凝土粘聚性_如何改良中低强度等级混凝土粘聚性?看了这篇文章不用愁!...
  20. 一款免费、可私有部署的企业网盘

热门文章

  1. [转贴]日本呆了三年 我眼中的日本印象!
  2. 网络营销中邮件营销的优势
  3. 第三章 计算机图形处理,计算机图形学第三章-1(Basic).ppt
  4. vue实现web端飘窗组件
  5. 远程连接数据库(SQLServer)
  6. TeamViewer在Centos7的安装和使用方法
  7. 玩客云Armbian
  8. python构造字典_python字典构造
  9. JVM性能监控工具 - jhat
  10. matlab低通滤波