requireJs压缩合并路径问题
描述
随着前端开发的重要性,以及业务的复杂性,前端的模块化开发也被大众所接收,最常见的js框架requireJs,一个js文件对应一个模块,方便开发人员调试与维护,但是一个文件对应一个模块增加了http请求,降低了网站的性能。

幸运的是requireJs提供了压缩工具r.js(点击下载),r.js需要node(Node 0.4.0 或更高版本,点击下载)环境支持,安装完node就可以在命令行里对前端代码进行优化了。
1.可以在命令行执行,如下:
node r.js -o baseUrl=. paths.jquery=some/other/jquery name=main out=main-built.js
2.也可以建一个配置文件,如build.js,代码如下:
{
    appDir: "../js",
    baseUrl: "../js",
    dir: "../dist",
    optimize: "uglify",
    optimizeCss: "standard.keepLines",
    mainConfigFile: "../js/main.js",
    removeCombined: true,
    fileExclusionRegExp: /^\./,
    modules: [
        {
            name: ""
        },
        {
            name: ''
        }
    ]
}
这时只需在命令行中输入:
node r.js -o build.js
注意:r.js和build.js放在同一个文件夹
配置参数
({
    appDir: '../client',
    baseUrl: 'js',
    /*paths:{//baseUrl
        app: 'app'
    },*/
    //该路径以当前路径为起点
    dir: '../client-build',
    // Include the main configuration file.
    //该路径以当前路径为起点
    mainConfigFile: "./js/main.js",
    //加上下面这个modules,完成的是合并操作
    //路径apppDir + baseUrl + main.js
    //模块的入口文件,会从./client/js/main.js中寻找其所有的依赖项,并把他们合并成一个js文件
    modules:[
        {
            name:'config'
        }],
    // Output file.
    //out: "./js/config.js",
    // Root application module.
    //name: "config",
    removeCombined:true,
    optimizeCss:'standard',
    // Do not wrap everything in an IIFE.
    wrap: false,
    //optimize (none/uglify/closure) 是否压缩,默认设置为optimize = uglify,
    //none (OK:经测试,该参数正解)只合并不压缩,可以压缩成一个文件,但文件里面依旧保留格式,方便调试的时候查看代码
    //uglify 只压缩不合并 (亲测,既压缩又合并)
    //closure 压缩而且合并(亲测,合并不压缩)
    //optimize:"closure",
    //合并后的文件,顶部会自动生成一堆说明性的文字,包括版权啊,等等,加了下面的参数,则不再生成
    preserveLicenseComments: false,
    //
    //下面两组的作用是 把js文件中的console.log删除
    pragmas: {  cacheBust: false },
    onBuildWrite: function (moduleName, path, contents) {
       // return contents;
         return contents.replace(/console.log(.*);/g, '');
    }
})
常见问题
压缩合并后会出现路径错误问题,主要是因为,js代码位置变了,例如:
模块a中动态加载样式,压缩后,模块a整合到其他模块中,路径发生变化
这时需要修改js代码,动态判断路径,或者在调用模块时封装模块,通过require加载模块也能解决问题,因为r.js不会把require进来的模块压缩进去
requireJs压缩合并路径问题的更多相关文章
- gulp实时编译less,压缩合并requirejs模块文件
		gulp的使用命令简单,就几个,gulp的简单使用教材可以参考一点的gulp使用教材(http://www.ydcss.com/archives/18). 下面就简单的介绍这些命令如何互相配合的完成前 ... 
- RequireJS模块化后JS压缩合并
		使用RequireJS模块化后代码被拆分成多个JS文件了,在部署生产环境需要压缩合并,RequireJS提供了一个打包压缩工具r.js来对模块进行合并压缩.r.js非常强大,不但可以压缩js,css, ... 
- ASP.NET MVC 中CSS JS压缩合并 功能的使用方法
		通过压缩合并js文件和css文件,可以减少 服务器的响应 次数和 流量,可以大大减小服务器的压力,对网站优化有比较明显的帮助!压缩合并 css 文件和js文件是网站优化的一个 比较常用的方法. ASP ... 
- gulp之css,js压缩合并加密替换
		为了防止客户端的静态资源缓存,我们需要每次更新css或js的时候,通过md5或时间戳等方式重新命名静态资源.让客户端可以重新请求资源,而不是从缓存里取.然后html模板里的src也要做相应的修改.当然 ... 
- gulp完成javascript压缩合并,css压缩
		最近需要对项目进行优化,主要是对js的压缩合并和css文件的压缩,查找相关资料之后发现gulp可以实现相关的功能,特此分享一下使用心得. 1.安装gulp gulp是基于Node.js的前端构建工具. ... 
- gulp自动化压缩合并、加版本号解决方案
		虽然网上有很多的 gulp 构建文章,但是很多都已经随着 gulp 插件的更新无法运行了.因此,我写了这个比较简单的构建方案. 如果还不熟悉 gulp 的插件,可以阅读上一篇文章:精通gulp常用插件 ... 
- 第十一节:Bundles压缩合并js和css及原理分析
		一. 简介 1.背景:浏览器默认一次性请求的网络数是有上限的,如果你得js和css文件太多,就会导致浏览器需要多次加载,影响页面的加载速度, MVC中提供Bundles的方式压缩合并js和css,是M ... 
- 前端构建工具 Gulp 压缩合并JS/CSS 并添加版本号、ES6转ES5
		Gulp 基于 Node.js 的前端构建工具,可以实现前端代码的编译(sass.less).压缩合并(JS.CSS).测试:图片的压缩:已经添加 JS 和 CSS 版本号,防止浏览器缓存. 1. 安 ... 
- browserify压缩合并源码反编译
		最近在学习钉钉(一个协作应用)桌面应用的前端源码时候,发现其js源码是用browserify做模块开发.于是想还原其源码的原本的目录结构,学习它的目录分类以及业务划分. 前言 用过browserify ... 
随机推荐
- Quartz Scheduler Calendar日历的使用
			Quartz Calendar 日历的使用 quartz引擎为我们提供了日历的功能,让我们可以自己定义一个时间段,可以控制触发器在这个时间段内触发或者不触发,比如可以设置节假日,工作时间早8晚5等等. ... 
- hive之案例分析(grouping sets,lateral view explode, concat_ws)
			有这样一组搜索结果数据: 租户,平台, 登录用户, 搜索关键词, 搜索的商品结果List {"tenantcode":"", "platform&qu ... 
- (转)CDH中启动的hive,使用jdbc连接hiveServer2时候权限不足解决方案
			Hive JDBC:java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.securi ... 
- Android开发-httpclient兼容性问题
			据说android 6.0之后已经将Apache Http Client移出SDK,build时出现“Unable to find optional library: org.apache.http. ... 
- JQ 弹出层全屏
			下载:http://sc.chinaz.com/jiaoben/150427225380.htm http://sc.chinaz.com/jiaoben/150427225380.htm 
- MySQL递归查询树状表的子节点、父节点
			表结构和表数据就不公示了,查询的表user_role,主键是id,每条记录有parentid字段; 如下mysql查询函数即可实现根据一个节点查询所有的子节点,根据一个子节点查询所有的父节点.对于数据 ... 
- MATLAB——textscan
			%读取带变量名的数据集的程序,寇文红2007年5月24日于畅春园. %这是一个读取数据集的程序,目的是把如下带变量名的数据矩阵读进MATLAB.% <DTYYYYMMDD>,<TIM ... 
- JQuery之拖拽插件
			一直以来,都对JS获取元素的位置感到非常的困惑:一会client.一会offset.一会scroll. 再加上各大浏览器之间的不兼容,唉,搞得哥晕晕乎乎的. 而很多页面效果都要用到这些位置.不得已,得 ... 
- RootKit
			类型0:藏在人群中,干扰人工肉眼检查 类型1 2:篡改系统内部的数据结构和调用表,破坏自动化检测工具,这项数据结构和调用表是检测工具和KootKit共用的 类型3:跳出束缚,由rootkit实现本该宿 ... 
- Python之生成二面体群元素
			from sympy.combinatorics.named_groups import DihedralGroup from collections import Counter n = 12 G ... 
