require.js实现js模块化编程(二):RequireJS Optimizer
require.js实现js模块化编程(二):RequireJS Optimizer
这一节,我们主要学习一下require.js所提供的一个优化工具r.js的用法。

1、认识RequireJS Optimizer
RequireJS Optimizer是对脚本的优化支持目前流行的 UglifyJS 和 Closure Compiler 两种压缩方式,UglifyJS 需要 NodeJS 环境支持,而 Closure Compiler 则需要 Java 环境。这篇文章是以运行于 NodeJS 的 UglifyJS 来优化的,这也是 RequireJS Optimizer 默认的压缩方法。
2、环境的需求及运行方法
首页需要安装 Node 0.4.0 或更高版本,然后下载 r.js,下载好以后就可以在命令行里对前端代码进行优化了。
r.js 的参数传递使用方式:
一是直接加在命令行后面,如下:
node r.js -o baseUrl=. paths.jquery=some/other/jquery name=main out=main-built.js
二是新建一个配置文件,例如 build.js(推荐使用这种方式),这样配置更方便,如下:
node r.js -o build.js
3、项目结构及build.js配置
如下:

({
baseUrl: ".",
name: "main",
//dir:"dist/", // 输出目录的路径。如果不设置,则默认为和 build 文件同级的 build 目录。
optimize: "uglify", //JavaScript 代码优化方式
optimizeCss:"standard.keepLines", //CSS 代码优化方式
//mainConfigFile: "main.js",
//removeCombined: true,
//fileExclusionRegExp: /^\./,
//modules:[{}], //定义要被优化的模块数组。
paths: {
"common": "./libs/common",
"countObject": "./core/countObject",
"dependCount": "./core/dependCount",
"countFunction": "./core/countFunction",
"dateUtil": "./core/dateUtil",
"stringUtil": "./core/stringUtil"
},
shim: {
dateUtil: {
deps: [],
exports: 'DateUtils'
},
stringUtil: {
deps: [],
exports: 'StringUtils'
}
},
out: "./dist/main-built.js" // 合并压缩之后js目录
})
按照build.js配置文件,运行node r.js -o build.js ,效果如下:

