【问题标题】:grunt-contrib-requirejs doesn't track all dependenciesgrunt-contrib-requirejs 不跟踪所有依赖项
【发布时间】:2014-08-22 19:56:11
【问题描述】:

我正在尝试进行 r.js 优化。我有这个示例项目https://github.com/noppanit/requirejs-optimization-example 用knockoutjs 构建,我使用grunt-contrib-requirejs。一切正常。但我认为 grunt-contrib-requirejs 并没有跟踪我所有的依赖项

这是我的 Gruntfile.js

module.exports = function(grunt){
    grunt.initConfig({
        requirejs: {
            compile: {
                    options: {
                        baseUrl: "./js",
                    paths: {
                        'knockout': 'vendors/knockout/knockout-3.0.0'
                    },
                        mainConfigFile: "js/config.js",
                        name: "application",
                        out: "js/optimized.js"
                    }
            }
        }
    });

    grunt.loadNpmTasks('grunt-contrib-requirejs');

    grunt.registerTask('default', ['requirejs']);
};

这是我包含优化文件的方式

<!DOCTYPE>
<html>
<head>
</head>

<body>
    <div>
        Name: <input type="text" data-bind="value: name"/>
    </div>
    <div>
        Surname: <input type="text" data-bind="value: surname" />
    </div>

    <span data-bind="text: fullname"></span>
</body>

<script type="text/javascript" src="js/require.js" data-main="js/optimized">
</script>

</html>

这是我的 config.js

require.config({
    baseUrl: './js',
    paths: {
        'jquery': 'vendors/jquery/jquery-1.11.0',
        'knockout': 'vendors/knockout/knockout-3.0.0',
        'main-viewmodel': 'viewmodels/main_viewmodel',
        'main-call': 'viewmodels/main_call',
    }

});

这是我的 application.js

require(['config'], function() {
    require(['main-call','knockout']);
});

在我运行grunt之后

这是我从 optimize.js 中得到的结果

require.config({baseUrl:"./js",paths:{jquery:"vendors/jquery/jquery-1.11.0",knockout:"vendors/knockout/knockout-3.0.0","main-viewmodel":"viewmodels/main_viewmodel","main-call":"viewmodels/main_call"}}),define("config",function(){}),require(["config"],function(){require(["main-call","knockout"])}),define("application",function(){});

看起来只是 config.js 和 application.js 的组合,我希望包括 requirejs 和 knockoutjs 在内的所有 javascript 文件也将包括在内。因此,浏览器只需拨打一个电话即可获得优化的 javascript。

【问题讨论】:

  • 怎么不行?您是否在控制台上收到错误消息?
  • 当我更改为优化版本时,应用程序根本无法运行。

标签: javascript node.js optimization knockout.js requirejs


【解决方案1】:

选项 1:显式声明依赖项

require(['jquery', 'knockout', 'main-call', 'config'], function($, ko, mainCall) {
    //the code
});

选项 2:将依赖项添加到包含列表中

module.exports = function(grunt){
    grunt.initConfig({
        requirejs: {
            compile: {
                options: {
                    baseUrl: "./js",
                    paths: {
                        'knockout': 'vendors/knockout/knockout-3.0.0'
                    },
                    mainConfigFile: "js/config.js",
                    include: ['jquery', 'knockout', 'main-viewmodel', 'main-call'],
                    name: "application",
                    out: "js/optimized.js"
                }
            }
        }
    });

    grunt.loadNpmTasks('grunt-contrib-requirejs');

    grunt.registerTask('default', ['requirejs']);
};

【讨论】:

    【解决方案2】:

    我认为这是因为您正在优化配置文件,但配置文件没有任何依赖关系。这是它唯一优化的文件。

    通常在配置文件的末尾,您需要主文件(在您的情况下,主调用,淘汰赛)。然后优化应该正确发生。 application.js 没有被读取

    【讨论】:

      猜你喜欢
      • 2014-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 2016-05-07
      相关资源
      最近更新 更多