web-dev-qa-db-fra.com

Comment trouver le module "fs" dans MS Code avec TypeScript?

Je cours sur un MacBook Air. J'ai installé MS Code en tant que IDE et ai également installé TypeScript.

J'ai un fichier simple avec juste cette ligne:

import fs = require('fs');

Je reçois une ondulation rouge sous le "fs" à l'intérieur de la parenthèse et le message d'erreur est [ts] Cannot find module 'fs'. Le fichier a une extension .ts. Je suis nouveau dans JavaScript et dans TypeScript, mais j'avais l'impression que fs était un module de base, alors comment pourrait-il ne pas être trouvé? Comment puis-je résoudre le problème?

Autres choses que j'ai déjà essayées:

  • Mettre un corps de fonction simple dans le fichier puis compiler sur la ligne de commande avec tsc. Je reçois ici une erreur essentiellement équivalente: error TS2307: Cannot find module 'fs'.
  • Sur la ligne de commande Sudo npm install fs -g. Cela signale un succès apparent, mais ne résout pas le problème.

J'ai fouillé SE et le Web, mais les réponses qui semblaient proches semblent toutes présumer que "fs" est disponible.

49
Brick

Vous devez inclure le fichier de définition du noeud.

TypeScript 2.0 +

Installez en utilisant npm:

npm install --save-dev @types/node

TypeScript <2.0

Si vous utilisez typings alors vous pouvez exécuter cette commande:

typings install dt~node --global --save

Ou si vous utilisez des typings <1.0 run:

typings install node --ambient --save

Ou, si tout échoue, téléchargez manuellement le fichier ici et incluez-le dans votre projet.

57
David Sherret

Il existe maintenant un meilleur moyen de ne pas utiliser les outils tsd ou dactylographie précédents. NPM a maintenant le package @types pour TypeScript. Dans cet exemple, vous avez besoin du paquet @types/node:

npm install "@types/node" --save-dev

Assurez-vous que vous utilisez l'option save-dev pour installer uniquement les types en mode développement, pas en production. Vous devriez avoir les dernières bibliothèques de noeuds lorsque vous utilisez la syntaxe npm install "@ types /" ...

Il ne trouve pas le package fs car les anciens outils de typage n’utilisaient probablement pas le dernier fichier de définition node.d.ts.

Votre fichier tsconfig.json doit être mis à jour pour rechercher ces packages de type. Mon exemple si jquery utilise, jqueryui et les types de nœud. En supposant que vous ayez également besoin de la syntaxe pour votre éditeur de code, dans ce cas, l'éditeur de code 'atom'

{
"compileOnSave": false,
"compilerOptions": {
    "rootDir": "src",
    "sourceMap": true,
    "target": "es5",
    "module": "AMD",
    "declaration": false,
    "noImplicitAny": false,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "moduleResolution": "node",
    "lib": ["es2015", "dom"],
    "baseUrl": "./",
    "typeRoots": [
        "node_modules/@types"
    ],
    "types": [
        "jquery",
        "jqueryui",
        "node"
    ],
    "paths": {
        "src/*": ["src/*"]
    }
},
"exclude": [
    "node_modules",
    "dist",
    "build"
],
"filesGlob": [
    "./src/**/*.ts",
    "./test/**/*.ts",
    "./typings/index.d.ts",
    "./custom_typings/**/*.d.ts",
    "./node_modules/@types/**/*.d.ts"
],
"atom": {
    "rewriteTsconfig": false
}
}
45
Abe

"fs" est un module de base Node) et je pense que la syntaxe de votre déclaration d'importation est un peu compliquée. Essayez:

import * as fs from "fs";
19
Eric N

Tout ce dont vous avez besoin est "moduleResolution" défini sur "noeud" dans votre tsconfig.json:

{
  "compilerOptions": {
      ...
      "moduleResolution": "node"
      ...
  }
}

execute

npm install @types/node --save-dev

et maintenant vous pouvez utiliser l’importation standard TypeScript:

import * as fs from "fs";
12
yrtimiD

TypeScript connaît les modules basés sur des conventions, consultez Résolution du module pour plus de détails.

De plus, pour que IDE connaisse le module fs, vous devez fournir des typages pour le noeud.

Vérifiez aussi ceci numéro de github

2
Madhu Ranjan