r.js合并实践

项目中用到require.js作生产时模块开发,但上线要合并压缩,幸亏它配套有r.js。下面就其用法说明一下。css

首先建一个目录,里面的结构以下:html

  • require.js能够到r.js项目下载
  • r.js能够到r.js项目下载
  • server.exe能够到avalon项目下载
  • jquery能够到JQ官网下载
  • avalon.js能够到avalon项目下载,并把里面的loader: true改成 loader: false,禁止自带的加载器。
  • main.js是用于配置加载选项的,如shim机制,有时还作一些初始化操做。
  • build.js是用于合并压缩的。

index.html的内容以下:node

<!doctype html>
<html>
    <head>
        <title>avalon+requirejs</title>
        <meta charset="utf-8">
        <script data-main="js/main" src="require.js"></script>
        <style type="text/css">
            .wrapper {
                width: 200px;
                height: 200px;
                background: gray;
            }
        </style>
    </head>
    <body>
        <div class="wrapper" ms-controller="xxx">{{str}}</div>
    </body>
</html>

main.js的内容如下:jquery


require.config({
    baseUrl: 'js',
    paths: {
        jquery: 'jquery',
        avalon: 'avalon'
    },
    shim: {
        jquery: {
            exports: "jQuery"
        },
        avalon: {
            exports: "avalon"
        }
    }
});

require(['avalon',"jquery"], function(avalon, Q) {
   Q("body").append("test jq")
   avalon.define("xxx", function(vm){
       vm.str = "加载成功"
   })
   avalon.scan()
});
 

由于main.js是至关于require.js的下一级目录中,须要设置baseUrl。因为avalon与jquery都不是根据严格的AMD定义它的库的结构(即,没有用define方法包裹起来),咱们须要经过shim机制处理一下。最后,咱们还手动加载avalon,进行扫描绑定!git

而后点击 server.exe,打开IE或chrome。页面加载,它就会加载require.js。require.js会找到加载它的那个script节点,发现它定义了data-main属性,根据它的值去加载js/main.js文件,而后它配置自身,而后加载avalon并完成页面的从新渲染!github

咱们再来看合并压缩。打开build.js,里面的内容以下:chrome


({
    baseUrl: '',
    paths: {
        jquery: 'jquery',
        avalon: 'avalon'
    },
    shim: {
        jquery: {
            exports: "jQuery"
        },
        avalon: {
            exports: "avalon"
        }
    },
    name: "main",
    out: "main-built.js"
})

你想r.js作压缩,还有一个必要条件,得安装node.js,这个不详谈了,本身百度谷哥。而后要安装r.js,window下打开控制台,输入npm install -g requirejs。而后定位到js目录下,输入node r.js -o build.js,而后该目录下就会多出main-built.js这个文件,表示合并成功!npm

而后上线时,将index.html中 data-main="js/main"改为 data-main="js/main-built"就好了。app

build.js用到的配置项,英文文档可见这里requirejs

相关文章
相关标签/搜索