Requirejs 使用Grunt构建Durandal(R.js+;文本)

Requirejs 使用Grunt构建Durandal(R.js+;文本),requirejs,gruntjs,durandal,requirejs-text,grunt-contrib-requirejs,Requirejs,Gruntjs,Durandal,Requirejs Text,Grunt Contrib Requirejs,我想使用Grunt来构建一个Durandal项目,因为Weyland仍然完全没有文档记录,并且不像Grunt那样标准 要做到这一点,grunt任务需要在优化期间拉入所有js和html文件,但我无法让RequireJS通过文本模块内联html文件 看起来weyland复制了文本文件,但我不知道它是如何让requirejs(在本例中是almond)实际使用它们的。我已经看到了,但是它需要在define调用中引用文本模块,而这不是在Durandal中完成的 我的gruntfile for requir

我想使用Grunt来构建一个Durandal项目,因为Weyland仍然完全没有文档记录,并且不像Grunt那样标准

要做到这一点,grunt任务需要在优化期间拉入所有js和html文件,但我无法让RequireJS通过文本模块内联html文件

看起来weyland复制了文本文件,但我不知道它是如何让requirejs(在本例中是almond)实际使用它们的。我已经看到了,但是它需要在
define
调用中引用文本模块,而这不是在Durandal中完成的

我的gruntfile for require使用此配置

requirejs: {
            build: {
                options: {                  
                    name: '../lib/require/almond-custom', //to deploy with require.js, use the build's name here instead
                    insertRequire: ['main'], //needed for almond, not require
                    baseUrl: 'src/client/app',
                    out: 'build/main-built.js',
                    mainConfigFile: 'src/client/app/main.js', //needed for almond, not require
                    wrap: true, //needed for almond, not require
                    paths: {
                        'text': '../lib/require/text',
                        'durandal':'../lib/durandal/js',
                        'plugins' : '../lib/durandal/js/plugins',
                        'transitions' : '../lib/durandal/js/transitions',
                        'knockout': '../lib/knockout-2.3.0',
                        'bootstrap': '../lib/bootstrap.min',
                        'jquery': '../lib/jquery-1.9.1',
                        'Q' : '../lib/q.min'
                    },
                    inlineText: true,
                    optimize: 'none',
                    stubModules: ['text']               
                }
            }
        }

作为Grunt的可能替代方案,我建议。它不像Grunt那样被广泛使用,但是有很好的文档记录,并且需要的配置要少得多。如果您从durandal骨架开始,所有配置都是为您配置的,包括内联html

Durandal还推荐并告诉您如何开始使用它:

您可以运行
makestart
开始开发,并运行
makedist
将所有内容打包发布。

您可能想试试。我使用它作为基于grunt的构建过程的一部分。有关示例,请参见

durandal: {
    main: {
        src: ['app/**/*.*', 'lib/durandal/**/*.js'],
            options: {
            name: '../lib/require/almond-custom',
                baseUrl: requireConfig.baseUrl,
                mainPath: 'app/main',
                paths: mixIn({}, requireConfig.paths, { 'almond': '../lib/require/almond-custom.js' }),
                exclude: [],
                optimize: 'none',
                out: 'build/app/main.js'
        }
    }
},

为什么需要优化html文件?这不是优化它们,而是捆绑它们。RequireJS的文本模块对文本进行异步调用,在Durandal的例子中,它使用HTML文件作为部分。R.js的目的是将您的js打包到一个文件中,将Durandal的“require”-d html打包是有意义的。支持此操作,但在Duranda的情况下,请求是动态的。我不知道如何做动态捆绑,或者它是否可能。这看起来很棒!文档需要让您知道,
name
是如何覆盖杏仁路径的,但这是一个坚实的开端。谢谢雷纳!这就是为什么文档调用
grunt build
task experiative:)。optimize属性做什么,它还需要什么其他值?我似乎找不到关于它的任何信息。选项被传递到
r.js
文档可在上找到。我从不让r.js优化输出,这有一个单独的
uglify
任务。@rainer.js优化的最佳方法是什么?使用HTMLStarterKitPro构建,我从Almond获得
TypeError:req.toul不是一个函数
,它没有在最终构建目录中进行动态加载。