javascript - TypeScript ile VS Code'da "fs" modülü nasıl bulunur?
Bir MacBook Air üzerinde çalışıyorum. IDE olarak VS Code'u yükledim ve ayrıca TypeScript de yükledim.
Sadece bu satırı içeren basit bir dosyam var:
import fs = require('fs');
Parantez içindeki 'fs' üzerinde kırmızı dalgalı bir çizgi görünüyor ve hata mesajı [ts] Cannot find module 'fs'.. Dosyanın uzantısı .ts. JavaScript ve TypeScript konusunda yeniyim ama fs'nin temel bir modül olduğunu düşünüyordum, o zaman nasıl bulunamaz? Bu sorunu nasıl çözebilirim?
Zaten denediğim diğer şeyler:
- Dosyaya basit bir fonksiyon gövdesi koyup ardından komut satırında
tscile derliyorum. Orada da esasında eşdeğer bir hata alıyorum:error TS2307: Cannot find module 'fs'. - Komut satırında
sudo npm install fs -gkomutunu çalıştırın. Bu görünürde başarı raporlar, ancak sorunu çözmez.
SE ve web'de araştırma yaptım, ama yakın gibi görünen cevapların hepsi 'fs'in mevcut olduğunu varsayıyor gibi görünüyor.
Cevap #1
Node için tanım dosyasını eklemeniz gerekiyor.
TypeScript 2.0+
npm kullanarak yükleyin:
npm install --save-dev @types/node
TypeScript < 2.0
Eğer tip kullanıyorsanız, bu komutu çalıştırabilirsiniz:
typings install dt~node --global --save
Veya eğer typings < 1.0 kullanıyorsanız, çalıştırın:
typings install node --ambient --save
Veya başka her şey başarısız olursa, dosyayı buradan manuel olarak indirip projenize dahil edin.
Cevap #2
Önceki tsd veya typings araçlarına gitmeden şimdi daha iyi bir yol var. NPM artık TypeScript için @types paketine sahip. Bu örnekte @types/node paketine ihtiyacınız var:
npm install "@types/node" --save-dev
Türlerini yalnızca geliştirme modunda yüklemek için save-dev seçeneğini kullandığınızdan emin olun, üretimde değil. npm install "@types/" sözdizimini kullanırken en son node kütüphanelerine sahip olmalısınız...
Fs paketini bulamıyor çünkü önceki araçların tip tanımlamaları muhtemelen en son node.d.ts tanım dosyasını kullanmıyor.
Bu tür paketleri bulmak için tsconfig.json dosyanızın güncellenmesi gerekiyor. Benim örneğim jquery, jqueryui ve node tiplerini kullanıyor. Kod editörünüzde de sözdiziminin çalışması gerektiğini varsayarsak, bu durumda 'atom' kod editörü
{
"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
}
}
Cevap #3
"fs" bir temel Node modülüdür ve bence import ifadenizin sözdizimi biraz yanlış. Şunu deneyin:
import * as fs from "fs";
Cevap #4
Tek yapmanız gereken, tsconfig.json dosyanızda "moduleResolution" değerini "node" olarak ayarlamaktır:
{
"compilerOptions": {
...
"moduleResolution": "node"
...
}
}
uygulamak
npm install @types/node --save-dev
ve şimdi standart TypeScript ithalatını kullanabilirsiniz:
import * as fs from "fs";
Cevap #5
tsconfig.json'de üç seçeneğiniz var (burada: Node 11+), belgelere bakın:
Ya her ikisini de belirtin typeRoots ve types, sadece typeRoots veya her iki satırı tamamen kaldırın (önerilir):
{"compilerOptions": {
...
"typeRoots": ["node_modules/@types"], // "typeRoots": [] -> won't work
"types": ["node"] // "types": [] -> won't work
}}
Kurulum türleri:
npm install --save-dev @types/node
Söz promise tabanlı dosya sistemi kullanın (ör. async/await kullanmak için):
import {promises as fs} from 'fs';
async function foo() {
...
await fs.writeFile('./yourPath', 'YourContent');
}
