r.js主要功能:优化项目的静态资源。可以简化压缩代码,减少体积。指定模块将多个组件合并为一个文件,减少HTTP请求数量。具体使用步骤如下:

先把 r.js 文件放到项目根目录,再于项目根目录内新建一个 build.js 文件。

一、编写build.js(用独立文件的形式保存压缩命令的相关参数)
如:

({
appDir:'./',           //将要被优化处理的目录(一般是项目根目录),该目录下的所有文件都会被优化并复制到dir指定的输出目录中,相对build.js文件的路径
dir: '../app-built',      //指定顶级输出目录,所有需要被优化的文件将被复制并压缩到该目录,相对于build.js的路径,一般和项目源代码根目录并列。
baseUrl: 'scripts/app',    // 模块根目录(base url),默认情况下所有模块资源都相对此目录。此路径也是相对于appDir的
mainConfigFile:'scripts/config.js',  //使用requirejs的配置文件(路径相对于build.js),这样就不需要重复配置baseUrl、path和shim等相关属性了。【在config.js中不能使用变量】
paths: {jquery: 'jquery.min',a: 'b',c: 'c',d: 'd'},  //特别为某些模块设定别名,值为相对于baseUrl的路径
//需要合并的模块数组(不在此配置内的文件只会被单独压缩简化,不会被合并),常用参数:create:如果不存在,是否创建,默认 false;include:额外引入的模块,和 name 定义的模块一起压缩合并
modules: [
{
name: '../main',  //页面的入口js文件,会将其依赖全部压缩合并成一个文件;相对baseUrl的路径或模块Id都可以。
exclude:['underscore']  //exclude:排除指定模块及其依赖。有些模块有公共的依赖模块,例如基础库,在合并的时候每个都会压缩进去。使用 exclude 可以把这些模块在压缩在一个更早之前加载的模块中,其它模块不用重复引入。排除之后要确保页面会在别的地方引入,否则会报错。
},
// 将模块ID为 foo/bar/bop 和 foo/bar/bee 的模块打包成一个文件
{
name: "foo/bar/bop",
include: ["foo/bar/bee"]//可以合并不属于依赖关系中的文件及其依赖
},
],
removeCombined: true,  //如果为true,将从输出目录中删除已被合并的文件
fileExclusionRegExp: /^(r|build)\.js|.*\.scss$/,   //匹配到的文件将不会被输出到输出目录中。它匹配了r.js、build.js和所有.scss后缀的文件。
optimize:"uglify",   //JS代码优化方式,"uglify":使用 UglifyJS 压缩代码,默认值;"uglify2":使用 2.1.2+ 版本进行压缩;"none":不做压缩合并;
uglify: { toplevel: true, ascii_only: true, beautify: true, max_line_length: 1000 }, // 使用 UglifyJS 时的可配置参数
optimizeCss:'standard',//css优化的参数,"standard.keepLines","none","standard.keepComments","standard.keepWhitespace","none"
generateSourceMaps: false,//是否生成SourceMaps文件,便于调试压缩后的代码
useStrict: false,// 是否开启严格模式,
onBuildRead: function (moduleName, path, contents) {
//Always return a value.当每个文件被读取的时候可以调用这个方法来改变文件的内容
if (moduleName === "config") {
return contents.replace("/Scripts", "/Scriptsbuild")
}
return contents;
}
})

Build.js配置参数 

参数 描述
appDir 应用程序的目录(即<root>)。在这个文件夹下的所有文件将会被复制到dir参数标注的文件夹下。
baseUrl 相对于appDir,代表查找文件的锚点(that represents the anchor path for finding files)。
dir 这是一个输出目录,所有的应用程序文件将会被复制到该文件夹下。
modules 一个包含多个对象的数组,每个对象代表一个将被优化合并的模块(module)。
fileExclusionRegExp 任何与此规则匹配的文件或文件夹都将不会被复制到输出目录。由于我们把r.js和build.js放置在应用程序目录下,我们希望优化器(optimizer)排除这两个文件。 因此我们可以这样设置/^(r|build)\.js$/。
optimizeCss RequireJS Optimizer会自动优化应用程序下的CSS文件。这个参数控制CSS最优化设置。允许的值: “none”, “standard”, “standard.keepLines”, “standard.keepComments”, “standard.keepComments.keepLines”。
removeCombined 如果为true,优化器(optimizer)将从输出目录中删除已合并的文件。
paths 模块(modules)的相对目录。
shim 为那些没有使用define()声名依赖关系及设置模块值的模块,配置依赖关系与“浏览器全局”出口的脚本。

二、目录结构如下

三、执行命令

命令行cd 到 r.js所在目录,执行:node r.js -o build.js;

或在c:盘目录下执行:node E:/appdirectory/r.js -o E:/appdirectory/build.js

四、执行build后的目录

页面的依赖文件被合并到main.js中了,且在输出目录app-build中删除了对应的打个压缩文件。

让客户端使用压缩的文件,因为目录变了,所以需要做相应的调整:

  1.自己或通过脚本修改index.html引用文件的路径;

  2.后端修改配置,对请求进行重定向。

参考:r.js的配置项

