Estoy usando una MacBook Air. Instalé VS Code como un IDE y también tengo TypeScript instalado.
Tengo un archivo simple con solo esta línea:
import fs = require('fs');
Aparece un ondulado rojo debajo de la 'fs' dentro del paréntesis y el mensaje de error es [ts] Cannot find module 'fs'.
El archivo tiene una extensión .ts. Soy nuevo en JavaScript y TypeScript, pero tenía la impresión de que fs
era un módulo principal, entonces, ¿cómo no se podía encontrar? ¿Cómo soluciono el problema?
Otras cosas que ya probé:
- Poner un cuerpo de función simple en el archivo y luego compilarlo en la línea de comando con
tsc
. Recibo un error esencialmente equivalente allí:error TS2307: Cannot find module 'fs'.
- En la línea de comando
sudo npm install fs -g
. Esto informa un éxito aparente, pero no soluciona el problema.
Revisé SE y la web, pero las respuestas que parecían cercanas parecen asumir que 'fs' está disponible.
javascript
typescript
tsc
Ladrillo
fuente
fuente
node
?Respuestas:
Debe incluir el archivo de definición para node.
TypeScript 2.0+
Instalar usando npm:
TypeScript <2.0
Si usa mecanografía , puede ejecutar este comando:
typings install dt~node --global --save
O si está utilizando typings <1.0 ejecute:
O si todo lo demás falla, descargue manualmente el archivo aquí e inclúyalo en su proyecto.
fuente
typings install node --ambient --save
) ¡Gracias!yarn add @types/node --dev
@types/node
, es posible que deba reiniciar Code para que reconozca los módulos correctamente. Este solo debería ser el caso con los módulos de nodo nativo, y puede que ni siquiera sea un problema para usted dependiendo de su compilación de código.Ahora hay una mejor manera sin tener que ir a las herramientas tsd o de mecanografía anteriores. NPM ahora tiene el paquete @types para mecanografiado. En este ejemplo, necesita el paquete
@types/node
:npm install "@types/node" --save-dev
Asegúrese de que está utilizando la opción save-dev para instalar solo los tipos en modo de desarrollo, no en producción. Debería tener las últimas bibliotecas de nodos cuando utilice la sintaxis npm install "@ types /" ...
No encuentra el paquete fs porque lo más probable es que las herramientas anteriores no utilicen el último archivo de definición node.d.ts.
Su archivo tsconfig.json debe actualizarse para encontrar estos paquetes de tipo. Mi ejemplo si uso jquery, jqueryui y tipos de nodo. Suponiendo que también necesita la sintaxis para su editor de código, en este caso, el editor de código '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 } }
fuente
"fs" es un módulo de nodo principal y creo que la sintaxis de la declaración de importación está un poco fuera de lugar. Tratar:
import * as fs from "fs";
fuente
Todo lo que necesita es "moduleResolution" establecido en "node" en su tsconfig.json:
{ "compilerOptions": { ... "moduleResolution": "node" ... } }
ejecutar
y ahora puede utilizar la importación estándar de TypeScript:
import * as fs from "fs";
fuente
Tiene tres opciones en
tsconfig.json
(aquí: Nodo 11+), consulte los documentos :De cualquier specifiy tanto
typeRoots
ytypes
solamente,typeRoots
o eliminar ambas líneas por completo (recomendado):{"compilerOptions": { ... "typeRoots": ["node_modules/@types"], // "typeRoots": [] -> won't work "types": ["node"] // "types": [] -> won't work }}
Tipos de instalación:
Use un sistema de archivos basado en promesas (por ejemplo, para usar async / await):
import {promises as fs} from 'fs'; async function foo() { ... await fs.writeFile('./yourPath', 'YourContent'); }
fuente
.d.ts
archivos y creé unatypeRoots
matriz en mi,compilerOptions
no había especificadonode_modules/@types
y eso es lo que me causó el error. Una vez que agregué eso a latypeRoots
matriz, funcionó nuevamente.Typecript conoce los módulos según las convenciones; consulte Resolución del módulo para obtener más detalles.
Además, para que IDE conozca el
fs
módulo, debe proporcionar tipificaciones para node.También verifique este problema de github
fuente