前端技术模块化篇

本文介绍了模块化开发的概念及其在前端开发中的应用,包括Node.js、grunt/gulp、webpack等工具的作用,以及AMD、CMD、CommonJS和UMD等模块化规范的特点。

模块化开发

开发环境前置软件

  • Node.js

    Node.js是前端打包压缩工具流的运行环境,同时提供了npm工具可以快捷地安装其它以Node.js为基础的软件。windows下有时候会发生安装后在CMD中无法运行node的情况,需要设置一下PATH变量。

  • grunt/gulp

    前端基础代码v1是采用CMD模块化开发,允许使用grunt或者gulp打包,同时雪碧图自动生成脚本也是采用gulp打包,建议至少安装gulp。
    npm install -g gulp

  • webpack

    前端基础代码v2采用的是Node.js的模块化开发方式,使用了webpack的各种loader,需要使用版本至少是v2.1.0-beta.12以上版本。

  • compass

    前端基础代码v1的雪碧图自动编译工具采用的是compass。

  • python

    CSS预编译工具采用了sass,sass预编译器基本上都需要依赖python,注意安装时也需要配置PATH变量

AMD规范

AMD规范定义了模块的基本定义方式,每个模块对应一个js文件,并且它的内容应该是这种形式:

require(id?, dependencies?, factory);

  • id 可选,表示模块的路径,也是模块的唯一标识
  • dependencies 可选,一个数组,表示模块依赖的其它模块
  • factory 必选,允许是对象或者函数,dependencies参数里定义的外部模块将会以参数的形式传给factory

由于JavaScript是预编译语言,无法方便地从语言层面自动解析模块之间的依赖,使用AMD规范的项目需要预先加载支持AMD规范的加载器,一般使用的是require.js。

require.js定义了一个全局对象require,允许配置各种参数以及定义入口文件:

<script type="text/javascript" src="./js/require.min.js"></script>
<script type="text/javascript">
    require.config({
        baseUrl: "./js/src",
        urlArgs: "__ts=" + new Date().getTime()
    });
    require(["pages/index"], function(page) {
        console.log(page);
    });
</script>

CMD规范

CMD规范跟AMD规范非常接近,二者的加载器基本上也互相兼容,CMD的定义方式如下:

define(factory);

跟AMD规范最大的不同是在define函数的调用时并不指定该模块依赖哪些外部模块,同时factory也不会接收依赖模块对象参数,它拥有三个固定的参数:

  • require 函数,用于引入依赖的模块,可以使用以下方法导入模块 var mod1 = require(“./mod1”);
  • exports
    导出对象,如果factory没有返回值将以它为导出对象。导出对象即为该模块被其它模块依赖时提供给其它模块的对象,所有的API都作为该对象的成员方法。
  • module 本模块的各种信息,比如id等等

CMD规范一般采用sea.js作为加载器,但事实上require.js同样兼容此规范。

注:前端开发架构1.0即是以require.js作为加载器,CMD规范作为代码规范。

CommonJS规范

AMD规范与CMD规范希望自己被使用于浏览器中的Web环境,它们拥有开发模式以及生产模式。在开发时通过加载器异步加载入口文件,并且分析依赖关系异步加载所有依赖的其它模块。

CommonJS规范更专注于服务器端或者本地应用环境,它并不关心开发模式以及生产模式,现今Node.js的模块定义即采用了CommonJS规范,它是通过node命令来自动同步分析依赖关系并且执行。CommonJS规范同样可以被应用到Web环境,但由于它并不要求加载器,在使用时必须编译成目标代码才能够正常执行,最出名的预编译器即是现今很流行的webpack。

跟AMD与CMD不同,CommonJS规范由于在使用时必须通过预编译,它不需要使用define函数定义模块,而是每个文件自然成为一个模块,同时拥有以下变量或者函数:

  • require
    函数,用于导入一个模块,在webpack中经过预编译它会被转换成webpack内部函数名,不是真正意义上的JavaScript函数。

  • module
    模块的附加信息,比如id。

  • module.exports
    模块的导出对象,模块本身被依赖它的文件引入时会得到一个对象,该对象即是module.exports,模块的API都需要作为它的方法对外提供,简单来说它就是模块的值。

UMD规范

CommonJs和AMD风格一样流行,似乎缺少一个统一的规范。所以人们产生了这样的需求,希望有支持两种风格的“通用”模式,于是通用模块规范(UMD)诞生了。

它兼容了AMD和CommonJS,同时还支持老式的“全局”变量规范

(function (root, factory) {
    if (typeof define === 'function' && define.amd) {
        // AMD
        define(['jquery'], factory);
    } else if (typeof exports === 'object') {
        // Node, CommonJS之类的
        module.exports = factory(require('jquery'));
    } else {
        // 浏览器全局变量(root 即 window)
        root.returnExports = factory(root.jQuery);
    }
}(this, function ($) {
    //    方法
    function myFunc(){};

    //    暴露公共方法
    return myFunc;
}));
(function (root, factory) {
    if (typeof define === 'function' && define.amd) {
        // AMD
        define(['jquery'], factory);
    } else if (typeof exports === 'object') {
        // Node, CommonJS之类的
        module.exports = factory(require('jquery'));
    } else {
        // 浏览器全局变量(root 即 window)
        root.returnExports = factory(root.jQuery);
    }
}(this, function ($) {
    //    方法
    function myFunc(){};

    //    暴露公共方法
    return myFunc;
}));

模块化开发的意义

  • 重新定义代码粒度
  • 对象封装的基础
  • 建立代码复用机制
  • 开发模式与生产模式
  • 自动化工具流
网页雪碧图制作专家v1.0 是一款辅助网页开发、快速合成雪碧图的实用型工具软件。   网页雪碧图制作专家的界面非常简洁、操作方便、功能强大。   可减轻广大Web程序员或网站网页设计爱好者制作雪碧图时的苦恼、愉快地享用CSS雪碧图网页开发技术。   在网页中使用雪碧技术,有如下优点:   1.减少加载网页图片时对服务器的请求次数;   2.提高网页的加载速度;   3.更换风格方便。只需在一张雪碧图上修改其中的素材图片,整个网页风格就可以改变;   4.避免网页元素上鼠标滑动效果的一些bug。   当前,雪碧技术被广泛应用。无论是BAT、谷歌微软亚马逊等的网站,还是小的个人博客,都能见到它的身影。   网页雪碧图制作专家 主要特性   1、绿色软件,无需安装;   2、安全无毒,使用放心;   3、可批量添加素材,可支持从资源管理器拖入素材;   4、灵活强大的排列和对齐功能;   5、自由托拽、灵活移动和改变大小;   6、一键生成雪碧图及CSS、HTML文件;   7、可生成三态按钮背景图、导航栏背景图,tab标签页背景图等;   8、方便的素材导出功能;   9、实用的查找功能;   10、支持设计稿的反复修改,轻松替换旧的素材(比如老板或客户不喜欢某个图标素材,要换成他们喜欢的,用本软件就对了);   11、便携式设计稿文件(*.cssbg格式),单个文件内嵌所有素材,如同photoshop的*.psd格式文件;   12、软件目录里提供了4个经典的“设计稿案例”,让您快速掌握软件的使用方法。  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值