Я выполнил документацию, чтобы поместить константы в файл lib/constants.js
.
Вопрос: Как получить доступ к этим константам на стороне клиента html и js?
Я выполнил документацию, чтобы поместить константы в файл lib/constants.js
.
Вопрос: Как получить доступ к этим константам на стороне клиента html и js?
Вам нужно будет сделать их глобальными переменными, чтобы другие файлы могли их видеть.
/lib/constants.js
THE_ANSWER = 42; // note the lack of var
/client/some-other-file.js
console.log(THE_ANSWER);
/lib/constants.coffee
@THE_ANSWER = 42
/client/some-other-file.coffee
console.log THE_ANSWER
Переменные в Метеор - это область с файлами.
Обычно a var myVar
переходит в глобальный контекст Node, однако в Meteor он остается вложенным в файл (что делает его действительно полезным для написания более прозрачного кода). Что происходит, так это то, что Meteor будет обертывать все файлы в IIFE, просматривая переменные в этой функции и тем самым эффективно в файле.
Чтобы определить глобальную переменную, просто удалите ключевое слово var
/let
/const
, и Meteor позаботится об экспорте. Вы должны создавать функции через один и тот же механизм (myFunc = function myFunc() {}
или myFunc = () => {}
). Этот экспорт будет либо на стороне клиента, если код находится в каталоге client
, либо на стороне сервера, если он находится в каталоге server
, либо оба, если он находится в некотором другом не очень специальном directories.
Не забывайте следовать этим правилам:
main.
, загружаются последнимиlib/
Теперь вы можете столкнуться с проблемой на стороне сервера, если сразу попытаетесь получить доступ к этой глобальной переменной, но Meteor еще не создала экземпляр, потому что она не была запущена над файлом, определяющим переменную. Таким образом, вам нужно бороться с именами файлов и папок или, может быть, попытаться обмануть Meteor.startup()
(удачи с этим). Это означает менее читаемый, хрупкий код, зависящий от местоположения. Один из ваших коллег перемещает файл, и ваше приложение ломается.
Или, может быть, вам просто не нужно возвращаться к документации каждый раз, когда вы добавляете файл для запуска пятиэтапного процесса, чтобы узнать, где разместить этот файл и как его назвать.
Существует два решения этой проблемы: Meteor 1.3:
Meteor 1.3 (в настоящее время в бета-версии) позволяет использовать modules в вашем приложении с помощью пакета modules
(meteor add modules
или api.use('modules')
).
Модули проходят долгий путь, вот простой пример, взятый непосредственно из ссылки выше:
Файл: a.js
(сначала загружается с традиционными правилами порядка загрузки):
import {bThing} from './b.js';
// bThing is now usable here
Файл: b.js
(второй загружается с традиционными правилами порядка загрузки):
export const bThing = 'my constant';
Meteor 1.3 позаботится о загрузке файла b.js
до a.js
, так как это было явно сказано.
Последний вариант объявления глобальных переменных - это создание пакета.
meteor create --package global_constants
Каждая переменная, объявленная без ключевого слова var
, экспортируется во весь пакет. Это означает, что вы можете создавать свои переменные в своих файлах, точно упорядочить порядок загрузки с помощью api.addFiles
, контролировать, должны ли они идти на клиент, сервер или и то и другое. Он также позволяет api.use
этим переменным в других пакетах.
Это означает четкий, многоразовый код. Вы хотите добавить константу? Либо сделайте это в одном из уже созданного файла, либо создайте его и api.addFiles
.
Подробнее о управлении пакетами вы можете узнать в документе.
Здесь цитата из "Структурирование вашего приложения" :
Это [использование пакетов] является конечной в разделении кода, модульности и повторного использования. Если вы поместите код для каждой функции в отдельный пакет, код для одной функции не сможет получить доступ к коду для другой функции, кроме как через экспорт, делая каждую зависимость явной. Это также позволяет провести самое простое независимое тестирование функций. Вы также можете публиковать пакеты и использовать их в нескольких приложениях с помощью
meteor add
.
Удивительно, что объединить два подхода с Meteor 1.3. Модули легче и легче записывать, чем пакеты, поскольку их использование - это одна строка export
и как много import
по мере необходимости, а не вся процедура создания пакета, но не как доказательство с ошибкой (забыли написать import
строка в верхней части файла) в виде пакетов.
Хорошая ставка заключалась бы в том, чтобы сначала использовать модули, а затем переключиться на пакет, как только они устали писать или если из-за этого произошла ошибка (перепутали import
,...).
Просто убедитесь, что не полагайтесь на традиционный порядок загрузки, если вы делаете что-то большее, чем POC.