r.js не компилирует правильные подпрограммы
Я могу успешно скомпилировать свои модули JS с помощью задачи Grunt requirejs, но я получаю undefined с любыми скриптами. Вот моя конфигурация
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"
}
}
})
Вот моя конфигурация requirejs из моего файла Grunt:
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
Он компилируется просто отлично и включает в себя мои файлы с прокладкой. Но всякий раз, когда я пытаюсь запустить скомпилированный JS, доступ к любому из моих подшитых скриптов не определен.
Не уверен, что вы подразумеваете под "доступом к любому из моих подшитых скриптов, не определены". Вы должны убедиться, что прошитые скрипты включены в правильный порядок. Также вы можете попробовать определить поддельный модуль для этого скрипта. Встраиваем JS-конфигурацию:
onBuildRead: function (moduleName, path, contents) {
if (moduleNam === 'spectrum'){
contents += '; define(' + moduleName + ', function(){ return window.spectrum; });';
}
return contents;
}
Вам нужно понять, что делает экспорт. После загрузки скрипта он будет искать эту переменную в глобальном пространстве имен. Я не думаю, что существует пространство имен jqueryui. Поэтому он всегда будет неопределенным, потому что он должен загружаться после jQuery, и он просто расширяет jQuery, поэтому модуль не может вернуть ничего полезного.
Надеюсь, это поможет.