2015-04-28 21 views
16

Dalla Meteor docs:Che cosa fa api.imply?

dare agli utenti di questo pacchetto di accesso ad un altro pacchetto (passando nella stringa packagename) o un insieme di pacchetti (passando in un array di stringhe [packagename1, packagename2]).

Non ho idea di cosa significhi.
Da this question So che imply può essere utilizzato con use.

Cosa fa api.imply?
Qual è esattamente la differenza tra api.use e api.imply?

risposta

16

api.use dà un accesso pacchetto per altri pacchetti simboli esportati.

Per esempio è necessario api.use("random") (see how it's done in the accounts-base package) se si desidera utilizzare il simbolo Random in un codice di pacchetto (see how the randompackage.js is api.exporting Random).

Tuttavia, meteor add ing accounts-base non consentirebbe a tutta l'applicazione di accedere ai pacchetti utilizzati (random in questo caso). Se la tua app ha bisogno di random, dovrai comunque effettuare il meteor add.


api.imply invece, dà l'intera applicazione di accedere a tale pacchetto simboli esportati.

Ad esempio, see how accounts-google is api.implying accounts-base.

accounts-base is responsible for exporting the Accounts symbol, quando meteor add accounts-google, non solo accounts-base è aggiunto anche nelle vostre dipendenze delle applicazioni, ma accounts-base simboli sono anche resi disponibili nella vostra app, proprio perché era implicito.


accounts-base è sia utilizzando Accounts nel proprio codice (api.use) ed esportare i suoi simboli dipendenze a tutta l'app (api.imply).

api.imply può essere utilizzato per creare "pacchetti shadow" che stanno semplicemente inserendo altri pacchetti.

Per esempio, ad un certo punto MDG rinominato il pacchetto showdown a markdown, potrebbero semplicemente hanno dichiarato di meteor remove showdown && meteor add markdown, ma avrebbe richiesto azioni sugli utenti finali.

Quello che hanno invece è mantenere il pacchetto showdown e solo make it implying the new markdown package.

+4

ho assunto' api.export' sempre esportato nel progetto completo! In realtà, è usato per esportare oggetti che possono poi essere importati in diversi modi: per l'intero progetto ('meteor add'), per l'ambito di un pacchetto (' api.use') o di entrambi ('api.imply'). Grazie per gli approfondimenti! –

+0

Questo concetto è praticamente lo stesso della riesportazione nei pacchetti NPM, ad esempio in ES6: 'export {Foo} da 'other-package'' o in CommonJS:' exports.Foo = require (' other-package ') .Foo'. Meteor 1.3 supporta subito i moduli NPM, solo 'npm install' nella directory principale della tua app, quindi' require() 'o' importa' tutto ciò che ti serve nel codice dell'app (o scrivi pacchetti che riesportano cose, e facoltativamente li pubblicano su NPM anziché su Atmosphere). – trusktr

+0

Forse sto fraintendendo questo, ma non capisco davvero la differenza tra la meteor aggiunta di un pacchetto, che lo rende esplicitamente elencato/definito, e api.implicandolo. Sembra che essenzialmente facciano la stessa cosa, ma api.imply significa che ora hai potenzialmente a disposizione un sacco di pacchetti difficili da trovare/mantenere perché sono disseminati in un assortimento di definizioni di pacchetti. Ho ragione su questo, e se sì, qual è la forza in esso sopra aggiungere meteor? – dudewad

0

Se hai qualcosa nella vostra applicazione che consuma api da package:name e installare solo comprime package:dependant che ha una package:name come dipendenza, ma non si utilizza imply qui, il vostro api da package:name non funziona in app. Funzionerà solo nel pacchetto package:dependant. È necessario utilizzare imply se si desidera usare qualcosa da package:name fuori della vostra package:dependant

Non so se questo è chiaro;)

+0

Ancora non capisco. Devo usare 'implica 'per far funzionare l'API del primo pacchetto nell'intera app? E se uso 'imply', esporterà questa API ovunque? –

+0

Installerà 'package: name' e sarà possibile utilizzarlo ovunque nell'app. Proprio come quando si esegue il pacchetto 'meteor add: nome' – juliancwirko