我能够通过Grunt的requirejs任务成功编译我的JS模块,但我正在使用任何填充程序脚本进行未定义。这是我的配置
requirejs.config({
"baseUrl": "../../../components/",
"paths": {
"less": "less.js/dist/less-1.3.3",
"datepicker": "jquery-ui/ui/jquery.ui.datepicker",
"jquery": "jquery/jquery",
"jqueryui": "jquery-ui/ui/jquery-ui",
"spectrum": "spectrum/spectrum",
"class": "class/class",
"underscore": "underscore-amd/underscore",
"d3": "d3/d3",
"nv": "nvd3/nv.d3",
"dataTables": "datatables/dataTables"
},
shim: {
less: {
exports: "less"
},
jqueryui: {
exports: "jqueryui"
},
spectrum: {
exports: "spectrum"
},
class:{
deps: [ 'jquery'],
exports: "class"
}
}
})
这是我的Gruntfile中的requirejs配置:
requirejs: {
dist: {
options: {
mainConfigFile: 'src/scripts/main.js',
out: '<%= yeoman.dist %>/scripts/main.js',
paths:{
"main" : "../final/src/scripts/main"
},
include:['main'],
preserveLicenseComments: false,
useStrict: true,
wrap: true
}
}
}
现在当我运行grunt requirejs:dist
它编译得很好,并且包含我的shimmed文件。但每当我尝试运行已编译的JS时,对我的任何shimmed脚本的访问都是未定义的。
答案 0 :(得分:0)
不确定“访问任何我的shimmed脚本是不确定的”是什么意思。您需要确保按正确的顺序包含填充脚本。您也可以尝试为该脚本定义伪模块。在您构建JS配置时添加:
onBuildRead: function (moduleName, path, contents) {
if (moduleNam === 'spectrum'){
contents += '; define(' + moduleName + ', function(){ return window.spectrum; });';
}
return contents;
}
您需要了解出口的作用。加载脚本后,它将在全局命名空间中查找该变量。我不认为有'jqueryui'命名空间。所以它总是未定义的,因为它必须在jQuery之后加载它只是扩展jQuery,所以模块不能返回任何有用的东西。
我希望有所帮助。