javascript - Bagaimana cara menemukan modul "fs" di VS Code dengan TypeScript?
Saya sedang menggunakan MacBook Air. Saya menginstal VS Code sebagai IDE dan juga telah menginstal TypeScript.
Saya memiliki sebuah file sederhana dengan hanya baris ini:
import fs = require('fs');
Saya mendapatkan garis bergelombang merah di bawah 'fs' di dalam tanda kurung dan pesan errornya adalah [ts] Cannot find module 'fs'. File ini memiliki ekstensi .ts. Saya baru dalam JavaScript dan TypeScript, tetapi saya beranggapan bahwa fs adalah modul inti, jadi bagaimana bisa modul itu tidak ditemukan? Bagaimana cara memperbaiki masalah ini?
Hal-hal lain yang sudah saya coba:
- Meletakkan isi fungsi sederhana di file dan kemudian mengkompilasinya di baris perintah dengan
tsc. Saya mendapatkan kesalahan yang pada dasarnya setara di sana:error TS2307: Tidak dapat menemukan modul 'fs'. - Di baris perintah
sudo npm install fs -g. Ini melaporkan keberhasilan yang tampak, tetapi tidak memperbaiki masalah.
Saya mencari-cari di SE dan web, tetapi jawaban yang tampaknya dekat semuanya terlihat mengasumsikan bahwa 'fs' tersedia.
Jawaban #1
Anda perlu menyertakan file definisi untuk node.
TypeScript 2.0+
Pasang menggunakan npm:
npm install --save-dev @types/node
TypeScript < 2.0
Jika Anda menggunakan typings, maka Anda dapat menjalankan perintah ini:
typings install dt~node --global --save
Atau jika Anda menggunakan typings < 1.0 jalankan:
typings install node --ambient --save
Atau jika semua cara gagal, unduh file tersebut secara manual di sini dan sertakan dalam proyek Anda.
Jawaban #2
Sekarang ada cara yang lebih baik tanpa harus pergi ke tsd sebelumnya atau alat typings. NPM sekarang memiliki paket @types untuk TypeScript. Dalam contoh ini Anda memerlukan paket @types/node:
npm install "@types/node" --save-dev
Pastikan Anda menggunakan opsi save-dev untuk hanya menginstal tipe dalam mode pengembangan, bukan di produksi. Anda harus memiliki pustaka node terbaru saat menggunakan sintaks npm install "@types/"...
It tidak menemukan paket fs karena tipe alat sebelumnya kemungkinan besar tidak menggunakan file definisi node.d.ts terbaru.
File tsconfig.json Anda perlu diperbarui untuk menemukan paket tipe ini. Contoh saya menggunakan tipe jquery, jqueryui, dan node. Dengan asumsi Anda juga membutuhkan sintaks ini agar bekerja di editor kode Anda, dalam hal ini editor kode '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
}
}
Jawaban #3
"fs" adalah modul inti Node dan saya pikir sintaks pernyataan impor Anda agak salah. Coba:
import * as fs from "fs";
Jawaban #4
Yang Anda butuhkan hanyalah "moduleResolution" diatur ke "node" dalam tsconfig.json Anda:
{
"compilerOptions": {
...
"moduleResolution": "node"
...
}
}
mengeksekusi
npm install @types/node --save-dev
dan sekarang Anda dapat menggunakan impor TypeScript standar:
import * as fs from "fs";
Jawaban #5
Anda memiliki tiga opsi dalam tsconfig.json (di sini: Node 11+), lihat dokumen:
Baik tentukan kedua typeRoots dan types, hanya typeRoots atau hapus kedua baris sepenuhnya (disarankan):
{"compilerOptions": {
...
"typeRoots": ["node_modules/@types"], // "typeRoots": [] -> won't work
"types": ["node"] // "types": [] -> won't work
}}
Jenis instalasi:
npm install --save-dev @types/node
Gunakan sistem file berbasis promise (misalnya untuk menggunakan async/await):
import {promises as fs} from 'fs';
async function foo() {
...
await fs.writeFile('./yourPath', 'YourContent');
}
