Es fällt mir schwer, die lodash-Module importieren zu lassen. Ich habe mein Projekt mit npm + gulp eingerichtet und treffe immer wieder auf dieselbe Wand. Ich habe das normale Lodash ausprobiert, aber auch Lodash-es.
Das lodash npm-Paket: (hat eine index.js-Datei im Paketstammordner)
import * as _ from 'lodash';
Ergebnisse in:
error TS2307: Cannot find module 'lodash'.
Das lodash-es npm-Paket: (hat einen defaut-Export in lodash.js im Paketstammordner)
import * as _ from 'lodash-es/lodash';
Ergebnisse in:
error TS2307: Cannot find module 'lodash-es'.
Sowohl die Schluckaufgabe als auch der Websturm melden dasselbe Problem.
Komische Tatsache, dies gibt keinen Fehler zurück:
import 'lodash-es/lodash';
... aber natürlich gibt es kein "_" ...
Meine tsconfig.json-Datei:
{
"compilerOptions": {
"target": "es5",
"module": "system",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false
},
"exclude": [
"node_modules"
]
}
Meine gulpfile.js:
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']);
Wenn ich das richtig verstehe, sollte moduleResolution: 'node' in meiner tsconfig die import-Anweisungen auf den Ordner node_modules verweisen, in dem lodash und lodash-es installiert sind. Ich habe auch viele verschiedene Importmethoden ausprobiert: absolute Pfade, relative Pfade, aber nichts scheint zu funktionieren. Irgendwelche Ideen?
Bei Bedarf kann ich eine kleine Zip-Datei bereitstellen, um das Problem zu veranschaulichen.
Antworten:
So geht's ab Typescript 2.0: (tsd und typings werden zugunsten der folgenden veraltet):
Dann in Ihrer .ts-Datei:
Entweder:
Oder (wie von @Naitik vorgeschlagen):
Ich bin mir nicht sicher, was der Unterschied ist. Wir verwenden und bevorzugen die erste Syntax. Einige berichten jedoch, dass die erste Syntax für sie nicht funktioniert, und jemand anderes hat kommentiert, dass die letztere Syntax nicht mit verzögert geladenen Webpack-Modulen kompatibel ist. YMMV.
Bearbeiten am 27. Februar 2017:
Laut @Koert unten
import * as _ from "lodash";
ist dies die einzige funktionierende Syntax ab Typescript 2.2.1, lodash 4.17.4 und @ types / lodash 4.14.53. Er sagt, dass die andere vorgeschlagene Importsyntax den Fehler "hat keinen Standardexport" gibt.quelle
typescript 2.0.3
. In der Tat ist das Entfernentypings
zugunsten des@types
npm-Pakets viel sauberer.import * as _ from "lodash";
hat nicht für mich gearbeitet,import _ from "lodash";
tut es aber .import _ from "lodash"
Syntax nicht mit faul geladenen Webpack-Modulen kompatibel ist. Ich weiß nicht warum, ich habe nicht im Detail untersucht.npm install --save-dev @types/lodash
Verwenden Sie also save-dev: Wenn Sie seltsame Probleme und Fehler sehen, versuchen Sie Folgendes:npm install --save-dev @types/[email protected]
Update 26. September 2016:
Wie in der Antwort von @ Taytay angegeben, können wir anstelle der vor einigen Monaten verwendeten 'Typisierungs'-Installationen jetzt Folgendes verwenden:
Hier sind einige zusätzliche Referenzen, die diese Antwort unterstützen:
Wenn Sie die Schreibinstallation weiterhin verwenden, lesen Sie die folgenden Kommentare (von anderen) zu '' '--ambient' '' und '' '--global' ''.
Außerdem befindet sich die Konfiguration im neuen Schnellstart nicht mehr in index.html. Es befindet sich jetzt in systemjs.config.ts (wenn SystemJS verwendet wird).
Ursprüngliche Antwort:
Dies funktionierte auf meinem Mac (nach der Installation von Angular 2 gemäß Schnellstart ):
Sie finden verschiedene betroffene Dateien, z
Angular 2 Quickstart verwendet System.js, daher habe ich der Konfiguration in index.html 'map' wie folgt hinzugefügt:
Dann konnte ich in meinem .ts-Code Folgendes tun:
Änderungen ab Mitte 2016:
Wie @tibbus erwähnt, benötigen Sie in einigen Kontexten:
Wenn ab angle2-seed beginnen und nicht jedes Mal importieren möchten, können Sie die Map- und Importschritte überspringen und einfach die lodash-Zeile in tools / config / project.config.ts auskommentieren.
Damit meine Tests mit lodash funktionieren, musste ich dem Dateiarray in karma.conf.js eine Zeile hinzufügen:
quelle
map: { lodash: 'node_modules/lodash/lodash.js' }
in der vermisstSystem.config
?import * as _ from 'lodash'
anstattimport _ from 'lodash'
?--ambient
ist ein ehemaliger für--global
. Letzteres wird in 1.x verwendet und bewegt sich vorwärts. Ich glaube jedoch nicht, dass das neueste lodash 4.x als solches globales Modul kompiliert werden kann.Das wichtigste zuerst
npm install --save lodash
npm install -D @types/lodash
Laden Sie die vollständige Lodash-Bibliothek
ODER Laden Sie nur Funktionen, mit denen wir arbeiten werden
UPDATE - March 2017
Ich arbeite zurzeit mit
ES6 modules
und vor kurzem konnte ichlodash
so arbeiten:ODER
import
spezifischlodash functionality
:HINWEIS - Der Unterschied
* as
ist in der nicht erforderlichsyntax
Verweise:
Viel Glück.
quelle
import debounce from 'lodash/debounce'
ergibtTS1192: Module node_modules/@types/lodash/debounce has no default export
wann"allowSyntheticDefaultImports": false
"allowSyntheticDefaultImports": true
Compileroption in Ihrer Datei tsconfig.json möglicherweise erforderlich ist, um Fehler zu vermeiden.Schritt 1: Ändern Sie die Datei package.json so, dass lodash in die Abhängigkeiten aufgenommen wird.
Schritt 2: Ich verwende den SystemJs-Modullader in meiner angle2-Anwendung. Also würde ich die Datei systemjs.config.js ändern, um lodash zuzuordnen.
Schritt 3: Jetzt npm installieren
Schritt 4: Verwenden Sie lodash in Ihrer Datei.
quelle
Seit Typescript 2.0 werden @ types npm-Module zum Importieren von Typisierungen verwendet.
Nachdem diese Frage beantwortet wurde, gehe ich darauf ein, wie man Lodash effizient importiert
Die ausfallsichere Methode zum Importieren der gesamten Bibliothek (in main.ts)
Dies ist das neue Stück hier:
Implementierung eines leichteren Lodash mit den Funktionen, die Sie benötigen
Quelle: https://medium.com/making-internets/why-using-chain-is-a-mistake-9bc1f80d51ba#.kg6azugbd
PS: Der obige Artikel ist eine interessante Lektüre zur Verbesserung der Erstellungszeit und zur Reduzierung der App-Größe
quelle
error TS1192: Module '"node_modules/@types/lodash/chain/index"' has no default export.
Und so weiter für andere Module, die versuchen, die kürzerenimport chain from "lodash/chain"
ImporteIch habe lodash mit den folgenden Befehlen erfolgreich in mein Projekt importiert:
Dann habe ich es folgendermaßen importiert:
import * as _ from 'lodash';
und in systemjs.config.js habe ich folgendes definiert:
map: { 'lodash' : 'node_modules/lodash/lodash.js' }
quelle
Ich hatte genau das gleiche Problem, aber in einer Angular2-App, und dieser Artikel löst es einfach: https://medium.com/@s_eschweiler/using-external-libraries-with-angular-2-87e06db8e5d1#.p6gra5eli
Zusammenfassung des Artikels:
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’;
Ich hoffe, es kann auch für Ihren Fall nützlich sein
quelle
Eine andere elegante Lösung besteht darin, nur das zu bekommen, was Sie benötigen, und nicht den gesamten Lodash zu importieren
und verwenden Sie es dann in Ihrem Code
quelle
Wenn jemand anderes auf dieses Problem stößt und keine der oben genannten Lösungen aufgrund von Problemen mit der doppelten Kennung funktioniert, führen Sie Folgendes aus:
Bei älteren Versionen von Schreibvorgängen kommt es zu Problemen und Sie erhalten eine Reihe von Problemen mit der doppelten Kennung. Außerdem müssen Sie nicht
--ambient
mehr verwenden, soweit ich das beurteilen kann.Sobald die Eingabe auf dem neuesten Stand ist, sollte dies funktionieren (mithilfe des Angular 2-Schnellstarts).
Lauf:
Fügen Sie dies zunächst zu systemjs.config.js hinzu:
Jetzt können Sie dies in jeder Datei verwenden:
import * as _ from 'lodash';
Löschen Sie Ihren Eingabeordner und führen Sie ihn aus
npm install
Sie ihn aus, wenn Sie weiterhin Probleme haben.quelle
Bitte beachten Sie, dass dadurch
npm install --save
die Abhängigkeit gefördert wird, die Ihre App im Produktionscode erfordert."Typisierungen" werden nur von TypeScript benötigt, das schließlich in JavaScript transpiliert wird. Daher möchten Sie sie wahrscheinlich nicht im Produktionscode haben. Ich schlage vor, es
devDependencies
stattdessen in Ihr Projekt einzufügen, indem Sie es verwendenoder
(siehe Akash-Beitrag zum Beispiel). Übrigens ist es so, wie es in ng2 tuto gemacht wird.
Alternativ könnte Ihre package.json folgendermaßen aussehen:
Nur ein Tipp
Das Schöne daran
npm
ist, dass Sie einfach einenpm install --save
oder--save-dev
wenn Sie sich nicht sicher sind, welche Version der gesuchten Abhängigkeit Sie suchen, diese automatisch für Sie in Ihrerpackage.json
für die weitere Verwendung festlegen können .quelle
Ich hatte auch Schreibvorgänge für erstellt
lodash-es
, sodass Sie jetzt tatsächlich Folgendes tun könnenInstallieren
Verwendung
Wenn Sie Rollup verwenden, schlage ich vor, dieses anstelle des zu verwenden,
lodash
da es richtig geschüttelt wird.quelle
Teilimport aus lodash sollte in Winkel 4.1.x unter Verwendung der folgenden Notation funktionieren :
Oder verwenden Sie 'lodash-es' und importieren Sie in Modul:
quelle
import { assign } from 'lodash-es';
scheint immer noch die gesamte Bibliothek zu importieren (Installieren über
npm
.Nun
import
in der Datei:ENV:
quelle
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';
quelle
$ 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
Ich verwende ng2 mit Webpack, nicht mit System JS. Schritte, die ich brauchte, waren:
und dann in die Datei möchte ich Unterstrich importieren in:
quelle
Das Verwalten von Typen über
typings
undtsd
Befehle wird letztendlich zugunsten der Verwendung von npm via veraltetnpm install @types/lodash
.Ich hatte jedoch lange Zeit Probleme mit "Kann das Modul lodash nicht finden" in der Importanweisung:
Letztendlich wurde mir klar, dass Typescript nur Typen von node_modules / @ types ab Version 2 lädt und mein VsCode Language-Dienst immer noch 1.8 verwendete, sodass der Editor Fehler meldete.
Wenn Sie VSCode verwenden, möchten Sie einschließen
Stellen Sie in Ihrer VSCode settings.json-Datei (für Arbeitsbereichseinstellungen) sicher, dass Sie die Typoskriptversion> = 2.0.0 über installiert haben
npm install [email protected] --save-dev
Danach würde sich mein Editor nicht über die Importanweisung beschweren.
quelle
wenn es danach nicht mehr funktioniert
Sie versuchen dies und importieren lodash
quelle
npm install --save @types/lodash
https://www.npmjs.com/package/@types/lodash
quelle
Installieren Sie alle durch Terminal:
Fügen Sie Pfade in index.html hinzu
Importieren Sie lodash oben in der .ts-Datei
quelle
Ich bin auf Angular 4.0.0 mit dem Preboot / Angular -Webpack und musste einen etwas anderen Weg gehen.
Die von @Taytay bereitgestellte Lösung hat hauptsächlich für mich funktioniert:
und Importieren der Funktionen in eine bestimmte .component.ts- Datei unter Verwendung von:
Dies funktioniert, weil es keine exportierte "Standard" -Klasse gibt. Der Unterschied bei mir bestand darin, dass ich den Weg finden musste, der zum Laden in Bibliotheken von Drittanbietern bereitgestellt wurde: vendor.ts, die sich befanden unter:
Meine vendor.ts- Datei sieht jetzt so aus:
quelle
Vielleicht ist es zu seltsam, aber keines der oben genannten Dinge hat mir zuallererst geholfen, weil ich das lodash ordnungsgemäß installiert hatte (auch über die obigen Vorschläge neu installiert).
So lange Rede und Antwort, das Problem war mit der Verwendung der
_.has
Methode von lodash verbunden .Ich habe es einfach mit dem JS-
in
Operator behoben .quelle
versuche >>
tsd install lodash --save
quelle
Sie können auch fortfahren und über gute alte Anforderungen importieren, dh:
Dies ist das einzige, was für uns funktioniert hat. Stellen Sie natürlich sicher, dass alle require () -Aufrufe nach dem Import erfolgen.
quelle