В NodeJS я хотел бы просто выполнить файл и разрешить ему вносить изменения в глобальное пространство имен. Я знаю, что это не лучшая практика, и если бы я сам разрабатывал проект, я бы удостоверился, что каждый модуль экспортирует одну переменную.Выполнить файл в глобальной области, а не возвращать экспортированный объект
Я преобразовываю плохо структурированный проект SPA, связанный с тегами скриптов, в узел, и я хотел бы сделать это постепенно.
Прямо сейчас у меня есть:
require('./three.js')
Это версия threejs, которая просто заполняет глобальную переменную с именем «ТРИ» с содержанием модуля. Поскольку выполнение запроса неявно создает закрытие, для меня не создается глобальная переменная.
Так что я хотел бы просто запустить весь файл js и позволить ему создавать глобальные переменные.
Есть ли элегантный способ сделать это?
* «Поскольку исполнение требует неявно создает замыкание, глобальная переменная не создана для меня.» * Это действительно зависит от того, как 'three.js' реализован. Любой модуль может добавить что-то в глобальную область, выполнив 'global.foobar = 42'. Если 'three.js' экспортирует такое значение, как вы ожидали, вы можете добавить его к глобальному объекту с помощью' global.THREE = require ('...') '. –
Хорошая точка - эта версия three.js ожидает, что она просто будет конкатенирована на веб-странице с помощью тега сценария, поэтому у этого нет этого. Это было бы тривиально добавлено, если бы у меня был один модуль, но это зависит от 30+ тегов скриптов, и я не хочу их менять, пока я не смогу поэтапно проверить, когда я его сломаю. Первое, что я делаю, - это превратить все в один файл js вместо того, чтобы полагаться на html-встроенные скрипты. Я буду проходить и заменять каждый модуль, который я могу, с версиями, совместимыми с AMD, но это промежуточный шаг. – pixelpax
Вы не запускаете код node.js В глобальном пространстве имен. Любой модуль узла может напрямую обращаться к «глобальному» объекту, чтобы он мог взаимодействовать с глобальным пространством имен, если он этого захочет. Почему бы просто не сделать так? Или еще лучше узнать, как правильно программировать модули узлов и экспорта, поскольку это, как правило, лучший способ кодирования в первую очередь. – jfriend00