J'ai du mal à faire importer les modules lodash. J'ai configuré mon projet en utilisant npm + gulp, et je continue de frapper le même mur. J'ai essayé le lodash régulier, mais aussi le lodash-es.
Le package lodash npm: (a un fichier index.js dans le dossier racine du package)
import * as _ from 'lodash';
Résulte en:
error TS2307: Cannot find module 'lodash'.
Le package lodash-es npm: (a une exportation par défaut dans lodash.js dans le dossier racine du package)
import * as _ from 'lodash-es/lodash';
Résulte en:
error TS2307: Cannot find module 'lodash-es'.
La tâche Gulp et Webstorm signalent le même problème.
Fait amusant, cela ne renvoie aucune erreur:
import 'lodash-es/lodash';
... mais bien sûr il n'y a pas de "_" ...
Mon fichier tsconfig.json:
{
"compilerOptions": {
"target": "es5",
"module": "system",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false
},
"exclude": [
"node_modules"
]
}
Mon 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']);
Si je comprends bien, moduleResolution: 'node' dans mon tsconfig devrait pointer les instructions d'importation vers le dossier node_modules, où lodash et lodash-es sont installés. J'ai également essayé de nombreuses façons d'importer: chemins absolus, chemins relatifs, mais rien ne semble fonctionner. Des idées?
Si nécessaire, je peux fournir un petit fichier zip pour illustrer le problème.
Réponses:
Voici comment procéder à partir de Typescript 2.0: (tsd et les typages sont déconseillés au profit des éléments suivants):
Ensuite, dans votre fichier .ts:
Soit:
Ou (comme suggéré par @Naitik):
Je ne suis pas certain de la différence. Nous utilisons et préférons la première syntaxe. Cependant, certains rapportent que la première syntaxe ne fonctionne pas pour eux, et quelqu'un d'autre a commenté que la dernière syntaxe est incompatible avec les modules de webpack chargés paresseux. YMMV.
Edit le 27 février 2017:
Selon @Koert ci-dessous,
import * as _ from "lodash";
c'est la seule syntaxe qui fonctionne à partir de Typescript 2.2.1, lodash 4.17.4 et @ types / lodash 4.14.53. Il dit que l'autre syntaxe d'importation suggérée donne l'erreur "n'a pas d'exportation par défaut".la source
typescript 2.0.3
. En effet, supprimertypings
en faveur du@types
paquet npm est beaucoup plus propre.import * as _ from "lodash";
ne fonctionnait pas pour moi mais leimport _ from "lodash";
fait.import _ from "lodash"
syntaxe incompatible avec les modules webpack chargés paresseux. Je ne sais pas pourquoi, je n'ai pas enquêté en détail.npm install --save-dev @types/lodash
Si vous voyez des problèmes et des bugs étranges, essayez ceci:npm install --save-dev @types/[email protected]
Mise à jour du 26 septembre 2016:
Comme le dit la réponse de @ Taytay, au lieu des installations de «typage» que nous avons utilisées il y a quelques mois, nous pouvons maintenant utiliser:
Voici quelques références supplémentaires soutenant cette réponse:
Si vous utilisez toujours l'installation de typage, consultez les commentaires ci-dessous (par d'autres) concernant '' '--ambient' '' et '' '--global' ''.
De plus, dans le nouveau Quick Start, config n'est plus dans index.html; il est maintenant dans systemjs.config.ts (si vous utilisez SystemJS).
Réponse originale:
Cela a fonctionné sur mon mac (après avoir installé Angular 2 selon Quick Start ):
Vous trouverez différents fichiers concernés, par exemple
Angular 2 Quickstart utilise System.js, j'ai donc ajouté «map» à la configuration dans index.html comme suit:
Puis dans mon code .ts j'ai pu faire:
Modifications mi-2016:
Comme le mentionne @tibbus, dans certains contextes, vous avez besoin:
Si vous démarrez à partir d' angular2-seed et si vous ne souhaitez pas importer à chaque fois, vous pouvez ignorer la carte et importer les étapes et décommenter simplement la ligne lodash dans tools / config / project.config.ts.
Pour que mes tests fonctionnent avec lodash, j'ai également dû ajouter une ligne au tableau de fichiers dans karma.conf.js:
la source
map: { lodash: 'node_modules/lodash/lodash.js' }
dans leSystem.config
?import * as _ from 'lodash'
au lieu deimport _ from 'lodash'
?--ambient
est un ancien de--global
. Ce dernier est utilisé dans 1.x et va de l'avant. Cependant, je ne pense pas que le dernier lodash 4.x se compilera en tant que module global comme ça.Tout d'abord
npm install --save lodash
npm install -D @types/lodash
Charger la bibliothèque complète de lodash
OU charger uniquement les fonctions avec lesquelles nous allons travailler
UPDATE - March 2017
Je travaille actuellement avec
ES6 modules
, et récemment j'ai pu travailler aveclodash
comme ça:OU
import
spécifiquelodash functionality
:REMARQUE - la différence
* as
n’est pas requise dans lesyntax
Références:
Bonne chance.
la source
import debounce from 'lodash/debounce'
donneTS1192: Module node_modules/@types/lodash/debounce has no default export
quand"allowSyntheticDefaultImports": false
"allowSyntheticDefaultImports": true
option de compilation dans votre fichier tsconfig.json peut être nécessaire pour éviter toute erreur.Étape 1: Modifiez le fichier package.json pour inclure lodash dans les dépendances.
Étape 2: J'utilise le chargeur de module SystemJs dans mon application angular2. Je modifierais donc le fichier systemjs.config.js pour mapper lodash.
Étape 3: Maintenant, installez npm
Étape 4: Pour utiliser lodash dans votre fichier.
la source
Depuis Typescript 2.0, les modules @types npm sont utilisés pour importer des typages.
Maintenant que cette question a été répondue, je vais voir comment importer efficacement lodash
La méthode de sécurité intégrée pour importer la bibliothèque entière (dans main.ts)
C'est le nouveau bit ici:
Implémenter un lodash plus léger avec les fonctions dont vous avez besoin
source: https://medium.com/making-internets/why-using-chain-is-a-mistake-9bc1f80d51ba#.kg6azugbd
PS: l'article ci-dessus est une lecture intéressante sur l'amélioration du temps de construction et la réduction de la taille de l'application
la source
error TS1192: Module '"node_modules/@types/lodash/chain/index"' has no default export.
Et ainsi de suite pour les autres modules tentant lesimport chain from "lodash/chain"
importations plus courtesJ'ai importé avec succès lodash dans mon projet avec les commandes suivantes:
Ensuite, je l'ai importé de la manière suivante:
import * as _ from 'lodash';
et dans systemjs.config.js j'ai défini ceci:
map: { 'lodash' : 'node_modules/lodash/lodash.js' }
la source
J'ai eu exactement le même problème, mais dans une application Angular2, et cet article vient de le résoudre: https://medium.com/@s_eschweiler/using-external-libraries-with-angular-2-87e06db8e5d1#.p6gra5eli
Résumé de l'article:
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’;
J'espère que cela peut aussi être utile pour votre cas
la source
Une autre solution élégante consiste à obtenir uniquement ce dont vous avez besoin, et non à importer tout le lodash
puis utilisez-le dans votre code
la source
Si quelqu'un d'autre rencontre ce problème et qu'aucune des solutions ci-dessus ne fonctionne en raison de problèmes d '"identificateur en double", exécutez ceci:
Avec les anciennes versions de dactylographie, les choses se gâchent et vous obtiendrez un tas de problèmes de "Duplicate identifier". De plus, vous n'avez pas besoin d'utiliser
--ambient
autant que je sache.Donc, une fois que les saisies sont à jour, cela devrait fonctionner (en utilisant le démarrage rapide Angular 2).
Courir:
Tout d'abord, ajoutez ceci à systemjs.config.js:
Vous pouvez maintenant l'utiliser dans n'importe quel fichier:
import * as _ from 'lodash';
Supprimez votre dossier de saisie et exécutez
npm install
si vous rencontrez toujours des problèmes.la source
Veuillez noter que
npm install --save
cela favorisera la dépendance de votre application dans le code de production.Quant aux "typages", ils ne sont requis que par TypeScript, qui est finalement transposé en JavaScript. Par conséquent, vous ne voulez probablement pas les avoir dans le code de production. Je suggère de le mettre à la place dans votre projet
devDependencies
, en utilisantou
(voir l'article Akash par exemple). Soit dit en passant, c'est la façon dont cela se fait dans ng2 tuto.
Alternativement, voici à quoi pourrait ressembler votre package.json:
juste un conseil
La bonne chose à propos de cela
npm
est que vous pouvez commencer par faire simplement unenpm install --save
ou--save-dev
si vous n'êtes pas sûr de la dernière version disponible de la dépendance que vous recherchez, et il la définira automatiquement pour vous dans votrepackage.json
utilisation future.la source
J'avais créé des saisies pour
lodash-es
, alors maintenant vous pouvez réellement faire ce qui suitinstaller
usage
si vous utilisez le rollup, je suggère d'utiliser ceci au lieu du
lodash
car il sera correctement secoué par les arbres.la source
L'importation partielle à partir de lodash devrait fonctionner en angulaire 4.1.x en utilisant la notation suivante:
Ou utilisez 'lodash-es' et importez dans le module:
la source
import { assign } from 'lodash-es';
semble toujours importer toute la bibliothèque (à en juger par la taille du paquet)Installez via
npm
.Maintenant,
import
dans le fichier:ENV:
la source
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';
la source
$ 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
J'utilise ng2 avec webpack, pas le système JS. Les étapes nécessaires pour moi étaient:
puis dans le fichier je souhaite importer le soulignement dans:
la source
La gestion des types via
typings
et destsd
commandes est finalement déconseillée au profit de l'utilisation de npm vianpm install @types/lodash
.Cependant, je me suis longtemps débattu avec "Impossible de trouver le module lodash" dans la déclaration d'importation:
En fin de compte, j'ai réalisé que Typescript chargera uniquement les types à partir de node_modules / @ types à partir de la version 2, et mon service VsCode Language utilisait toujours la version 1.8, donc l'éditeur signalait des erreurs.
Si vous utilisez VSCode, vous voudrez inclure
dans votre fichier VSCode settings.json (pour les paramètres de l'espace de travail) et assurez-vous que la version dactylographiée> = 2.0.0 est installée via
npm install [email protected] --save-dev
Après cela, mon éditeur ne se plaindrait pas de la déclaration d'importation.
la source
si ne fonctionne pas après
vous essayez ceci et importez du lodash
la source
npm install --save @types/lodash
https://www.npmjs.com/package/@types/lodash
la source
Installez tous les terminaux:
Ajouter des chemins dans index.html
Importez lodash en haut du fichier .ts
la source
Je suis sur Angular 4.0.0 en utilisant le pré-démarrage / angular-webpack , et j'ai dû suivre une voie légèrement différente.
La solution fournie par @Taytay a principalement fonctionné pour moi:
et importer les fonctions dans un fichier .component.ts donné en utilisant:
Cela fonctionne car il n'y a pas de classe exportée "par défaut". La différence dans la mienne était que je devais trouver le moyen qui était fourni pour se charger dans les bibliothèques tierces: vendor.ts qui était assis à:
Mon fichier vendor.ts ressemble maintenant à ceci:
la source
C'est peut-être trop étrange, mais rien de ce qui précède ne m'a aidé, tout d'abord, parce que j'avais correctement installé le lodash (également réinstallé via les suggestions ci-dessus).
En résumé, le problème était lié à l'utilisation de la
_.has
méthode de lodash .Je l'ai corrigé en utilisant simplement l'
in
opérateur JS .la source
essayez >>
tsd install lodash --save
la source
Vous pouvez également aller de l'avant et importer via un bon vieux besoin, à savoir:
C'est la seule chose qui a fonctionné pour nous. Bien sûr, assurez-vous que tous les appels require () viennent après les importations.
la source