Was ist der Unterschied zwischen browserify external vs. exclude?

10

Ich benutze browserify und versuche, es zu vermeiden, Zeit zu verschwenden, einschließlich jQuery und anderen require -less-Dateien, die ich über CDN geladen habe.

Sollte ich bundle.exclude('jquery') oder bundle.external('jquery') verwenden? Was ist der Unterschied? Ihr Output schien identisch zu sein, und die Dokumente sind mir unklar:

  

Verhindern Sie stattdessen, dass die Datei in das aktuelle Paket geladen wird   aus einem anderen Bündel referenzieren.

     

Wenn die Datei ein Array ist, wird jedes Element in der Datei externalisiert.

     

Wenn die Datei ein anderes Paket ist, wird der Inhalt dieses Pakets gelesen und   Aus dem aktuellen Bündel ausgeschlossen, da das Bündel in der Datei gebündelt wird.

  

Verhindert, dass der Modulname oder die Datei in der Datei in der Ausgabe angezeigt wird   Bündel.

     

Wenn Ihr Code versucht, () diese Datei anzufordern, wird sie geworfen, es sei denn, Sie haben   bot einen anderen Mechanismus zum Laden.

    
Scott Stafford 23.09.2015, 18:04
quelle

2 Antworten

3

Antwort:

Sie sollten exclude verwenden.

Erklärung:

Beide Funktionen verhindern, dass die Datei im Bundle enthalten ist. Für Ihren Anwendungsfall werden Sie wahrscheinlich nicht require jQuery verwenden, es spielt also keine Rolle, welche Sie verwenden. Dies ist jedoch, was passiert:

browserify verwendet module-deps , um Ihren Code zu untersuchen und alle require -Anweisungen zu finden, und teilt dann Modul mit -dept, wo das gewünschte Modul zu finden ist.

Wenn sich die Datei im Bundle befindet, muss sie lediglich den Schlüssel dafür in der Modulzuordnung des Bundles bereitstellen.

Wenn Sie angegeben haben, dass die Datei external ist, nimmt browserify an, dass Sie meinen, dass sie in einem anderen Bundle enthalten ist, und stellt so einen Pfad zur Datei bereit, vorausgesetzt, dass diese ID von einem anderen Bundle aufgelöst wird. Es ist ein wenig zusätzliche Buchhaltung beteiligt, um dies zu tun.

Wenn Sie exclude die Datei angeben, stellt browserify undefined für Modul-Deps bereit und es wird definitiv ein Feuer ausgelöst, wenn Sie versuchen, das Paket zu verwenden, das diese Datei benötigt. Dieser Ansatz ist jedoch nicht mit dem Aufwand verbunden, den Dateipfad zu verfolgen (was wirklich vernachlässigbar wäre) und "verschwendet keine Zeit" in anderen Paketen zu suchen, bevor er explodiert.

Einige Beispiele: Ich habe mit node-browserify / example / api experimentiert, um einige Bundles zu erstellen, und die folgenden Beispiele sind die Modul-Maps aus verschiedenen Tests, die für die Lesbarkeit etwas formatiert sind.

Vanille - lief so wie es im browserify Repo ist:

%Vor%

3 (main.js) hängt von ./foo ab, das ist 2

2 (foo.js) hängt von ./bar ab, das ist 1

1 (bar.js) hat keine Abhängigkeiten

Markiert api/bar.js als extern:

%Vor%

2 (main.js) hängt von ./foo ab, das ist 1

1 (foo.js) hängt von ./bar ab, das in einem anderen Bündel mit /browser/bar.js gekennzeichnet werden sollte

Markiert api/bar.js zum Ausschließen:

%Vor%

2 (main.js) hängt von ./foo ab, das ist 1

1 (foo.js) hängt von ./bar ab, was bei ZOMFG ist! Ich weiß nicht, wo es ist. Du brauchst ??! 1!

Der Ausschluss / externe Aufruf wurde entfernt und die Anforderung von ./bar von foo.js :

wurde entfernt %Vor%

2 (main.js) hängt von ./foo ab, das ist 1

1 (foo.js) hat keine Abhängigkeiten, die Welt ist peachy. Ich frage mich, ob sie bar mit anderen Mitteln geladen haben

    
Will 21.07.2016, 07:47
quelle
0
___ answer38498092 ___

Antwort:

Sie sollten %code% verwenden.

Erklärung:

Beide Funktionen verhindern, dass die Datei im Bundle enthalten ist. Für Ihren Anwendungsfall werden Sie wahrscheinlich nicht %code% jQuery verwenden, es spielt also keine Rolle, welche Sie verwenden. Dies ist jedoch, was passiert:

browserify verwendet module-deps , um Ihren Code zu untersuchen und alle %code% -Anweisungen zu finden, und teilt dann Modul mit -dept, wo das gewünschte Modul zu finden ist.

