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:
tsc
. Je reçois ici une erreur essentiellement équivalente: error TS2307: Cannot find module 'fs'.
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.
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.
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
}
}
"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";
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";
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