Recibí un comentario de solicitud de extracción a continuación, solo me preguntaba cuál es la forma correcta de importar lodash.
Será mejor que importes has desde 'lodash / has'. Para la versión anterior de lodash (v3) que por sí misma es bastante pesada, solo deberíamos importar un módulo / función específico en lugar de importar toda la biblioteca lodash. No estoy seguro acerca de la versión más reciente (v4).
import has from 'lodash/has';
vs
import { has } from 'lodash';
Gracias
javascript
lodash
babeljs
Cuenta
fuente
fuente
Respuestas:
import has from 'lodash/has';
es mejor porque lodash contiene todas sus funciones en un solo archivo, por lo que en lugar de importar toda la biblioteca 'lodash' a 100k, es mejor importar lahas
función de lodash, que es quizás 2k.fuente
'lodash/has'
no es un paquete separado. Hay un archivo llamadohas.js
en la raíz del'lodash'
paquete normal yimport has from 'lodash/has'
(oconst has = require ('lodash/has
) cargará ese archivo. No son paquetes de métodos por separado sobre la NGP, pero utilizan la "sintaxis con punto":'lodash.has'
. Esta también sería una forma válida de hacerlo si no te importa instalar un paquete separado para cada método que utilizas (y potencialmente hacer que seapackage.json
masivo como resultado).import { has } from 'lodash'
funcionaría de la misma manera, ya que el resto se eliminaráimport has from 'lodash-es/has'
sintaxis que obtuve la sacudida completa del árbol. pasó de 526 KB a 184 KB, consulte stackoverflow.com/questions/41991178/…Si está utilizando
webpack 4
, el siguiente código es árbol shakable.Los puntos a tener en cuenta;
Los módulos CommonJS no se pueden mover en árbol, por lo que definitivamente debe usar
lodash-es
, que es la biblioteca Lodash exportada como módulos ES, en lugar delodash
(CommonJS).lodash-es
'package.json contiene"sideEffects": false
, que notifica a webpack 4 que todos los archivos dentro del paquete están libres de efectos secundarios (consulte https://webpack.js.org/guides/tree-shaking/#mark-the-file-as-side sin efectos ).Esta información es crucial para la sacudida de los árboles, ya que los agrupadores de módulos no incluyen archivos de sacudidas de árboles que posiblemente contengan efectos secundarios, incluso si sus miembros exportados no se usan en ningún lado.
Editar
A partir de la versión 1.9.0, Parcel también es compatible
"sideEffects": false
, por lo tanto,import { has } from 'lodash-es';
también se puede mover en árbol con Parcel. También es compatible con los módulos CommonJS de sacudidas de árboles, aunque es probable que la sacudida de árboles de los módulos ES sea más eficiente que CommonJS según mi experimento .fuente
import { ... } from 'lodash-es';
Mi paquete todavía incluye toda la biblioteca.--module
opción del compilador comoes6
,es2015
oesnext
.modules: false
que no se transpile a CommonJS. Estoy usando la solución de Bruce ahora que parece funcionar. Gracias por su contribución, estoy seguro de que funciona, pero simplemente no tengo la configuración para ello.import has from 'lodash-es/has'
yimport {has} from 'lodash-es'
ambas variantes hacen sacudidas de árboles cuando se usanwebpack-4
Importe métodos específicos dentro de llaves
Pros:
Contras:
fuente
_.map()
sintaxis sea clara de que se está utilizando una biblioteca externa. ¿Esimport _ from 'lodash'
tan eficiente como su sugerencia o hay otra forma de poder usar esta sintaxis?_.map()
sintaxis explícita . ¿Pudiste encontrar una manera de mantener eso mientras haces importaciones de es6 y sacudes los árboles?Si está utilizando babel, debe consultar babel-plugin-lodash , seleccionará las partes de lodash que está utilizando para usted, menos molestias y un paquete más pequeño.
Tiene algunas limitaciones :
fuente
Puedes importarlos como
o como
el segundo está mucho más optimizado que el primero porque solo carga los módulos necesarios
luego usa así
fuente
Importar Lodash en versión
4.17.15
fuente