1
votes

erreur TS2307: impossible de trouver le module 'crypto'

J'écris un site Web avec Angular 6. J'ai besoin de hacher une chaîne côté client, donc j'utilise createHash (" sha256 ") de 'crypto' .

En fait, je viens d'écrire createHash et vscode me suggère l'importation, qui ressemble à ceci: p>

node --version: v10.15.1
ng --version:
Angular CLI: 6.2.9
Node: 10.15.1
OS: linux x64
Angular: 6.1.10
typescript 2.9.2
webpack 4.16.4

(cette façon d'importer semble convenir, et elle est utilisée dans certains didacticiels typographiques, here ) puis:

ERROR in src/domain/User.ts(2,28): error TS2307: Cannot find module 'crypto'.

toute la syntaxe est suggérée par vscode , avec docstrings et tout. Mais au moment de la compilation avec npm start j'obtiens:

var hashed = createHash("sha256").update(data).digest()

pour autant que je sache, crypto est maintenant intégré au nœud, et je ne devrais pas avoir de problème à l'importer.

remarquez également que si j'exécute node dans le terminal pour ouvrir un REPL, saisissez 'crypto' me donne une sortie qui suggère que tout fonctionne bien.

Voici les versions de tout ce que je pense que ça compte:

import { createHash } from "crypto";

Toute aide sera appréciée.


1 commentaires

avez-vous inclus crypto js dans votre angular.json ?


4 Réponses :


1
votes

Vous devez installer la dépendance. Il y avait la même question, essayez de faire la même chose, ça doit aider Comment utiliser module 'crypto' dans Angular2?


2 commentaires

Oui, j'y suis allé. Mais notez qu'il n'y a pas de réponse sélectionnée. Notez ceci à propos de la première réponse. J'ai essayé la deuxième réponse sans succès. Merci


Il y a un problème à ce sujet sur github github.com/angular/angular- cli / issues /… Malheureusement, la cryptographie n'est pas encore prise en charge en tant que module natif côté client. Le module crypto-browserify contient createHash, vérifiez s'il vous convient. Il s'installe comme une dépendance régulière et ne devrait pas causer de problèmes graves.



1
votes

J'ai eu le même problème. La première solution que j'ai trouvée a été d'ajouter ce qui suit à packages.json

 myHash = this._crypto.getSha256HEX(JSON.stringify(_compoundDataStruccture));

Puisque tout ce que je voulais était de générer un condensé sha256 pour utiliser un index que j'ai supprimé crypto-js et @ types / crypto = js et l'a remplacé par jshashed .

constructor( private _crypto: CryptoService; ) {}

J'ai ensuite modifié mon service de résumé pour refléter la nouvelle bibliothèque:

import { CryptoService }  from '@services/crypto.service';

Ajoutez simplement CryptoService code> à votre fichier de module apps.module.ts

import { Injectable } from '@angular/core';
import * as JsHashes  from 'jshashes';

@Injectable({
  providedIn: 'root'
})

export class CryptoService {
  getSha256HEX(value: string): string {
     const hash =  new JsHashes.SHA256;
     return hash.hex(value);
  }
}

Remarque: Le chemin @services défini dans tsconfig.json

Il ne reste plus qu'à déclarer si CryptoService dans le constructeur était nécessaire:

yarn add jshashes

et utilisez-le en passant une chaîne, ou si des données composées (comme une chaîne de requête HTTP pour créer une clé de cache) stringify.

"browser": {
    "crypto": false
}

Remarque: jshashes prend en charge

Digests:

  • MD5
  • SHA1
  • SHA256
  • SHA512
  • HMAC
  • RIPEND-160

Aussi :

  • Encodage / décodage Base64
  • Calcul CRC-32
  • Encodage / décodage UTF-8


0 commentaires

-1
votes

Si vous créez une application côté serveur pour NodeJs à l'aide de typescript, il vous suffit d'installer @ types / node en utilisant npm i @ types / node -D et vous devriez pouvoir l'importer en utilisant import * comme crypto à partir de "crypto"


0 commentaires

1
votes

Pour Typescript 2. * et Angular -

  1. Installez et ajoutez ce package aux devDependencies.

    "types": [ "node" ],
    
  2. Dans tsconfig.app.json sous le compilerOptions, ajoutez ceci -

    npm install @types/node --save-dev
    


0 commentaires