"ReferenceError: окно не определено" при компиляции с помощью r.js

Я использую RequireJS, и он отлично работает. Я использую много "window.document" для манипулирования различными элементами DOM, но когда я пытаюсь оптимизировать его с r.js я получаю ReferenceError: window is not defined что происходит только с r.js,

Вот минимальный пример кода, который воспроизводит проблему:

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
}
});

Эта версия работает правильно без r.js но когда я пытаюсь скомпилировать его, запустив r.js main.js, Я получаю это:

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


ReferenceError: window is not defined
         at new new commManager

1 ответ

Вы не можете просто сделать r.js main.js,

Во-первых, вы должны указать -o чтобы r.js выполняет оптимизацию. (r.js могут быть использованы для других вещей.)

Вы также должны передать конфигурацию r.jsлибо в файле, либо в командной строке. Одна возможность для вас будет:

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

Я пробовал это с кодом, который вы показываете в своем вопросе, и я не получаю ошибок.

Я настоятельно рекомендую перейти к этой документации для r.js,

Если ваш код не является обязательным, вы можете использовать

 if (typeof window !== 'undefined') { 
       // Inside browser
} 
{
  // outside browser
}
Другие вопросы по тегам