首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >grunt contrib-requirejs不会跟踪所有依赖项

grunt contrib-requirejs不会跟踪所有依赖项
EN

Stack Overflow用户
提问于 2014-02-09 08:05:28
回答 2查看 242关注 0票数 0

我正在尝试做r.js优化。我有一个使用knockoutjs构建的示例项目https://github.com/noppanit/requirejs-optimization-example,我使用grunt-contrib requirejs。一切都很好。但是我认为grunt-contrib-requirejs并不能跟踪我所有的依赖项

这是我的Gruntfile.js

代码语言:javascript
复制
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']);
};

下面是我如何包含我的优化文件

代码语言:javascript
复制
<!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

代码语言:javascript
复制
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

代码语言:javascript
复制
require(['config'], function() {
    require(['main-call','knockout']);
});

在我运行grunt之后

这是我从optimized.js得到的东西

代码语言:javascript
复制
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的组合,我希望所有的javascript文件,包括requirejs和knockoutjs都会被包括在内。因此浏览器只需调用一次即可获得优化后的javascript。

EN

回答 2

Stack Overflow用户

发布于 2014-08-22 19:56:11

选项1:显式声明依赖项

代码语言:javascript
复制
require(['jquery', 'knockout', 'main-call', 'config'], function($, ko, mainCall) {
    //the code
});

选项2:向包含的列表中添加依赖项

代码语言:javascript
复制
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']);
};
票数 1
EN

Stack Overflow用户

发布于 2014-08-22 04:27:36

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

通常,在配置文件的末尾,您需要主文件(在本例中为main-call、knockout)。然后,优化应该正确地进行。application.js未被读取

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21653407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档