Наткнулся на странное поведение в node
. У меня есть скомпилированная программа emscripten, которую я хочу использовать в качестве библиотеки. emscripten
использует переменную Module
для управления поведением во время выполнения и генерирует код, подобный ./lib/g.js
ниже. В браузере Module
имеет правильный псевдоним от глобального, определенного в index.js
, до локального var
в ./lib/g.js
. Однако в node
этого, похоже, нет. Конструкция: var Module = Module || {};
стирает мой глобальный Module
.
index.js
:
global.Module = { name: 'Module' };
var g = require ( './lib/g.js' );
./lib/g.js
:
console.log ( 'Module: ', Module );
var Module = Module || {};
Выход node index.js
:
Module: undefined
Я предполагаю, что в g.js
Module
поднимается и разыменовывается только в локальной области видимости, маскируя глобальную версию (в global.Module
). Может ли кто-нибудь предложить обходной путь?
Эту проблему можно решить, отредактировав созданный emscripten
код для использования var Module = global.Module || {}
. Хотя это возможный обходной путь, я бы не стал редактировать код, сгенерированный emscripten
.
Module
, определенный в более высокой области, тоvar Module = Module || {}
просто создаст для него псевдоним в этой области. Доступ к свойствамModule
будет прекрасно работать для доступа к свойствам переменной с более высокой областью действия. - person jfriend00   schedule 15.11.2014node
. Не удалось найти правила области видимости переменных дляnode
, охватывающие этот случай. - person Daniel Blezek   schedule 16.11.2014Module
, который использует emscripten, и глобальнымModule
, который использует node. Возможно, они оба пытаются определить/использовать одно и то же, или один из них переопределяет и переопределяет другой. - person jfriend00   schedule 16.11.2014