r.js не компилирует правильные подпрограммы

106
11

Я могу успешно скомпилировать свои модули 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, доступ к любому из моих подшитых скриптов не определен.

спросил(а) 2013-05-24T00:32:00+04:00 7 лет, 4 месяца назад
1
Решение
89

Не уверен, что вы подразумеваете под "доступом к любому из моих подшитых скриптов, не определены". Вы должны убедиться, что прошитые скрипты включены в правильный порядок. Также вы можете попробовать определить поддельный модуль для этого скрипта. Встраиваем JS-конфигурацию:

onBuildRead: function (moduleName, path, contents) {
if (moduleNam === 'spectrum'){
contents += '; define(' + moduleName + ', function(){ return window.spectrum; });';
}
return contents;
}

Вам нужно понять, что делает экспорт. После загрузки скрипта он будет искать эту переменную в глобальном пространстве имен. Я не думаю, что существует пространство имен jqueryui. Поэтому он всегда будет неопределенным, потому что он должен загружаться после jQuery, и он просто расширяет jQuery, поэтому модуль не может вернуть ничего полезного.

Надеюсь, это поможет.

ответил(а) 2013-05-24T07:15:00+04:00 7 лет, 4 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема