我今天下午一直在尝试使用Grunt和Require JS。我是text
模块的忠实粉丝,并使用它来引入我的模板。在非基于Grunt的项目中,我使用inlineText
和stubModules
需要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
Load timeout for modules: text!template.html_unnormalized2
然后有两个问题:
text.js
代码template.html
文件为什么它不起作用的任何想法?
答案 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
}
}
}
}