2016-11-21 1 views
1

J'ai utilisé RequireJS et cela fonctionne parfaitement. J'utilise beaucoup de "window.document" pour manipuler différents éléments DOM, mais quand j'essaie de l'optimiser avec r.js je reçois un ReferenceError: window is not defined qui se produit uniquement avec r.js."ReferenceError: fenêtre n'est pas définie" lors de la compilation avec r.js

Voici un exemple minimal de code qui reproduit la question:

index.html:

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8"> 
</head> 
<body > 
<div id="commentbox"> 

</div> 
<script data-main="code/main" src="code/require.js"></script> 
</body> 
</html> 

main.js:

require(["roomManager"], function (roomManager){ 
return { 

} 
}); 

roomManager.js:

define(["commentManager"], function(commentManager){ 
    var commentHand = new commentManager.commentHand(); 
    commentHand.init(); 


    return{ 

    } 
}); 

commentManager.js:

define([], function(){ 
    function commManager(getDisplayIdVariable){ 
     var messagebox = window.document.getElementById("commentbox"); 

     this.init = function(){ 
      messagebox.innerHTML = "hi!"; 
     } 
    } 
return{ 
     commentHand : commManager 
} 
}); 

Cette version fonctionne correctement sans r.js mais lorsque je tente de le compiler en exécutant r.js main.js. Je reçois ceci:

var messagebox = window.document.getElementById("commentbox); 


ReferenceError: window is not defined 
     at new new commManager 

Répondre

1

Vous ne pouvez pas faire r.js main.js. D'une part, vous devez spécifier -o pour que r.js effectue l'optimisation. (r.js peut être utilisé pour d'autres choses.)

Vous devez également transmettre la configuration à r.js, dans un fichier ou sur la ligne de commande. Une possibilité pour vous seriez:

r.js -o name=main out=built.js 

J'ai essayé avec le code que vous présentez dans votre question et je reçois aucune erreur. Je suggère fortement d'aller sur this documentation pour r.js.