Saya mengalami kesulitan mencoba untuk mendapatkan modul Lodash diimpor. Saya telah menyiapkan proyek saya menggunakan npm + tegukan, dan terus mengenai dinding yang sama. Saya sudah mencoba lodash biasa, tetapi juga lodash-es.
Paket lodash npm: (memiliki file index.js di folder root paket)
import * as _ from 'lodash';
Hasil dalam:
error TS2307: Cannot find module 'lodash'.
Paket lodash-es npm: (memiliki ekspor defaut di lodash.js di folder root paket)
import * as _ from 'lodash-es/lodash';
Hasil dalam:
error TS2307: Cannot find module 'lodash-es'.
Baik tugas tegap dan webstorm melaporkan masalah yang sama.
Fakta lucu, ini tidak menghasilkan kesalahan:
import 'lodash-es/lodash';
... tapi tentu saja tidak ada "_" ...
File tsconfig.json saya:
{
"compilerOptions": {
"target": "es5",
"module": "system",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false
},
"exclude": [
"node_modules"
]
}
Gulpfile.js saya:
var gulp = require('gulp'),
ts = require('gulp-typescript'),
uglify = require('gulp-uglify'),
sourcemaps = require('gulp-sourcemaps'),
tsPath = 'app/**/*.ts';
gulp.task('ts', function () {
var tscConfig = require('./tsconfig.json');
gulp.src([tsPath])
.pipe(sourcemaps.init())
.pipe(ts(tscConfig.compilerOptions))
.pipe(sourcemaps.write('./../js'));
});
gulp.task('watch', function() {
gulp.watch([tsPath], ['ts']);
});
gulp.task('default', ['ts', 'watch']);
Jika saya mengerti dengan benar, moduleResolution: 'node' di tsconfig saya harus mengarahkan pernyataan impor ke folder node_modules, di mana lodash dan lodash-es diinstal. Saya juga mencoba banyak cara berbeda untuk mengimpor: jalur absolut, jalur relatif, tetapi tampaknya tidak ada yang berhasil. Ada ide?
Jika perlu saya dapat memberikan file zip kecil untuk menggambarkan masalah tersebut.
Jawaban:
Berikut ini cara melakukannya pada Typecript 2.0: (tsd dan pengetikan tidak digunakan lagi sebagai berikut):
Lalu, di file .ts Anda:
Antara:
Atau (seperti yang disarankan oleh @Naitik):
Saya tidak yakin apa bedanya. Kami menggunakan dan lebih memilih sintaks pertama. Namun, beberapa laporan mengatakan bahwa sintaks pertama tidak berfungsi untuk mereka, dan orang lain berkomentar bahwa sintaks yang terakhir tidak kompatibel dengan modul webpack yang dimuat dengan malas. YMMV.
Edit pada 27 Feb 2017:
Menurut @Koert di bawah ini,
import * as _ from "lodash";
adalah satu-satunya sintaks yang berfungsi pada Typescript 2.2.1, lodash 4.17.4, dan @ types / lodash 4.14.53. Dia mengatakan bahwa sintaks impor lain yang disarankan memberikan kesalahan "tidak memiliki ekspor default".sumber
typescript 2.0.3
. Memang menghapustypings
mendukung@types
paket npm jauh lebih bersih.import * as _ from "lodash";
tidak bekerja untuk saya tetapiimport _ from "lodash";
tidak.import _ from "lodash"
sintaksis tidak kompatibel dengan modul webpack malas dimuat. Tidak yakin mengapa, saya belum menyelidiki secara detail.npm install --save-dev @types/lodash
Jika Anda melihat masalah dan bug yang aneh, coba ini:npm install --save-dev @types/[email protected]
Pembaruan 26 September 2016:
Seperti jawaban @ Taytay mengatakan, alih-alih instalasi 'pengetikan' yang kami gunakan beberapa bulan lalu, kami sekarang dapat menggunakan:
Berikut adalah beberapa referensi tambahan yang mendukung jawaban itu:
Jika masih menggunakan instalasi pengetikan, lihat komentar di bawah (oleh orang lain) tentang '' '--ambient' '' dan '' '--global' ''.
Juga, di Mulai Cepat baru, konfigurasi tidak lagi di index.html; sekarang di systemjs.config.ts (jika menggunakan SystemJS).
Jawaban asli:
Ini berfungsi pada mac saya (setelah menginstal Angular 2 sesuai Quick Start ):
Anda akan menemukan berbagai file yang terpengaruh, mis
Mulai 2 Quickstart menggunakan System.js, jadi saya menambahkan 'map' ke config in index.html sebagai berikut:
Kemudian dalam kode .ts saya, saya bisa melakukan:
Suntingan dari pertengahan 2016:
Seperti @tibbus menyebutkan, dalam beberapa konteks, Anda perlu:
Jika mulai dari angular2-seed , dan jika Anda tidak ingin mengimpor setiap waktu, Anda dapat melewati peta dan mengimpor langkah-langkah dan cukup batalkan komentar pada garis lodash di tools / config / project.config.ts.
Agar tes saya berfungsi dengan lodash, saya juga harus menambahkan baris ke array file di karma.conf.js:
sumber
map: { lodash: 'node_modules/lodash/lodash.js' }
diSystem.config
?import * as _ from 'lodash'
alih-alihimport _ from 'lodash'
?--ambient
adalah mantan untuk--global
. Yang terakhir digunakan dalam 1.x dan bergerak maju. Meskipun, saya tidak berpikir lodash 4.x terbaru akan dikompilasi sebagai modul global seperti itu.Hal pertama yang pertama
npm install --save lodash
npm install -D @types/lodash
Muat perpustakaan lodash lengkap
ATAU hanya memuat fungsi yang akan kami kerjakan
UPDATE - March 2017
Saya sedang bekerja dengan
ES6 modules
, dan baru-baru ini saya dapat bekerja denganlodash
seperti:ATAU
import
spesifiklodash functionality
:CATATAN - perbedaannya
* as
tidak diperlukan dalamsyntax
Referensi:
Semoga berhasil.
sumber
import debounce from 'lodash/debounce'
hasilTS1192: Module node_modules/@types/lodash/debounce has no default export
ketika"allowSyntheticDefaultImports": false
"allowSyntheticDefaultImports": true
opsi kompiler di file tsconfig.json Anda mungkin diperlukan untuk menghindari kesalahan.Langkah 1: Ubah file package.json untuk memasukkan lodash dalam dependensi.
Langkah 2: Saya menggunakan pemuat modul SystemJs di aplikasi angular2 saya. Jadi saya akan memodifikasi file systemjs.config.js untuk memetakan lodash.
Langkah 3: Sekarang lakukan instalasi npm
Langkah 4: Untuk menggunakan lodash di file Anda.
sumber
Sejak Typescript 2.0, modul @types npm digunakan untuk mengimpor pengetikan.
Sekarang karena pertanyaan ini telah dijawab, saya akan membahas cara mengimpor lodash secara efisien
Cara yang gagal aman untuk mengimpor seluruh perpustakaan (di main.ts)
Ini adalah bit baru di sini:
Menerapkan lodash yang lebih ringan dengan fungsi yang Anda butuhkan
sumber: https://medium.com/making-internets/why-using-chain-is-a-mistake-9bc1f80d51ba#.kg6azugbd
PS: Artikel di atas adalah bacaan yang menarik tentang meningkatkan waktu pembuatan dan mengurangi ukuran aplikasi
sumber
error TS1192: Module '"node_modules/@types/lodash/chain/index"' has no default export.
Dan seterusnya untuk modul lain yang mencobaimport chain from "lodash/chain"
impor yang lebih pendekSaya berhasil mengimpor lodash di proyek saya dengan perintah berikut:
Lalu saya mengimpornya dengan cara berikut:
import * as _ from 'lodash';
dan di systemjs.config.js saya mendefinisikan ini:
map: { 'lodash' : 'node_modules/lodash/lodash.js' }
sumber
Saya memiliki masalah yang persis sama, tetapi dalam aplikasi Angular2, dan artikel ini menyelesaikannya: https://medium.com/@s_eschweiler/using-external-libraries-with-angular-2-87e06db8e5d1#.p6gra5eli
Ringkasan artikel:
npm install lodash --save
tsd install underscore
<script src="node_modules/lodash/index.js"></script>
System.config({ paths: { lodash: './node_modules/lodash/index.js'
import * as _ from ‘lodash’;
Saya harap ini dapat bermanfaat untuk kasus Anda juga
sumber
Solusi elegan lainnya adalah hanya mendapatkan apa yang Anda butuhkan, bukan mengimpor semua lodash
dan kemudian menggunakannya dalam kode Anda
sumber
Jika ada orang lain yang mengalami masalah ini dan tidak ada solusi di atas yang berfungsi karena masalah "pengidentifikasi duplikat", jalankan ini:
Dengan pengetikan versi lama hal-hal menjadi kacau dan Anda akan mendapatkan banyak masalah "Pengidentifikasi duplikat". Anda juga tidak perlu menggunakan
--ambient
lagi sejauh yang saya tahu.Jadi, begitu pengetikan sudah terbaru, ini akan berfungsi (menggunakan quickstart Angular 2).
Lari:
Pertama, tambahkan ini ke systemjs.config.js:
Sekarang Anda dapat menggunakan ini di file apa pun:
import * as _ from 'lodash';
Hapus folder pengetikan Anda dan jalankan
npm install
jika Anda masih memiliki masalah.sumber
Harap dicatat bahwa
npm install --save
akan menumbuhkan ketergantungan apa pun yang dibutuhkan aplikasi Anda dalam kode produksi.Sedangkan untuk "mengetik", itu hanya diperlukan oleh TypeScript, yang pada akhirnya diubah dalam JavaScript. Karena itu, Anda mungkin tidak ingin memilikinya dalam kode produksi. Saya sarankan untuk memasukkannya ke dalam proyek Anda
devDependencies
, dengan menggunakanatau
(lihat posting Akash misalnya). By the way, itu cara itu dilakukan di ng2 tuto.
Atau, berikut adalah tampilan package.json Anda:
hanya sebuah tip
Yang menyenangkan
npm
adalah bahwa Anda dapat memulai dengan hanya melakukannpm install --save
atau--save-dev
jika Anda tidak yakin tentang versi terbaru dari dependensi yang Anda cari, dan itu akan secara otomatis mengaturnya untuk Andapackage.json
untuk digunakan lebih lanjut.sumber
Saya telah membuat pengetikan
lodash-es
juga, jadi sekarang Anda benar-benar dapat melakukan hal berikutInstall
pemakaian
jika Anda menggunakan rollup, saya sarankan menggunakan ini daripada
lodash
karena itu akan diatur dengan benar.sumber
Impor sebagian dari lodash harus bekerja dalam sudut 4.1.x menggunakan notasi berikut:
Atau gunakan 'lodash-es' dan impor dalam modul:
sumber
import { assign } from 'lodash-es';
tampaknya masih mengimpor seluruh perpustakaan (dilihat dari ukuran bundel)Instal via
npm
.Sekarang,
import
dalam file:ENV:
sumber
sudo npm install typings --global npm install lodash --save typings install lodash --ambient --save
System.config({ packages: { app: { format: 'register', defaultExtension: 'js' } }, map: { lodash: 'node_modules/lodash/index.js' } });
import _ from 'lodash';
sumber
$ typings install lodash --ambient --save typings ERR! message https://api.typings.org/entries/npm/lodash/versions/latest responded with 407, expected it to equal 200
Saya menggunakan ng2 dengan webpack, bukan sistem JS. Langkah-langkah yang perlu bagi saya adalah:
dan kemudian dalam file saya ingin mengimpor garis bawah ke:
sumber
Mengelola tipe via
typings
dantsd
perintah pada akhirnya tidak digunakan karena menggunakan npm vianpm install @types/lodash
.Namun, saya kesulitan dengan "Tidak dapat menemukan modul lodash" dalam pernyataan impor untuk waktu yang lama:
Pada akhirnya saya menyadari bahwa Filescript hanya akan memuat jenis dari node_modules / @ types mulai versi 2, dan layanan Bahasa VsCode saya masih menggunakan 1,8, jadi editor melaporkan kesalahan.
Jika Anda menggunakan VSCode, Anda ingin memasukkan
dalam file VSCode settings.json Anda (untuk pengaturan ruang kerja) dan pastikan Anda memiliki versi naskah>> 2.0.0 diinstal melalui
npm install [email protected] --save-dev
Setelah itu editor saya tidak akan mengeluh tentang pernyataan impor.
sumber
jika dosen tidak bekerja setelah itu
Anda coba ini dan impor lodash
sumber
npm install --save @types/lodash
https://www.npmjs.com/package/@types/lodash
sumber
Instal semua melalui terminal:
Tambahkan jalur di index.html
Impor lodash di bagian atas file .ts
sumber
Saya menggunakan Angular 4.0.0 menggunakan preboot / angular-webpack , dan harus menempuh rute yang sedikit berbeda.
Solusi yang disediakan oleh @Taytay sebagian besar bekerja untuk saya:
dan mengimpor fungsi ke file .component.ts yang diberikan menggunakan:
Ini berfungsi karena tidak ada kelas ekspor "default". Perbedaan saya adalah saya perlu menemukan cara yang disediakan untuk memuat di perpustakaan pihak ke-3: vendor.ts yang terletak di:
File vendor.ts saya terlihat seperti ini sekarang:
sumber
Mungkin ini terlalu aneh, tetapi tidak satu pun di atas yang membantu saya, pertama-tama, karena saya telah menginstal lodash dengan benar (juga menginstal ulang melalui saran di atas).
Singkat cerita masalah ini dihubungkan dengan menggunakan
_.has
metode dari lodash .Saya memperbaikinya dengan hanya menggunakan
in
operator JS .sumber
coba >>
tsd install lodash --save
sumber
Anda juga dapat melanjutkan dan mengimpor melalui persyaratan lama yang baik, yaitu:
Ini adalah satu-satunya hal yang berhasil bagi kami. Tentu saja, pastikan ada permintaan () panggilan datang setelah impor.
sumber