Подтвердить что ты не робот

Как я могу получить доступ к константам в файле lib/constants.js в Meteor?

Я выполнил документацию, чтобы поместить константы в файл lib/constants.js.

Вопрос: Как получить доступ к этим константам на стороне клиента html и js?

4b9b3361

Ответ 1

Вам нужно будет сделать их глобальными переменными, чтобы другие файлы могли их видеть.

JavaScript

/lib/constants.js

THE_ANSWER = 42; // note the lack of var

/client/some-other-file.js

console.log(THE_ANSWER);

CoffeeScript

/lib/constants.coffee

@THE_ANSWER = 42

/client/some-other-file.coffee

console.log THE_ANSWER

Ответ 2

Переменные в Метеор - это область с файлами.
Обычно a var myVar переходит в глобальный контекст Node, однако в Meteor он остается вложенным в файл (что делает его действительно полезным для написания более прозрачного кода). Что происходит, так это то, что Meteor будет обертывать все файлы в IIFE, просматривая переменные в этой функции и тем самым эффективно в файле.

Чтобы определить глобальную переменную, просто удалите ключевое слово var/let/const, и Meteor позаботится об экспорте. Вы должны создавать функции через один и тот же механизм (myFunc = function myFunc() {} или myFunc = () => {}). Этот экспорт будет либо на стороне клиента, если код находится в каталоге client, либо на стороне сервера, если он находится в каталоге server, либо оба, если он находится в некотором другом не очень специальном directories.
Не забывайте следовать этим правилам:

  • Файлы шаблонов HTML всегда загружаются перед всем остальным
  • Файлы, начинающиеся с main., загружаются последними
  • Затем загружаются файлы внутри любого каталога lib/
  • Далее загружаются файлы с более глубокими путями
  • Затем файлы загружаются в алфавитном порядке всего пути

Теперь вы можете столкнуться с проблемой на стороне сервера, если сразу попытаетесь получить доступ к этой глобальной переменной, но Meteor еще не создала экземпляр, потому что она не была запущена над файлом, определяющим переменную. Таким образом, вам нужно бороться с именами файлов и папок или, может быть, попытаться обмануть Meteor.startup() (удачи с этим). Это означает менее читаемый, хрупкий код, зависящий от местоположения. Один из ваших коллег перемещает файл, и ваше приложение ломается.
Или, может быть, вам просто не нужно возвращаться к документации каждый раз, когда вы добавляете файл для запуска пятиэтапного процесса, чтобы узнать, где разместить этот файл и как его назвать.

Существует два решения этой проблемы: Meteor 1.3:

1. Модули ES6

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, так как это было явно сказано.

2. Пакеты

Последний вариант объявления глобальных переменных - это создание пакета.

meteor create --package global_constants

Каждая переменная, объявленная без ключевого слова var, экспортируется во весь пакет. Это означает, что вы можете создавать свои переменные в своих файлах, точно упорядочить порядок загрузки с помощью api.addFiles, контролировать, должны ли они идти на клиент, сервер или и то и другое. Он также позволяет api.use этим переменным в других пакетах.
Это означает четкий, многоразовый код. Вы хотите добавить константу? Либо сделайте это в одном из уже созданного файла, либо создайте его и api.addFiles.

Подробнее о управлении пакетами вы можете узнать в документе.

Здесь цитата из "Структурирование вашего приложения" :

Это [использование пакетов] является конечной в разделении кода, модульности и повторного использования. Если вы поместите код для каждой функции в отдельный пакет, код для одной функции не сможет получить доступ к коду для другой функции, кроме как через экспорт, делая каждую зависимость явной. Это также позволяет провести самое простое независимое тестирование функций. Вы также можете публиковать пакеты и использовать их в нескольких приложениях с помощью meteor add.


Удивительно, что объединить два подхода с Meteor 1.3. Модули легче и легче записывать, чем пакеты, поскольку их использование - это одна строка export и как много import по мере необходимости, а не вся процедура создания пакета, но не как доказательство с ошибкой (забыли написать import строка в верхней части файла) в виде пакетов.

Хорошая ставка заключалась бы в том, чтобы сначала использовать модули, а затем переключиться на пакет, как только они устали писать или если из-за этого произошла ошибка (перепутали import,...).
Просто убедитесь, что не полагайтесь на традиционный порядок загрузки, если вы делаете что-то большее, чем POC.