使用r.js优化静态资源的更多相关文章

  1. 使用Node.js搭建静态资源服务器

    对于Node.js新手,搭建一个静态资源服务器是个不错的锻炼,从最简单的返回文件或错误开始,渐进增强,还可以逐步加深对http的理解.那就开始吧,让我们的双手沾满网络请求! Note: 当然在项目中如 ...

  2. springboot 项目中css js 等静态资源无法访问的问题

    目录 问题场景 问题分析 问题解决 问题场景 今天在开发一个springboot 项目的时候突然发现 css js 等静态资源竟然都报404找不到,折腾了好久终于把问题都解决了,决定写篇博客,纪录总结 ...

  3. 关于document.write()加载JS等静态资源 和 异步async加载JS

    现流行浏览器对于静态资源的预加载 传统的浏览器,对于静态资源加载,会阻塞 HTML 解析器的线程进行,无论内联还是外链. 例如: <script src="test1.js" ...

  4. 解决SpringBoot无法读取js/css静态资源的新方法

    前言 作为依赖使用的SpringBoot工程很容易出现自身静态资源被主工程忽略的情况.但是作为依赖而存在的Controller方法却不会失效,我们知道,Spring MVC对于静态资源的处理也不外乎是 ...

  5. NodeJS + express访问html、css、JS等静态资源文件

    原先做前端开发时都是用XAMPP或LAMP,把HTML.CSS.JS等前端资源放到htdocs下,测试自己的前端代码,但有些不方便的地方是,在调用Ajax请求后无法模拟请求返回的数据,最近学了点Nod ...

  6. 防止SpringMVC拦截器拦截js等静态资源文件

    SpringMVC提供<mvc:resources>来设置静态资源,但是增加该设置如果采用通配符的方式增加拦截器的话仍然会被拦截器拦截,可采用如下方案进行解决: 方案一.拦截器中增加针对静 ...

  7. 在JSP中常见问题,防止SpringMVC拦截器拦截js等静态资源文件的解决方案

    方案一.拦截器中增加针对静态资源不进行过滤(涉及spring-mvc.xml) <mvc:resources location="/" mapping="/**/* ...

  8. 解决Tomcat无法加载css和js等静态资源文件

    解决思路有两个 一是,你使用了Apache服务器,html不交给Tomcat处理,所以你找不到Html等静态资源,所以你先停掉阿帕奇,然后只用Tomcat猫试试. 二是,像我一样,使用了Jetty开发 ...

  9. 使用Maven + Jetty时,如何不锁定js css 静态资源

    Jetty会使用内存映射文件来缓存静态文件,包括js,css文件. 在Windows下,使用内存映射文件会导致文件被锁定,所以当Jetty启动的时候无法在编辑器对js或者css文件进行编辑. 解决办法 ...

随机推荐

  1. 记录一次raid数据恢复及回迁成功的案例

    故障发生在两块盘组成的一个raid0上,其中的一块盘亮黄灯,被raid卡踢出后,raid崩溃,下面就把当时抢救数据的整个过程进行介绍. 由于硬盘是两块SAS 300G的硬盘,先把硬盘从机器中拔出来,然 ...

  2. Omi官方插件系列 - omi-transform介绍

    原文链接 - https://github.com/AlloyTeam/omi/tree/master/tutorial 写在前面 Omi框架正式发布了omi-transform作为Omi组件化开发特 ...

  3. poptest老李谈分布式与集群

    poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-845052 ...

  4. 高吞吐koa日志中间件

    Midlog中间件 node服务端开发中少不了日志打点,而在koa框架下的日志打点在多进程环境中日志信息往往无法对应上下文,而且在高并发下直接进行写buffer操作(内核调用writev)也会造成内存 ...

  5. POI 3.8读取2003与2007格式EXCEL(xls、xlsx)

    废话少说直接上代码,记得是poi3.8版本啊.方法入口唯一,自动判断格式,使用接口引用,自动选择执行方法. 方法入口: public static ArrayList<String[]> ...

  6. 使用 nvm 来管理nodejs版本 。

    最近需要升级一下node版本,所以使用nvm搞一搞. 1. 下载 nvm 在 github 下载非安装版本的nvm包https://github.com/coreybutler/nvm-windows ...

  7. C#变量、常量、枚举、预处理器指令知多少

    一.变量 C#共有其中变量类型有:静态变量.实类变量.数组元素.数值参数.引用参数.输出参数和局部变量 先定义一个简单的类来说明,如下: public class VariableDefine { p ...

  8. 关于ajax post请求,参数过大产生的问题解决 Java

    之前做了一个图片上传的功能,前端是把图片编码成BASE64,但是图片一大了,后台用request.getParameter("前端参数");来接收参数打印不出来,没有值,这就很尴尬 ...

  9. 【PAT_Basic日记】1001. 害死人不偿命的(3n+1)猜想

    还是觉得代码放这靠谱,会定期的看看和优化代码 #include <stdio.h> #include <stdlib.h> int main() { int n; int co ...

  10. JSSDK微信自定义分享

    背景:15年之前的微信分享只需要加入一段js就可以实现.后来微信官方全部禁止了.现在的微信分享全部得使用jssdk. 一.分享功能: 在微信内(必须在微信里)打开网站页面,分享给朋友或者分享到朋友圈时 ...