"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
}