使用r.js打包js文件

之前的文章里有介绍requirejs的基本使用方法,但是直接使用requirejs会暴露出一个问题,就是当模块过多的时候,requirejs就会引入许多js文件,大大的增加了请求数,那么有的朋友就要说了,我们自己压缩那些模块文件不就行了么,其实仔细想想这样到底行不行,答案是行!但是很麻烦:

1. 首先一般我们写模块时不会去定义模块名字,因为模块名字默认就是js文件名字,如果自己手动去写模块名,就增加了额外的工作量。

2. 加载顺序的问题,自己手动压缩,就要严格把控好模块的先后顺序(特别是有jquery及jquery插件的情况下),否则很容易出错。

针对这些问题,requirejs给出了解决方案,就是r.js,r.js就是针对用requirejs进行模块化开发后的打包压缩问题的。r.js下载

那么下面就来介绍如何使用r.js来打包压缩我们的模块们:

1. 把r.js放在我们的项目根目录中。

2. 新建一个built.js,内容如:

({
    baseUrl: './static/scripts/src/',
    name: "../../../main",
    paths: {
        'jquery': "vendor/jquery/jquery",
        'jquery.email': "plugin/jquery.email",
        'aaa': "moudle/aaa/aaa",
        'bbb': "moudle/bbb/bbb",
        'ccc': "moudle/ccc/ccc"
    },
    shim: {
        'jquery': {
            exports: "$"
        },
        'jquery.email': {
            deps: ["jquery"],
            exports: "jQuery.fn.hEmail"
        }
    },
    out: "main-built.js",
})

 built其实就是一个打包压缩的配置文件,这里我用的是之前文章初始requirejs(一)中的例子,这样看built.js的代码是不是很熟悉,就像require的配置js一样?事实就是差不多的,那我们来解释下不大一样的部分,name其实就是那个requirejs的入口文件,output就是打包之后的文件名,还有个叫dir的属性,我这里没有使用,是用来配置输出的文件目录的(比如dir: ../production,这样就直接输出到生产环境了),当然还有其他的属性,这里就不介绍了,详细请参考官网

下面我们来看看输出过程:

最后生成了main-built.js文件,然后我们试着把原先代码引用的地方替换掉,

<script data-main="main-built.js" src="static/scripts/src/vendor/require/require.js"></script>

结果,页面还是能正常显示,模块还是正常加载的,而且我们的js引用就变成了一个,大大的减少了请求数,完美!

原文地址:https://www.cnblogs.com/junhua/p/4397766.html