生成合并之后的压缩文件位于 /dist/main-built.js,在index.html页面中引入即可,如下:
<script src="js/libs/require.js" data-main="js/dist/main-built" defer async="true"></script>
build.js基本参数介绍
- appDir
应用程序的最顶层目录。可选的,如果设置了的话,r.js 会认为脚本在这个路径的子目录中,应用程序的文件都会被拷贝到输出目录(dir 定义的路径)。如果不设置,则使用下面的 baseUrl 路径。
- baseUrl
默认情况下,所有的模块都是相对于这个路径的。如果没有设置,则模块的加载是相对于 build 文件所在的目录。另外,如果设置了appDir,那么 baseUrl 应该定义为相对于 appDir 的路径。
- dir
输出目录的路径。如果不设置,则默认为和 build 文件同级的 build 目录。
- optimize
JavaScript 代码优化方式。可设置的值:
- ● "uglify:使用 UglifyJS 压缩代码,默认值;
- ● "uglify2":使用 2.1.2+ 版本进行压缩;
- ● "closure": 使用 Google's Closure Compiler 进行压缩合并,需要 Java 环境;
- ● "closure.keepLines":使用 Closure Compiler 进行压缩合并并保留换行;
- ● "none":不做压缩合并;
- optimizeCss
CSS 代码优化方式,可选的值有:
● "standard":标准的压缩方式;
● "standard.keepLines":保留换行;
● "standard.keepComments":保留注释;
● "standard.keepComments.keepLines":保留换行;
● "none":不压缩;
- mainConfigFile
如果不想重复定义的话,可以使用这个参数配置 RequireJS 的配置文件路径。
- removeCombined
删除之前压缩合并的文件,默认值 false。
- fileExclusionRegExp
要排除的文件的正则匹配的表达式。
- modules
定义要被优化的模块数组。每一项是模块优化的配置,常用的几个参数如下:
- name:模块名;
- create:如果不存在,是否创建。默认 false;
- include:额外引入的模块,和 name 定义的模块一起压缩合并;
- exclude:要排除的模块。有些模块有公共的依赖模块,在合并的时候每个都会压缩进去,例如一些基础库。使用 exclude 就可以把这些模块在压缩在一个更早之前加载的模块中,其它模块不用重复引入。
RequireJS Optimizer 的配置参数还有很多,完整的参数介绍可以看这里。
4、main.js
require(['_main_']);
define("_main_", ["common", "countObject", "countFunction", "dependCount", "dateUtil", "stringUtil"], function( common, countObject, countFunction, dependCount, dateUtil, stringUtil) {
stringUtil.toUpperCase();
dateUtil.toString(); window.StringUtils.toUpperCase();
window.DateUtils.toString();
});
5、批处理文件start.bat
如果不想每次都输入node r.js -o build.js去进行打包压缩,可以定义这样一个批处理文件start.bat,注意更改文件的路径。双击该文件,即可自行批处理进行打包。
@echo off
echo build...
e:
cd E:\ownstudy\require\requirejs_Demo_r\js node r.js -o build.js echo Press any key to exit!
echo. & pause
RequireJS Optimizer项目地址,请自行下载,谢谢关注。
require.js实现js模块化编程(二):RequireJS Optimizer的更多相关文章
- 应用require.js进行javascript模块化编程小试一例
长久以来都渴望应用javascript的模块化编程.今日紧迫更甚,岁月蹉跎,已经不能再等了. 拜读阮一峰的有关文章已经好几遍,文章写得真好,简洁流畅,头头是道,自觉有点明白了.但经验告诉我们,一定要亲 ...
- Javascript模块化编程(二)AMD规范(规范使用模块)
这个系列的第一部分介绍了Javascript模块的基本写法,今天介绍如何规范地使用模块,先想一想,为什么模块很重要?接下来为您详细介绍,感兴趣的朋友可以了解下啊.今天介绍如何规范地使用模块. 七.模块 ...
- 从273二手车的M站点初探js模块化编程
前言 这几天在看273M站点时被他们的页面交互方式所吸引,他们的首页是采用三次加载+分页的方式.也就说分为大分页和小分页两种交互.大分页就是通过分页按钮来操作,小分页是通过下拉(向下滑动)时异步加载数 ...
- require.js实现js模块化编程(一)
1.认识require.js: 官方文档:http://requirejs.org/RequireJS是一个非常小巧的JavaScript模块载入框架,是AMD规范最好的实现者之一.最新版本的Requ ...
- Javascript模块化编程require.js的用法
JS模块化工具requirejs教程(一):初识requirejs http://www.runoob.com/w3cnote/requirejs-tutorial-1.html JS模块化工具req ...
- 初步理解require.js模块化编程
初步理解require.js模块化编程 一.Javascript模块化编程 目前,通行的Javascript模块规范共有两种:CommonJS和AMD. 1.commonjs 2009年,美国程序员R ...
- Javascript模块化编程(三):require.js的用法
Javascript模块化编程(三):require.js的用法 原文地址:http://www.ruanyifeng.com/blog/2012/11/require_js.html 作者: 阮一峰 ...
- Javascript模块化编程之路——(require.js)
转自:http://www.ruanyifeng.com/blog/2012/10/javascript_module.html Javascript模块化编程(一):模块的写法 随着网站逐渐变成&q ...
- javascript模块化编程库require.js的用法
随着javascript的兴起,越来越多的公司开始将JS模块化,以增加开发的效率和减少重复编写代码的.更是为了能更加容易的维护日后的代码,因为现在的随着人们对交互效果的越来越强烈的需求,我们的JS代码 ...
随机推荐
- 如何手动获取Spring容器中的bean(ApplicationContextAware 接口)
ApplicationContextAware 接口的作用 先来看下Spring API 中对于 ApplicationContextAware 这个接口的描述: 即是说,当一个类实现了这个接口之 ...
- Python生成器主要用法
代码如下: #!/usr/bin/env python3 # -*- coding: utf-8 -*- __author__ = '人生入戏' def use(name): print(" ...
- thinkphp5.0无限极分类及格式化输出
首先我们来看数据表 从上图中可以发现,中国下有贵州,北京两个子节点,而北京有天安门一个子节点,纽约的子节点是"纽约的子类". 从pid为0看出,中国和纽约是顶级节点. 因为贵州的p ...
- XtraGrid滚轮翻页
滚轮翻页与传动的翻页更为方便,经过本人一番探讨与琢磨终于在XtraGrid的GridView中实现了鼠标滚轮翻页. 我新建了一个组件继承原本的GridControl,在组件中添加了一个ImageLis ...
- SoapUI简介和入门实例解析
SoapUI简介 SoapUI是一个开源测试工具,通过soap/http来检查.调用.实现Web Service的功能/负载/符合性测试.该工具既可作为一个单独的测试软件使用,也可利用插件集成到Ecl ...
- 记录各种IE兼容问题,IE6,IE7,IE8,IE9,IE10
记录遇到的IE BUG: 1.IE8开发者工具打不开 解决办法:IE8新增了开发人员工具,非常不错,比早期的DevToolbar好用多了.不过在我的Win7下 使用的时候偶尔会出现一个莫名其妙的问 ...
- Pycharm中如何加载多个项目?
今天在使用Pycharm工具练习Python时遇到一个疑问:在已存有项目A工程的前提下如何新建另一个项目B,且两者并存? 基本操作步骤: 在File下拉项中选择"New Project&qu ...
- mysql更新某个字符串字段的部分内容
如果现在需要Mysql更新字段重部分数据,而不是全部数据,应该采用何种方法呢?下面介绍了两种情况下Mysql更新字段中部分数据的方法,供您参考. Mysql更新字段中部分数据第一种情况: update ...
- “==”与"equals(object)"的区别
一.对于基本数据类型而言只能用“==”,不能用equals来进行比较,若使用equals来进行比较,则不能通过编译 二.在非字符串的对象的比较中: “==”与“equals()”比较的均是对象在堆内存 ...
- 【Spring】高级装配
前言 前面讲解了bean的核心装配技术,其可应付很多中装配情况,但Spring提供了高级装配技术,以此实现更为高级的bean装配功能. 高级装配 配置profile bean 将所有不同bean定义放 ...