Ответ 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
пакет.