UPDATE: ho cercato la risposta di Jeff Barczewski qui sotto, e anche se non ho più l'errore sotto per i plugin, ora sto ottenendo un errore diverso:Requirejs non può compilare il modulo dojo-dipendente
Error: TypeError: Cannot read property 'normalize' of undefined
In module tree:
mymodule/core
at Object.<anonymous> (/usr/local/lib/node_modules/requirejs/bin/r.js:1193:35)
UPDATE 2: Dal momento che Jeff ha ragione sul fatto che i plug-in di Dojo non sono compatibili con RequireJS, ho deciso di passare a utilizzare grunt-dojo invece di creare dojo. Uso ancora RequireJS per il mio codice e semplicemente sovrascrivo le dipendenze del dojo per essere ignorato.
originale del messaggio:
Sto cercando di utilizzare grugnito per compilare un unico file JS per abbassare la quantità di richieste HTTP browser devono fare. Dal momento che Dojo 1.9 è compatibile con AMD, ho pensato di utilizzare il plugin requirejs di Grunt per ottimizzare il mio codice. Tuttavia, sto ricevendo il seguente errore, sia quando si utilizza il plugin Grunt e quando si utilizza r.js direttamente:
>> Tracing dependencies for: mymodule/core
>> TypeError: Cannot call method 'createElement' of undefined
>> In module tree:
>> mymodule/core
>> dojo/behavior
>> dojo/query
>> dojo/selector/_loader
{ [Error: TypeError: Cannot call method 'createElement' of undefined
In module tree:
mymodule/core
dojo/behavior
dojo/query
dojo/selector/_loader
at eval (eval at <anonymous> (/Users/EugeneZ/Workspace/presentment/web/js/node_modules/grunt-contrib-requirejs/node_modules/requirejs/bin/r.js:23690:38), <anonymous>:6:24)
]
originalError:
{ [TypeError: Cannot call method 'createElement' of undefined]
moduleTree:
[ 'dojo/selector/_loader',
'dojo/query',
'dojo/behavior',
'mymodule/core' ],
fileName: '/Users/EugeneZ/Workspace/presentment/web/js/dojo_release/dojo/selector/_loader.js' } }
Guardando il codice per il modulo _loader
Dojo, è ammesso che è in esecuzione in un browser e basandosi su il document
globale:
var document;
var testDiv = document.createElement("div");
Ma perché requirejs non consente questo? Ho cercato la loro documentazione e non riesco a trovare alcun modo per disattivare questo controllo. Presumo che sto fraintendendo qualcosa o facendo qualcosa di sbagliato, ma non riesco a capirlo.
Ecco la parte requirejs rilevanti delle mie Gruntfile.js:
requirejs: {
compile: {
options: {
'baseUrl': './',
'paths': {
'dojo': 'dojo_release/dojo',
'dojox': 'dojo_release/dojox',
'dijit': 'dojo_release/dijit',
'mymodule' : 'core/mymodule',
'osi': 'osi',
'demo': 'demo',
'slick': 'core/slick'
},
'name': 'mymodule/core',
'out': './mymodule.js'
}
}
}
Hai mai trovato una soluzione al problema "Impossibile leggere la proprietà 'normalizza' di non definito"? –
Non l'ho fatto. Alla fine, ho dovuto fare un passo indietro e chiedermi perché volevo usare r.js. Ho appena finito di usare il costruttore di dojo, che è molto più potente in ogni caso, anche se è anche molto più complesso, che è quello che inizialmente cercavo di evitare. – EugeneZ