Вот 2 файла:
// main.js
require('./modules');
console.log(name); // prints "foobar"
// module.js
name = "foobar";
Когда у меня нет «вар», он работает. Но когда у меня есть:
// module.js
var name = "foobar";
имя будет неопределенным в main.js.
Я слышал, что глобальные переменные - это плохо, и вам лучше использовать "var" перед ссылками. Но разве в этом случае хороши глобальные переменные?
javascript
node.js
global-variables
never_had_a_name
источник
источник
exports
объект.global.foo = 'bar'
а затем получить доступ вfoo
любом месте, где захотите ... но, как я сказал в своем первоначальном ответе, это почти никогда не бывает хорошо.Я не могу найти сценарий, в котором глобальный
var
вариант является лучшим вариантом, конечно, вы можете его иметь, но взгляните на эти примеры, и вы можете найти лучший способ добиться того же:Сценарий 1. Поместите все в файлы конфигурации
Вам нужно какое-то значение, которое одинаково во всем приложении, но оно меняется в зависимости от среды (производственная, разработанная или тестовая), например, от типа почтовой программы, которые вам понадобятся:
и
(сделайте аналогичный конфиг и для разработчика)
Чтобы решить, какая конфигурация будет загружена, создайте основной файл конфигурации (он будет использоваться во всем приложении)
И теперь вы можете получить такие данные :
Сценарий 2: использование файла констант
И используйте это так
Сценарий 3: использование вспомогательной функции для получения / установки данных
Не большой поклонник этого, но, по крайней мере, вы можете отслеживать использование `` имени '' (цитируя пример OP) и проводить проверки.
И использовать это
Возможен вариант использования, когда нет другого решения, кроме глобального
var
, но обычно вы можете поделиться данными в своем приложении, используя один из этих сценариев, если вы начинаете использовать node.js (как я был когда-то назад), попробуйте чтобы организовать то, как вы обрабатываете данные там, потому что они могут очень быстро стать беспорядочными.источник
Если нам нужно поделиться несколькими переменными, используйте следующий формат
использование
источник
Сохраните любую переменную, к которой нужно предоставить общий доступ, как один объект. Затем передайте его загруженному модулю, чтобы он мог получить доступ к переменной через ссылку на объект.
В другом файле ..
источник
переменная, объявленная с ключевым словом var или без него, была привязана к глобальному объекту. Это основа для создания глобальных переменных в Node путем объявления переменных без ключевого слова var. Хотя переменные, объявленные с ключевым словом var, остаются локальными для модуля.
см. эту статью для дальнейшего понимания - https://www.hacksparrow.com/global-variables-in-node-js.html
источник
С другим мнением, я думаю, что
global
переменные могут быть лучшим выбором, если вы собираетесь публиковать свой кодnpm
, потому что вы не можете быть уверены, что все пакеты используют одну и ту же версию вашего кода. Поэтому, если вы используете файл для экспортаsingleton
объекта, здесь возникнут проблемы.Вы можете выбрать
global
,require.main
или любые другие объекты , которые являются общими для всех файлов.Скажите, пожалуйста, есть ли какие-то лучшие решения.
источник