转载 r.js打包经验
2015-05-18 13:37
260 查看
例子1
先是HTML页面
js都放在scripts目录下,换言之 html与scripts是平级。此目录下有r.js,require.js,one.js,two.js,three.js,main.js
上面HTML提到的main-built.js是一会儿动态生成的。
r.js 可以在这里找到https://github.com/jrburke/r.js/blob/master/dist/r.js,总共7MB,非常疯狂!听说把各种情况都hold住了, 比spm强大多了!
接着是几个JS的内容:
好了,我们再看一下build.js如何写
定位到此目的,执行node r.js -o build.js
最后生成main-built.js文件,我格式化它一下,里面内容如下:
最后运行服务器,发现真的能alert出6!
可以点击这里看看
其他变化如下:
three.js放到sub目录下,内容改成:
one.js
main.js改成
执行r.js,生成main-built.js为:
下面合并前后的请求数比较
例子3, paths配置项的使用
目录结构改成这样,jquery自行到官网下载
main.js改成这样
main.js改成这样
然后执行node r.js -o build.js打包命令,生成的文件就可以用了。并且发现r.js有个非常智能的地方,如果把main.js中的require语句的依赖项中的jquery去掉,再执行打包,它会将jquery源码从main-built.js中去掉。
可以点击这里看看
例子4,让生产环境用的脚本放在另一个文件中
我们通常把我们自己工作的环境叫做发展环境, 上线的环境叫生产坏境,将它们分开是非常有好处的。我们把上面的目录复制一下,改一名字:
相对而言, 页面也改一下
打包的脚本build.js变成这样,
对比一下,有了dir,就不能使用out配置项了,你在编译时它有非常明确的提示。执行node r.js -o build.js打包命令,你的项目变成这样了
既然目录变了,我们有两个办法,1自己修改或通过脚本修改index.html引用脚本的路径,2后端配置一下,对请求进行重定向,我们通常是使用后面一种。
可以点击这里看看
例子5,shim配置项的使用
在例子4里面jquery目录添加一个jquery.aaa.js,内容如下:
main.js改成
build.js也跟着改成
然后执行node r.js -o build.js打包命令,生成的文件就可以用了。
可以点击这里看看
如果大家还有更好的打包方式, 可以https://github.com/avalonjs/avalonjs.github.io/tree/master/zh/engineering ,添加到这里,pull request给我
转载来源:http://www.cnblogs.com/rubylouvre/p/4262569.html
先是HTML页面
<!DOCTYPE html> |
< html > |
< head > |
< title >My App</ title > |
< link rel = "stylesheet" type = "text/css" href = "css/main.css" > |
< script data-main = "scripts/main-built" src = "scripts/require.js" ></ script > |
</ head > |
< body > |
< h1 >My App</ h1 > |
</ body > |
</ html > |
上面HTML提到的main-built.js是一会儿动态生成的。
r.js 可以在这里找到https://github.com/jrburke/r.js/blob/master/dist/r.js,总共7MB,非常疯狂!听说把各种情况都hold住了, 比spm强大多了!
接着是几个JS的内容:
one.js
define( function (){ |
return 1 |
}) |
two.js
define(function(){ |
return 2 |
}) |
three.js
define( function (){ |
return 3 |
}) |
main.js
require([ "one" , "two" , "three" ], function (one,two,three) { |
alert(one+two+three) |
}); |
({ |
baseUrl: "." , |
name: "main" , |
out: "main-built.js" |
}) |
最后生成main-built.js文件,我格式化它一下,里面内容如下:
define( "one" ,[], function (){ return 1}), |
define( "two" ,[], function (){ return 2}), |
define( "three" ,[], function (){ return 3}), |
require([ "one" , "two" , "three" ], function (e,t,n){alert(e+t+n)}),define( "main" , function (){}); |
可以点击这里看看
例子2
就是在上面的例子里面改一下其他变化如下:
three.js放到sub目录下,内容改成:
define([ "./two" ], function (a){ |
return 1 + a |
}) |
define([ "./two" ], function (a){ |
return 1 + a |
}) |
require([ "one" , "sub/three" ], function (one,three) { |
console.log(one + three) |
}) |
define( "two" ,[], function () { |
return 2 |
}),define( "one" ,[ "./two" ], function (e) { |
return 1 + e |
}),define( "sub/three" ,[], function () { |
return 30 |
}),require([ "one" , "sub/three" ], function (e,t) { |
console.log(e + t) |
}),define( "main" , function () { |
}); |
例子3, paths配置项的使用
目录结构改成这样,jquery自行到官网下载
main.js改成这样
require.config({ |
paths: { |
jquery: "jquery/jquery-1.11.2" |
} |
}) |
require([ "one" , "sub/three" , "jquery" ], function (one,three,$) { |
console.log(one + three) |
console.log($) |
}); |
({ |
baseUrl: "." , |
name: "main" , |
paths: { |
jquery: "jquery/jquery-1.11.2" |
}, |
out: "main-built.js" |
}) |
可以点击这里看看
例子4,让生产环境用的脚本放在另一个文件中
我们通常把我们自己工作的环境叫做发展环境, 上线的环境叫生产坏境,将它们分开是非常有好处的。我们把上面的目录复制一下,改一名字:
相对而言, 页面也改一下
<!DOCTYPE html> |
< html > |
< head > |
< meta charset = "utf-8" /> |
< title >My App</ title > |
< link rel = "stylesheet" type = "text/css" href = "css/main.css" > |
< script data-main = "develop/main-built" src = "develop/avalon.js" ></ script > |
<!--<script data-main="develop/main" src="develop/avalon.js"></script>--> |
<!--<script data-main="develop/main-built" src="develop/require.js"></script>--> |
</ head > |
< body > |
< h1 >My App</ h1 > |
</ body > |
</ html > |
({ |
baseUrl: "." , |
paths: { |
jquery: "jquery/jquery-1.11.2" |
}, |
dir: "../production" , |
name: "main" |
}) |
既然目录变了,我们有两个办法,1自己修改或通过脚本修改index.html引用脚本的路径,2后端配置一下,对请求进行重定向,我们通常是使用后面一种。
可以点击这里看看
例子5,shim配置项的使用
在例子4里面jquery目录添加一个jquery.aaa.js,内容如下:
jQuery.fn.aaa = function (){ |
alert( "aaa" ) |
} |
require.config({ |
paths: { |
jquery: "jquery/jquery-1.11.2" , |
aaa: "jquery/jquery.aaa" |
}, |
shim: { |
aaa:{ |
deps: [ "jquery" ], |
exports: "jQuery" |
} |
} |
}) |
require([ "one" , "sub/three" , "aaa" ], function (one,three,$) { |
console.log(one + three) |
console.log($.fn.aaa) |
}) |
require.config({ |
paths: { |
jquery: "jquery/jquery-1.11.2" , |
aaa: "jquery/jquery.aaa" |
}, |
shim: { |
aaa:{ |
deps: [ "jquery" ], |
exports: "jQuery" |
} |
} |
}) |
require([ "one" , "sub/three" , "aaa" ], function (one,three,$) { |
console.log(one + three) |
console.log($.fn.aaa) |
}) |
可以点击这里看看
如果大家还有更好的打包方式, 可以https://github.com/avalonjs/avalonjs.github.io/tree/master/zh/engineering ,添加到这里,pull request给我
转载来源:http://www.cnblogs.com/rubylouvre/p/4262569.html
相关文章推荐
- ASP.NET MVC 4 RC的JS/CSS打包压缩功能 (转载)
- 使用 node.js 开发前端打包程序 ---转载
- [转载]使用electron构建跨平台Node.js桌面应用经验分享
- 【转载】写一个js库需要怎样的知识储备和技术程度?
- MapXtreme打包成功的经验
- js 事件 (转载)
- Parcel.js + Vue 2.x 极速零配置打包体验教程
- Vue.js系列之vue-router(上) (转载自向朔1992)
- 转载 iOS js oc相互调用(JavaScriptCore) --iOS调用js
- [转载] 可伸缩系统的架构经验
- 新产品为了效果,做的比較炫,用了非常多的图片和JS,所曾经端的性能是非常大的问题,分篇记录前端性能优化的一些小经验。
- Cocos2d-JS打包, cocos2dx-3.0
- 使用Gruntjs打包js
- windowsXP日常应用技巧及经验总结(转载)【实用】
- JS日期格式化(网上转载)
- 【转载】JS 中如何将字符串转化成日期&&日期格式化方法
- 转:requirejs打包压缩r.js使用示例
- android 代码混淆经验总结(转载)
- JS实现页面打印(转载)
- cocos2dx JS 清除缓存重新编译打包安卓apk