使用 r.js 来优化 require.js 文件

Posted

技术标签:

【中文标题】使用 r.js 来优化 require.js 文件【英文标题】:use r.js in order to optimize require.js files 【发布时间】:2013-03-21 05:28:36 【问题描述】:

我正在编写 jquery 插件。由于插件包含大量代码,我决定将代码分成几个文件并使用 require.js。我正在努力实现两件事:

    能够使用 require.js 和插件的分离版本运行我的测试页面,并由此能够调试代码。 能够使用 require.js 优化器(称为 r.js)并从这几个插件的文件中创建一个优化(合并和缩小)文件。

我的 index.html 包含:

<script data-main="js/site" src="js/vendor/require.js"></script>

我的 js/site.js 包含:

require([
    'jquery',
    ....
    ....
    'main' //<---- main plugin file
], function($) 

    $(function() 
        $('#elem').photosGrid();
    );
);

而我的 main.js 文件包含:

define([
    'photos-grid' //<---- Class that initialized and build the plugin
], function(PhotosGrid) 
    jQuery.fn.photosGrid = function(options) 
        var photosGrid = new PhotosGrid(this, options);
        this.data('photosGrid', photosGrid);
        return this;
    ;

    return jQuery;
);

为了配置r.js,我添加了build.js文件:

(
    baseUrl: '.',
    name: "main",
    out: "main-built.js"
)

当我运行我的 index.html 时,我的插件运行良好。但是当我运行node r.js 时,出现以下错误:

Error: Mismatched anonymous define() module

当我用名字定义 main.js 时:

define('module-name', ['photos-grid'], function(PhotosGrid)  .....

node r.js 没有返回错误但没有输出。此外,index.html 不加载 main.js ('photos-grid') 的依赖项,因此网站无法运行。

我做错了什么?如何正确使用 r.js?

【问题讨论】:

您确定您通过了-o 标志吗? (根据requirejs.org/docs/optimization.html#basics)你没有提到它,所以谁知道呢? @kryger:你说得对!谢谢!请为此创建一个答案。 【参考方案1】:

您忘记传递-o 标志以在优化器模式下运行r.js!更多详情在official docs

(...这似乎是one of the most popular problems 和r.js

【讨论】:

以上是关于使用 r.js 来优化 require.js 文件的主要内容,如果未能解决你的问题,请参考以下文章

require.js实现js模块化编程:RequireJS Optimizer

vue组件

JavaScript模块化-require.js,r.js和打包发布

require.js+backbone 使用r.js 在本地与生产环境 一键压缩的实现方式

r.js 配置文件 example.build.js 不完整注释

reuire代码优化之:r.js