内联require.js文本!使用Grunt

时间:2013-04-07 19:15:51

标签: javascript build requirejs gruntjs requirejs-text

我今天下午一直在尝试使用Grunt和Require JS。我是text模块的忠实粉丝,并使用它来引入我的模板。在非基于Grunt的项目中,我使用inlineTextstubModules需要JS选项来嵌入模板文件,它运行良好。但是,我无法与Grunt合作。

需要配置

require.config({
    paths: {
        // Using Bower for dependency management
        text: '../components/requirejs-text/text'
    }
});

用法

define(['text!template.html'], function (html) {
    // Do stuff with html
});

Gruntfile.js

requirejs: {
    dist: {
        options: {
            baseUrl: 'app/scripts',
            optimize: 'none',
            preserveLicenseComments: false,
            useStrict: true,
            wrap: true,
            inlineText: true,
            stubModules: ['text']
        }
    }
}

运行grunt后,我在控制台中收到各种错误:

  • /dist/components/requirejs-text/text.js
  • 上找不到档案
  • A Load timeout for modules: text!template.html_unnormalized2

然后有两个问题:

  • 它似乎没有内联(然后存根)text.js代码
  • 它似乎没有内联template.html文件

为什么它不起作用的任何想法?

1 个答案:

答案 0 :(得分:1)

您会看到错误,因为您需要向r.js表明text模块的位置。

您可以通过添加路径配置来实现:

requirejs: {
    dist: {
        options: {
          baseUrl: 'app/scripts',
          optimize: 'none',
          preserveLicenseComments: false,
          useStrict: true,
          wrap: true,
          inlineText: true,
          stubModules: ['text'],
          paths: {
             'text': 'libs/text' // relative to baseUrl
          }
       }
    }
}

然后,您需要将text.js模块下载到相应的目录中。

但为什么你的require.config无效?

因为r.js需要在某个时候评估配置。您在问题中没有提到您的require.config在哪里,但如果您想对其进行评估,则需要指明r.js的位置(请参阅https://github.com/jrburke/r.js/blob/master/build/example.build.js#L35):

requirejs: {
    dist: {
        options: {
          baseUrl: 'app/scripts',
          optimize: 'none',
          preserveLicenseComments: false,
          useStrict: true,
          wrap: true,
          inlineText: true,
          stubModules: ['text'],
          mainConfigFile: '../config.js' // here is your require.config

          // Optionally you can use paths to override the configuration
          paths: {
             'text': 'libs/text' // relative to baseUrl
          }
       }
    }
}