Dostaję ten błąd, gdy mogę przeglądać mój webapp po raz pierwszy (zwykle w przeglądarce z niepełnosprawnej cache).
Błąd: niezgodny anonimowy moduł define (): funkcja (wymóg) {
HTML :
<html>
.
.
.
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
<script> var require = { urlArgs: "v=0.4.1.32" }; </script>
<script data-main="assets/js/main" src="assets/js/libs/require.js"></script>
<script src="assets/js/ace/ace.js?v=0.4.1.32"></script>
</body>
</html>
JS :
$(function () {
define(function (require) {
// do something
});
});
Czy ktoś dokładnie wie, co oznacza ten błąd i dlaczego się dzieje?
plik źródłowy , krótka dyskusja na ten temat na stronie problemów github
javascript
jquery
requirejs
Adonis K. Kakoulidis
źródło
źródło
Wystąpił ten błąd, ponieważ dołączyłem plik requirejs wraz z innymi bibliotekami zawartymi bezpośrednio w tagu skryptu. Te librairies (jak lodash) używały funkcji define, która była sprzeczna z definicją require. Plik requirejs ładował się asynchronicznie, więc podejrzewam, że definicja wymagania została zdefiniowana po zdefiniowaniu przez inne biblioteki, stąd konflikt.
Aby pozbyć się tego błędu, dołącz wszystkie inne pliki js, używając requirejs.
źródło
Rozpoczynając pracę z actjs, natknąłem się na problem i jako początkujący z docs równie dobrze może być napisany w języku greckim.
Problem, na który natknąłem się, polegał na tym, że większość początkujących przykładów używa „anonimowych definicji”, kiedy powinieneś używać „identyfikatora ciągu”.
anonimowe definiuje
zdefiniuj z identyfikatorem ciągu
Używając define z identyfikatorem ciągu , unikniesz tego błędu, gdy będziesz próbował użyć modułów w następujący sposób:
źródło
Zgodnie z dokumentacją :
źródło
Należy pamiętać, że niektóre rozszerzenia przeglądarki mogą dodawać kod do stron. W moim przypadku miałem wtyczkę „Emmet we wszystkich obszarach tekstowych”, która zepsuła moje wymagania. Upewnij się, że żaden dodatkowy kod nie został dodany do twojego dokumentu, sprawdzając go w przeglądarce.
źródło
Istniejące odpowiedzi dobrze wyjaśniają problem, ale jeśli dołączenie plików skryptów przy użyciu lub wcześniej niż requireJS nie jest łatwą opcją ze względu na starszy kod, nieco hackerskim obejściem jest usunięcie wymagania z zakresu okna przed tagiem skryptu, a następnie przywrócenie go po słowach. W naszym projekcie jest to opakowane za wywołaniem funkcji po stronie serwera, ale w rzeczywistości przeglądarka widzi:
Nie jest to najładniejsze, ale wydaje się działać i zaoszczędziło wiele refraktorów.
źródło
script
elementami.(function(){ var define = undefined; // the UMD registration code won't find the global 'define' anymore! // generated content goes here })()
Lub możesz skorzystać z tego podejścia.
<script data-main="js/app.js" src="js/require.js"></script>
To, co zrobi, spowoduje załadowanie skryptu po załadowaniu require.js .
źródło