Несовпадающий анонимный define() в requirejs/angular
Да, я знаю, что это спрашивалось здесь до бесконечности, и я уже знаю общее правило, что при использовании requirejs все, что вызывает define(), должно быть загружено через один тег script, как в:
<script src="js/lib/require.js" data-main="js/main"></script>
но я нахожусь в положении, когда общий совет, предложенный в отношении этой распространенной ошибки, недостаточен для решения моей конкретной проблемы, которая на первый взгляд кажется довольно простой.
Я работаю над приложением angular, requirejs и WinJS (просто, чтобы все было интересно), и столкнулся с проблемой этой ошибки. Мой основной HTML-файл действительно загружает несколько других исходных файлов JavaScript, используя отдельные теги скрипта, но ни один из них не вызывает define(). Я проверил. Дважды. Хорошо, три раза. Все остальные исходные файлы JS в приложении загружаются с помощью одного тега сценария, аналогичного описанному выше. Тем не менее, я все еще получаю эту ошибку.
Я попытался дать каждому из моих модулей приложения идентификатор requirejs:
define('myModule', ['dep1', 'dep2', etc.], function(dep1, dep2) {
return angular.module('app.mymod', ['winjs', etc.]);
});
но при таком подходе угловые модули, которые зависят от углового модуля, определенного, как описано выше, не могут разрешить эту зависимость (хотя requirejs теперь совершенно счастлив).
Три JS-файла, загружаемые вне requirejs:
<script src="//Microsoft.WinJS.2.0/js/base.js"></script>
<script src="//Microsoft.WinJS.2.0/js/ui.js"></script>
<script src="js/lib/dynamic-content-shim.js"></script>
Где последний исправляет среду выполнения WinJS, чтобы позволить динамическое создание контента. Среда выполнения WinJS фактически предоставляет функцию define в своем собственном пространстве имен, но она совершенно не связана с requirejs.
Так что же дает?