Я спросил здесь: node.js требует наследования?
и мне сказали, что я могу установить переменные для глобальной области видимости, опуская переменную.
Это не работает для меня.
то есть:
_ = require('underscore');
Не делает _ доступным для необходимых файлов. Я могу установить с экспрессом app.set
и иметь его в другом месте, хотя.
Может кто-нибудь подтвердить, что это должно работать? Спасибо.
javascript
node.js
express
Гарри
источник
источник
exports
. Это намного лучше.Ответы:
Вы можете использовать
global
так:источник
window
это глобальный объект.document
является собственностьюwindow
.В узле вы можете установить глобальные переменные через объект "global" или "GLOBAL":
или полезнее ...
Из источника узла вы можете видеть, что они связаны друг с другом:
В приведенном выше коде «это» является глобальным контекстом. В модульной системе commonJS (которую использует узел) объект «this» внутри модуля (т. Е. «Ваш код») НЕ является глобальным контекстом. Чтобы убедиться в этом, см. Ниже, где я извергаю объект «этот», а затем гигантский объект «ГЛОБАЛЬНЫЙ».
** Примечание: в отношении настройки "GLOBAL._", в общем, вы должны просто сделать
var _ = require('underscore');
. Да, вы делаете это в каждом отдельном файле с подчеркиванием, как в Javaimport com.foo.bar;
. Это облегчает понимание того, что делает ваш код, потому что связи между файлами являются «явными». Слегка раздражает, но это хорошо. .... Это проповедь.Из каждого правила есть исключение. У меня был точно ровно один экземпляр, где мне нужно было установить «GLOBAL._». Я создавал систему для определения «конфигурационных» файлов, которые были в основном JSON, но были «написаны на JS» для большей гибкости. Такие конфигурационные файлы не имели операторов 'require', но я хотел, чтобы у них был доступ к подчеркиванию (система ENTIRE была основана на шаблонах подчеркивания и подчеркивания), поэтому перед оценкой "config" я бы установил "GLOBAL._". Так что да, для каждого правила есть где-то исключение. Но вам лучше иметь чертову вескую причину, а не просто «я устал набирать« требовать », поэтому я хочу порвать с соглашением».
источник
.js
файл и позвонитьrequire
перед экспортом конфигов?Другие решения, использующие ключевое слово GLOBAL, - это кошмар для поддержания / читабельности (+ загрязнение пространства имен и ошибки), когда проект становится больше. Я видел эту ошибку много раз, и мне было трудно ее исправить.
Используйте файл JS, затем используйте экспорт модуля.
Пример:
globals.js
Тогда, если вы хотите использовать их, используйте требуют.
источник
globals.domain
хотя?Как насчет глобального пространства имен, как
global.MYAPI = {}
Отредактируйте после комментария Камило-Мартина : Все другие постеры говорят о плохой схеме. Таким образом, оставляя это обсуждение в стороне, лучший способ определения глобальной переменной (вопрос OP) - через пространства имен.
@tip: http://thanpol.as/javascript/development-using-namespaces
источник
require
! Можно использовать пространства имен, но не использовать всеglobal.foo = global.foo || {}
файлы или что-то в этом роде. Требуется файл, который определяет пространство имен. Сделай это для детей.Вы можете просто использовать глобальный объект.
источник
Я согласен с тем, что использование глобального пространства имен GLOBAL для установки чего-либо глобального является плохой практикой, и я не использую его вообще в теории ( теоретически это рабочее слово). Однако (да, действующий) я использую его для установки пользовательских классов ошибок:
Да, здесь табу, но если ваш сайт / проект использует пользовательские ошибки повсеместно, вам, в основном, нужно определить его везде или, по крайней мере, где-то:
Определение моих пользовательских ошибок в глобальном пространстве имен избавляет меня от необходимости требовать библиотеки пользовательских ошибок. Imaging выбрасывает пользовательскую ошибку, где эта пользовательская ошибка не определена.
Также, если это не так, пожалуйста, дайте мне знать, так как я только начал делать это недавно
источник