Ich hatte unten ein Pull-Request-Feedback und fragte mich nur, wie ich Lodash richtig importieren kann.
Sie sollten has aus 'lodash / has' importieren. Für die frühere Version von lodash (v3), die an sich ziemlich schwer ist, sollten wir nur ein bestimmtes Modul / eine bestimmte Funktion importieren, anstatt die gesamte lodash-Bibliothek zu importieren. Ich bin mir nicht sicher über die neuere Version (v4).
import has from 'lodash/has';
vs.
import { has } from 'lodash';
Vielen Dank
javascript
lodash
babeljs
Rechnung
quelle
quelle
Antworten:
import has from 'lodash/has';
ist besser, weil lodash alle seine Funktionen in einer einzigen Datei enthält. Anstatt die gesamte 'lodash'-Bibliothek mit 100.000 zu importieren, ist es besser, nur diehas
Funktion von lodash zu importieren, die vielleicht 2.000 beträgt.quelle
'lodash/has'
ist kein separates Paket.has.js
Im Stammverzeichnis des regulären'lodash'
Pakets befindet sich eine Datei, die diese Dateiimport has from 'lodash/has'
(oderconst has = require ('lodash/has
) lädt. Es gibt separate Methodenpakete für npm, die jedoch die "Punktsyntax" verwenden :'lodash.has'
. Dies wäre auch ein gültiger Weg, wenn Sie nichts dagegen haben, für jede Methode, die Sie verwenden , ein separates Paket zu installieren (und dadurch möglicherweisepackage.json
massiv zu werden).import { has } from 'lodash'
dies genauso funktionieren würde, da der Rest entfernt wirdimport has from 'lodash-es/has'
Syntax verwendet hatte, bekam ich ein vollständiges Baumschütteln. ging von 526KB auf 184KB, siehe stackoverflow.com/questions/41991178/…Wenn Sie verwenden
webpack 4
, ist der folgende Code baumschüttelnd.Die zu beachtenden Punkte;
CommonJS-Module sind nicht baumschüttelbar, daher sollten Sie auf jeden Fall
lodash-es
die als ES-Module exportierte Lodash-Bibliothek anstelle vonlodash
(CommonJS) verwenden.lodash-es
's package.json enthält"sideEffects": false
, das Webpack 4 darüber informiert, dass alle Dateien im Paket nebenwirkungsfrei sind (siehe https://webpack.js.org/guides/tree-shaking/#mark-the-file-as-side -effektfrei ).Diese Informationen sind für das Baumschütteln von entscheidender Bedeutung, da Modulbündler keine Baumschütteldateien verwenden, die möglicherweise Nebenwirkungen enthalten, selbst wenn ihre exportierten Mitglieder nirgendwo verwendet werden.
Bearbeiten
Ab Version 1.9.0 unterstützt Parcel auch
"sideEffects": false
, daherimport { has } from 'lodash-es';
kann mit Parcel auch ein Baum geschüttelt werden. Es unterstützt auch das Baumschütteln von CommonJS-Modulen, obwohl es laut meinem Experiment wahrscheinlich ist, dass das Baumschütteln von ES-Modulen effizienter ist als CommonJS .quelle
import { ... } from 'lodash-es';
Mein Bundle" konvertiert und enthält weiterhin die gesamte Bibliothek.--module
Compiler - Option wiees6
,es2015
oderesnext
.modules: false
dass sie nicht in CommonJS transpiliert werden. Ich verwende jetzt die Lösung von Bruce, die zu funktionieren scheint. Vielen Dank für Ihren Beitrag, ich bin sicher, dass es funktioniert, aber ich habe einfach nicht das Setup dafür.import has from 'lodash-es/has'
undimport {has} from 'lodash-es'
beide Varianten machen Treeshaking bei der Verwendungwebpack-4
Importieren Sie bestimmte Methoden in geschweifte Klammern
Vorteile:
Nachteile:
quelle
_.map()
jedoch, dass die Syntax klar ist, dass eine externe Bibliothek verwendet wird. Ist esimport _ from 'lodash'
genauso effizient wie Ihr Vorschlag oder gibt es eine andere Möglichkeit, diese Syntax zu verwenden?_.map()
Syntax. Konnten Sie einen Weg finden, dies aufrechtzuerhalten, während Sie es6 importierten und Bäume schüttelten?Wenn Sie babel verwenden, sollten Sie sich babel-plugin-lodash ansehen . Es wird die Teile von lodash auswählen, die Sie für Sie verwenden, weniger Aufwand und ein kleineres Bündel.
Es gibt einige Einschränkungen :
quelle
Sie können sie als importieren
oder als
Das zweite ist viel optimierter als das erste, da nur die benötigten Module geladen werden
dann benutze so
quelle