Menggunakan webpack, saya mencoba mengimpor isEqual karena lodash
sepertinya mengimpor semuanya. Saya telah mencoba melakukan hal berikut tetapi tidak berhasil:
import { isEqual } from 'lodash'
import isEqual from 'lodash/lang'
import isEqual from 'lodash/lang/isEqual'
import { isEqual } from 'lodash/lang'
import { isEqual } from 'lodash/lang'
javascript
lodash
adang3
sumber
sumber
Jawaban:
Anda dapat menginstal
lodash.isequal
sebagai modul tunggal tanpa menginstal seluruh paket lodash seperti:Saat menggunakan modul ECMAScript 5 dan CommonJS, Anda kemudian mengimpornya seperti ini:
Menggunakan modul ES6, ini akan menjadi:
Dan Anda dapat menggunakannya di kode Anda:
Sumber: Dokumentasi Lodash
Setelah mengimpor, Anda dapat menggunakan
isEqual
fungsi tersebut di kode Anda. Perhatikan bahwa ini bukan bagian dari objek yang dinamai_
jika Anda mengimpornya dengan cara ini, jadi Anda tidak mereferensikannya dengan_.isEqual
, tetapi langsung denganisEqual
.Alternatif: Menggunakan
lodash-es
Seperti yang ditunjukkan oleh @kimamula :
Dengan webpack 4 dan lodash-es 4.17.7 dan yang lebih tinggi, kode ini berfungsi.
Hal ini karena Webpack 4 mendukung para sideeffects bendera dan
lodash-es
4.17.7 dan lebih tinggi termasuk bendera (yang diatur kefalse
).Mengapa Tidak Menggunakan Versi Dengan Slash? Jawaban lain untuk pertanyaan ini menyarankan Anda juga dapat menggunakan tanda hubung sebagai pengganti titik, seperti ini:
Ini juga berfungsi, tetapi ada dua kelemahan kecil:
npm install --save lodash
), bukan hanya lodash.isequal kecil yang terpisah paket ; ruang penyimpanan murah dan CPU cepat, jadi Anda mungkin tidak peduli tentang iniisEqual
rata-rata 28% lebih besar (mencoba webpack 2 dan webpack 3, dengan atau tanpa Babel, dengan atau tanpa Uglify)sumber
_ is not defined
saat menggunakan_.isEquals
_.isEqual
, Anda harus menggunakan langsungisEqual
npm --save lodash.whatever
setiap fungsi secara terpisah, tetapi ukuran bundel yang lebih besar tentu saja dapat membuatnya layak menggunakan metode periode. Saya terkejut bahwa ada perbedaan, jadi saya senang Anda menghitung jumlahnya untuk kami.Jika Anda hanya ingin memasukkan
isEqual
dan bukanlodash
fungsi lainnya (berguna untuk menjaga ukuran bundel Anda tetap kecil), Anda dapat melakukan ini di ES6;Ini cukup banyak yang sama seperti apa yang dijelaskan dalam yang
lodash
README , kecuali bahwa ada mereka gunakanrequire()
sintaks.sumber
Dengan webpack 4 dan lodash-es 4.17.7 dan yang lebih tinggi, kode ini berfungsi.
Ini karena webpack 4 mendukung
sideEffects
flag dan lodash-es 4.17.7 dan yang lebih tinggi menyertakan flag (yang disetel kefalse
).Sunting
Mulai versi 1.9.0, Parcel juga mendukung
"sideEffects": false
, karenaimport { isEqual } from 'lodash-es';
itu juga pohon dapat diguncang dengan Parcel.sumber
Tidak terkait dengan webpack tetapi saya akan menambahkannya di sini karena banyak orang saat ini pindah ke skrip ketikan.
Anda juga dapat mengimpor satu fungsi dari lodash menggunakan
import isEqual from 'lodash/isEqual';
in typescript denganesModuleInterop
flag di opsi compiler (tsconfig.json)contoh
sumber
Lodash mencantumkan beberapa opsi di README mereka :
babel-plugin-lodash
.babelrc
Secara kasar untuk ini:
lodash-webpack-plugin
webpack.config.js
:lodash-es menggunakan lodash cli
$ lodash modularize exports=es -o ./
sumber
ini benar-benar berhasil untuk saya
sumber
import { isEqual } from 'lodash-es';
sedang mengimpor seluruh perpustakaan. Saya menggunakan Rollup yang seharusnya melakukan goyangan pohon secara default.Setiap kali saya menulis modul saya sendiri, sintaks impor bernama ini berfungsi dan Rollup berhasil getar pohon, jadi saya agak bingung mengapa tidak berfungsi dengan Lodash.
sumber