2015-04-28 6 views
16

Vom Meteor docs:Was macht api.imply?

Nutzer dieses Paket Zugriff auf ein anderes Paket geben (durch packagename im String übergeben) oder eine Sammlung von Paketen (durch in einer Reihe von Zeichenkette vorbei [packagename1, packagename2]).

Ich habe keine Ahnung, was es bedeutet.
Von this question Ich weiß, dass imply mit use verwendet werden kann.

Was macht api.imply?
Was ist genau der Unterschied zwischen api.use und api.imply?

Antwort

16

api.use ein Paket Zugang zu anderen Paketen gibt Symbole exportiert.

Zum Beispiel müssen Sie api.use("random") (see how it's done in the accounts-base package), wenn Sie das Random Symbol in einem Paketcode (see how the randompackage.js is api.exporting Random) verwenden möchten.

Allerdings meteor add ing accounts-base würde nicht Ihre gesamte Anwendung Zugriff auf die verwendeten Pakete geben (random in diesem Fall). Wenn Ihre App random benötigt, müssen Sie immer noch meteor add.


api.imply auf der anderen Seite, gibt die gesamte Anwendung den Zugriff auf das Paket exportiert Symbole.

Zum Beispiel see how accounts-google is api.implying accounts-base.

accounts-base is responsible for exporting the Accounts symbol, wenn Sie meteor add accounts-google, nicht nur accounts-base auch in Ihren Anwendungsabhängigkeiten hinzugefügt wird, aber accounts-base Symbole werden auch in Ihrer Anwendung, zur Verfügung gestellt speziell, weil es impliziert wurde.


accounts-base ist sowohl Accounts in seinem eigenen Code (api.use) und ihre Abhängigkeiten Symbole für die gesamte App Export (api.imply).

api.imply kann verwendet werden, um "Schattenpakete" zu erstellen, die nur einige andere Pakete einbeziehen.

Zum Beispiel an einem gewissen Punkt MDG das showdown Paket markdown umbenannt, konnten sie nur haben meteor remove showdown && meteor add markdown angegeben, aber es würde einige Aktionen auf den Endnutzer erforderlich ist.

Was sie stattdessen getan haben, ist das showdown Paket und nur make it implying the new markdown package.

+4

laufen lassen, nahm ich 'api.export' immer zum vollständigen Projekt exportierte! Tatsächlich wird es zum Exportieren von Objekten verwendet, die dann auf verschiedene Arten importiert werden können: zum gesamten Projekt ("meteor add"), zum Umfang eines Pakets ("api.use") oder zu beiden ("api.imply"). Danke für die Einblicke! –

+0

Dieses Konzept ist im Grunde das gleiche wie das Re-Exportieren in NPM-Paketen, zum Beispiel in ES6: 'export {Foo} von 'other-package' oder in CommonJS:' exports.Foo = require ('other-package') .Foo'. Meteor 1.3 unterstützt nun NPM-Module out-of-the-box, nur 'npm installieren' im Stammverzeichnis Ihrer App, dann' require() 'oder' import', was immer Sie in Ihrem App-Code benötigen (oder Pakete, die re-exportieren Dinge, und optional veröffentlichen sie auf NPM statt Atmosphäre). – trusktr

+0

Vielleicht verstehe ich das falsch, aber ich verstehe den Unterschied zwischen dem Hinzufügen eines Pakets durch den Meteor nicht wirklich, was es explizit aufgelistet/definiert, und es einfach macht. Es scheint, als würden sie im Wesentlichen dasselbe tun. aber das api.imply bedeutet jetzt, dass Sie möglicherweise eine Reihe von Paketen zur Verfügung haben, die schwer zu finden/zu warten sind, weil sie in einer Vielzahl von Paketdefinitionen übersät sind. Habe ich recht, und wenn ja, was ist die Stärke darin über Meteor-Add? – dudewad

0

Wenn Sie etwas in Ihrem App haben, die api von package:name verbraucht und Sie installieren nur package:dependant verpacken, die eine package:name als Abhängigkeit hat, aber Sie imply hier nicht verwenden, Ihre api von package:name wird in der App nicht funktionieren. Es funktioniert nur in package:dependant Paket. Sie müssen imply verwenden, wenn Sie etwas von package:name außerhalb package:dependant

Ich weiß nicht, verwenden, wenn dies klar;)

+0

Ich verstehe es immer noch nicht. Ich muss "implic" verwenden, damit die API des ersten Pakets in der gesamten App funktioniert. Und wenn ich 'implic' verwende, wird diese API überall exportiert? –

+0

Es wird 'Paket: Name' installiert und Sie können es überall in der App verwenden. Genau wie es ist, wenn Sie 'Meteor addieren Sie Paket: Name' – juliancwirko