requirejs编译项目

挡箭牌

PS:首先我不认为编译打包能解决所有的问题,而且打包虽然在某程度上+快了页面的加载速度,但是同时也为打包部署及版本控制,带来的一定的问题,这个需要一整套打包发布框架去处理的,但是但是……引入一整套打包发布系统,是非常增加系统复杂度……甚至变成杀鸡用牛刀的……完全脱离了我们做事情的出发点了……所以我们需要从实际使用的出发去审视这套方案,有需要的时候就用,非迫切需要的时候慎用。

高手们请直接无视这篇文章直接到官网上看说明,猛戳这里

前戏

我们有部分项目使用 RequireJS 作为js包管理框架,在实际使用中有些小瑕疵(加载速度/重复刷新访问拒绝)。就研究了一下RequireJS 项目的打包方式,分享一下一些打包的经验。

RequireJS 做包管理有什么好处我就不再详细描述了,主要都是一种开发规范而已,用来规范Javascript这种自由奔放的开发语言的,以免项目的Javascript的代码野蛮生长到无法收拾的地步。

正文

整套示例代码可以checkout SVN:

http://192.168.33.2/svn/sam/rjs

项目里面已经内嵌了nodejs, 需要修改 build/app.build.js  配置文件,分别执行 build/trace.cmdbuild/build.cmd ,就可以将整个项目的包,打包到一个js文件里面[ js/build/main.js ]。其中 build/r.js 是的RequireJS 官方的打包脚本。

页面嵌入js的对比:

打包前的js引入方式[ dev/index.html ]:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>开发/测试环境页面</title>
    <script type="text/javascript" src="../js/lib/jquery/jquery-1.9.1.min.js"></script>
    <script type="text/javascript" src="../js/lib/require/require-2.1.6.js"></script>
</head>
<body>

<script type="text/javascript">
    requirejs.config({
        baseUrl: "../js",
        paths: {
            own: 'lib/own'
        },
        urlArgs: "20141111"
    });
    require(['app']);
</script>
</body>
</html>

打包后的引入pro/index.html ]

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>产品环境页面</title>
    <script type="text/javascript" src="../js/lib/jquery/jquery-1.9.1.min.js"></script>
    <script type="text/javascript" src="../js/lib/require/require-2.1.6.js"></script>
</head>
<body>

<!-- 这个就是打包后的js -->
<script type="text/javascript" src="../js/build/main.js"></script>
<script type="text/javascript">
    requirejs.config({
        baseUrl: "../js",
        paths: {
            own: 'lib/own'
        },
        urlArgs: "20141111"
    });
    require(['app']);
</script>
</body>
</html>

没了

文章分类 前端技术, 经验分享

发表评论