Wenn sich die Datei im Bundle befindet, muss sie lediglich den Schlüssel dafür in der Modulzuordnung des Bundles bereitstellen.

Wenn Sie angegeben haben, dass die Datei %code% ist, nimmt browserify an, dass Sie meinen, dass sie in einem anderen Bundle enthalten ist, und stellt so einen Pfad zur Datei bereit, vorausgesetzt, dass diese ID von einem anderen Bundle aufgelöst wird. Es ist ein wenig zusätzliche Buchhaltung beteiligt, um dies zu tun.

Wenn Sie %code% die Datei angeben, stellt browserify %code% für Modul-Deps bereit und es wird definitiv ein Feuer ausgelöst, wenn Sie versuchen, das Paket zu verwenden, das diese Datei benötigt. Dieser Ansatz ist jedoch nicht mit dem Aufwand verbunden, den Dateipfad zu verfolgen (was wirklich vernachlässigbar wäre) und "verschwendet keine Zeit" in anderen Paketen zu suchen, bevor er explodiert.

Einige Beispiele: Ich habe mit node-browserify / example / api experimentiert, um einige Bundles zu erstellen, und die folgenden Beispiele sind die Modul-Maps aus verschiedenen Tests, die für die Lesbarkeit etwas formatiert sind.

Vanille - lief so wie es im browserify Repo ist:

%Vor%

%code% (main.js) hängt von %code% ab, das ist %code%

%code% (foo.js) hängt von %code% ab, das ist %code%

%code% (bar.js) hat keine Abhängigkeiten

Markiert %code% als extern:

%Vor%

%code% (main.js) hängt von %code% ab, das ist %code%

%code% (foo.js) hängt von %code% ab, das in einem anderen Bündel mit %code% gekennzeichnet werden sollte

Markiert %code% zum Ausschließen:

%Vor%

%code% (main.js) hängt von %code% ab, das ist %code%

%code% (foo.js) hängt von %code% ab, was bei ZOMFG ist! Ich weiß nicht, wo es ist. Du brauchst ??! 1!

Der Ausschluss / externe Aufruf wurde entfernt und die Anforderung von %code% von %code% :

wurde entfernt %Vor%

%code% (main.js) hängt von %code% ab, das ist %code%

%code% (foo.js) hat keine Abhängigkeiten, die Welt ist peachy. Ich frage mich, ob sie %code% mit anderen Mitteln geladen haben

    
___ tag123browserify ___ Browserify ist ein Tool, das Node.js-Module für einen Webbrowser packt. ___ qstnhdr ___ Was ist der Unterschied zwischen browserify external vs. exclude? ___ qstntxt ___

Ich benutze %code% und versuche, es zu vermeiden, Zeit zu verschwenden, einschließlich jQuery und anderen %code% -less-Dateien, die ich über CDN geladen habe.

Sollte ich %code% oder %code% verwenden? Was ist der Unterschied? Ihr Output schien identisch zu sein, und die Dokumente sind mir unklar:

  

Verhindern Sie stattdessen, dass die Datei in das aktuelle Paket geladen wird   aus einem anderen Bündel referenzieren.

     

Wenn die Datei ein Array ist, wird jedes Element in der Datei externalisiert.

     

Wenn die Datei ein anderes Paket ist, wird der Inhalt dieses Pakets gelesen und   Aus dem aktuellen Bündel ausgeschlossen, da das Bündel in der Datei gebündelt wird.

  

Verhindert, dass der Modulname oder die Datei in der Datei in der Ausgabe angezeigt wird   Bündel.

     

Wenn Ihr Code versucht, () diese Datei anzufordern, wird sie geworfen, es sei denn, Sie haben   bot einen anderen Mechanismus zum Laden.

    
___ antwort43388346 ___

Der erste Teil von @ Wills Antwort ist auch wichtig:

  

Für Ihren Anwendungsfall werden Sie jQuery wahrscheinlich nicht benötigen, es spielt also keine Rolle, welches Sie verwenden

Ich denke, dass das Beispiel des OPs verwirrend ist, um den Unterschied zwischen exclude und external zu stellen. Wenn jQuery im Code nie benötigt () - wird, dann werden keine Fragen gestellt: Es wird niemals von browserify geparst und muss sowieso mit anderen Mitteln geladen werden.

wollte nur darauf hinweisen, wie ich das auch verwirrend fand.

    
___ tag123nodejs ___ Node.js ist ein ereignisbasiertes, nicht blockierendes asynchrones I / O-Framework, das die Google V8-JavaScript-Engine und die libuv-Bibliothek verwendet. Es wird für die Entwicklung von Anwendungen verwendet, die die Fähigkeit zum Ausführen von JavaScript sowohl auf dem Client als auch auf der Serverseite stark ausnutzen und daher von der Wiederverwendbarkeit von Code und dem Mangel an Kontextwechsel profitieren. ___
fabmlk 13.04.2017 09:22
quelle

Tags und Links