Saya memiliki umpan balik permintaan tarik di bawah ini, hanya bertanya-tanya di mana cara yang benar untuk mengimpor lodash?
Anda sebaiknya melakukan impor dari 'lodash / has' .. Untuk versi sebelumnya dari lodash (v3) yang dengan sendirinya cukup berat, kita hanya perlu mengimpor modul / fungsi tertentu daripada mengimpor seluruh perpustakaan lodash. Tidak yakin tentang versi yang lebih baru (v4).
import has from 'lodash/has';
vs.
import { has } from 'lodash';
Terima kasih
javascript
lodash
babeljs
Tagihan
sumber
sumber
Jawaban:
import has from 'lodash/has';
lebih baik karena lodash menyimpan semua fungsinya dalam satu file, jadi daripada mengimpor seluruh perpustakaan 'lodash' pada 100k, lebih baik mengimporhas
fungsi lodash yang mungkin 2k.sumber
'lodash/has'
bukan paket terpisah. Ada file yang dipanggilhas.js
di root dari'lodash'
paket reguler , danimport has from 'lodash/has'
(atauconst has = require ('lodash/has
) akan memuat file itu. Ada yang paket metode terpisah pada NPM, tetapi mereka menggunakan "dot sintaks":'lodash.has'
. Ini juga akan menjadi cara yang valid untuk menyelesaikannya jika Anda tidak keberatan menginstal paket terpisah untuk setiap metode yang Anda gunakan (dan berpotensi membuat Andapackage.json
masif sebagai hasilnya).import { has } from 'lodash'
akan bekerja dengan cara yang sama, karena sisanya akan dihapusimport has from 'lodash-es/has'
sintaksis saya mendapatkan gemetar pohon penuh. beralih dari 526KB ke 184KB, lihat stackoverflow.com/questions/41991178/…Jika Anda menggunakan
webpack 4
, kode berikut ini dapat diguncang pohon.Poin yang perlu diperhatikan;
Modul CommonJS bukanlah pohon yang dapat diguncang sehingga Anda harus menggunakan
lodash-es
, yang merupakan pustaka Lodash yang diekspor sebagai Modul ES, bukanlodash
(CommonJS).lodash-es
package.json berisi"sideEffects": false
, yang memberi tahu webpack 4 bahwa semua file di dalam paket adalah efek samping gratis (lihat https://webpack.js.org/guides/tree-shaking/#mark-the-file-as-side -Efek bebas ).Informasi ini sangat penting untuk pengocokan pohon karena modul bundler tidak membuat file kocok pohon yang mungkin mengandung efek samping bahkan jika anggota mereka yang diekspor tidak digunakan di mana pun.
Edit
Pada versi 1.9.0, Parcel juga mendukung
"sideEffects": false
, karenaimport { has } from 'lodash-es';
itu pohon juga dapat diguncang dengan Parcel. Ini juga mendukung modul CommonJS yang mengguncang pohon, walaupun kemungkinan pohon yang mengguncang Modul ES lebih efisien daripada CommonJS menurut percobaan saya .sumber
import { ... } from 'lodash-es';
bundel Saya masih termasuk seluruh perpustakaan.--module
opsi kompiler sebagaies6
,es2015
atauesnext
.modules: false
sehingga mereka tidak dialihkan ke CommonJS. Saya menggunakan solusi Bruce sekarang yang sepertinya berhasil. Terima kasih atas kontribusi Anda, saya yakin itu berhasil tetapi saya tidak memiliki pengaturan untuk itu.import has from 'lodash-es/has'
danimport {has} from 'lodash-es'
kedua varian melakukan treeshaking saat menggunakanwebpack-4
Impor metode khusus di dalam kurung keriting
Pro:
Cons:
sumber
_.map()
sintaks yang jelas bahwa perpustakaan eksternal sedang digunakan. Apakahimport _ from 'lodash'
sama efisiennya dengan saran Anda atau adakah cara lain untuk dapat menggunakan sintaks ini?_.map()
sintaks eksplisit juga. Apakah Anda dapat menemukan cara untuk mempertahankannya sambil melakukan impor es dan pengocokan pohon?Jika Anda menggunakan babel, Anda harus memeriksa babel-plugin-lodash , ia akan memilih bagian-bagian dari lodash yang Anda gunakan untuk Anda, lebih mudah dan lebih mudah.
Ini memiliki beberapa keterbatasan :
sumber
Anda dapat mengimpornya sebagai
atau sebagai
yang kedua jauh lebih optimal daripada yang pertama karena hanya memuat modul yang diperlukan
maka gunakan seperti ini
sumber
Impor Lodash dalam versi
4.17.15
sumber