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. Python之路-awk文本处理

    作业一:整理博客,内容包含awk.变量.运算符.if多分支 一.awk 1.awk是一个优秀的文本处理工具,多用来处理含有特殊分隔符的内容 常见用法 awk -F:  {print $1,$4} 作业 ...

  2. Java集合常见面试题集锦

    1.介绍Collection框架的结构 集合是Java中的一个非常重要的一个知识点,主要分为List.Set.Map.Queue三大数据结构.它们在Java中的结构关系如下: Collection接口 ...

  3. 《Python基础教程》第1章读书笔记

    # -*- coding:utf-8 -*- x = "hello " y = "world" print x+y print "hello &quo ...

  4. 微软 深度学习 cntk ,我目前见过 安装方式最简单的一个框架,2.0之后开始支持C# 咯

    嗨,你也是我这种手残党么?之前试着安装着mxnet和tensorflow,但是因为时间比较短所以往往来不及安装完就失去兴趣,今天看到微软的cntk可以用了,一次性安装好了,并且测试通过 本人环境: W ...

  5. HTML基础学习(二)—CSS

    一.CSS概述     CSS(Cascading Stytle Sheets)层叠样式表,用来定义网页的显示效果.可以解决HTNL代码对样式定义的重复,提高了后期样式代码的可维护性,并增强了网页的显 ...

  6. 移植 DeepinQQ 到 Fedora 中

    本着自由/开源软件的分享精神创作此文,如有任何权力侵害请联系我,我将积极配合. 移植 DeepinQQ 到 Fedora 中 --也不知道是用移植还是迁移更合适 写在前面 首先,在这里要感谢武汉深之度 ...

  7. Bar 3D 和Pie 3D的统计图形

    最近在做一个关于图形统计的界面,主要用到的是Dev控件ChartControl(功能很强大,能解决基本和复杂图形统计问题). ChartControl主要有Diagram.Series.Legend三 ...

  8. .NET Core 2.0及.NET Standard 2.0

    .NET Core 2.0的发布时间,.NET Core 2.0预览版及.NET Standard 2.0 Preview大概在5月中旬或下旬发布. .NET Core 2.0正式版本发布时间大约在Q ...

  9. java基础之类与对象2

    这是上一篇文章的源码................ public class Main 是我创建的一个主类 我的基本操作就在这个类里面完成,public static void main(Strin ...

  10. java线程池ThreadPoolExector源码分析

    java线程池ThreadPoolExector源码分析 今天研究了下ThreadPoolExector源码,大致上总结了以下几点跟大家分享下: 一.ThreadPoolExector几个主要变量 先 ...