Что делает api.imply?

Из Метеоритные документы:

Предоставьте пользователям этот пакет доступ к другому пакету (путем передачи строки packagename) или коллекции пакетов (путем передачи в массив строк [packagename1, packagename2]).

Я понятия не имею, что это значит.
Из этот вопрос Я знаю, что imply можно использовать с use.

Что делает api.imply?
Какая разница между api.use и api.imply?

Ответы

Ответ 1

api.use предоставляет пакетный доступ к другим экспортированным символам пакетов.

Например, вам нужно api.use("random") (посмотреть, как это делается в базовом пакете учетных записей), если вы хотите использовать символ Random в пакете code (посмотреть, как Random package.js api.export ing Random).

Однако meteor add ing accounts-base не предоставит вашему приложению доступ к его используемым пакетам (Random в этом случае). Если вашему приложению требуется Random, вам все равно нужно meteor add его.


api.imply, с другой стороны, дает всему приложению доступ к этим экспортированным символам пакета.

Например, посмотреть, как accounts-google есть api.imply ing accounts-base.

accounts-base отвечает за экспорт символа Accounts, когда вы meteor add accounts-google не только добавляет accounts-base в зависимости от вашего приложения, но символы accounts-base также доступны в вашем приложении, в частности, потому что это подразумевалось.


accounts-base использует Accounts в своем собственном коде (api.use) и экспортирует свои символы зависимостей во все приложение (api.imply).

api.imply можно использовать для создания "теневых пакетов" , которые просто втягиваются в некоторые другие пакеты.

Например, в какой-то момент MDG переименовал пакет showdown в markdown, они могли просто указать meteor remove showdown && meteor add markdown, но потребовали бы некоторых действий для конечных пользователей.

Вместо этого они сохраняют пакет showdown и просто делают его подразумевающим новый markdown пакет.

Ответ 2

Если у вас есть что-то в вашем приложении, которое потребляет api из package:name, и вы устанавливаете только пакет package:dependant, у которого есть package:name как зависимость, но вы не используете imply здесь, ваш api из package:name не будет работать в приложении. Он будет работать только в пакете package:dependant. Вам нужно использовать imply, если вы хотите использовать что-то из package:name вне вашего package:dependant

Я не знаю, ясно ли это;)