javascript - Ako nájsť modul "fs" vo VS Code s TypeScript?


Bežím na MacBooku Air. Nainštaloval som si VS Code ako IDE a mám nainštalovaný aj TypeScript.

Mám jednoduchý súbor, ktorý obsahuje len tento riadok:

import fs = require('fs');

Pod ľavým dolným podčiarknutím vidím červenú vlnovku pod 'fs' v zátvorkách a chybová správa je [ts] Cannot find module 'fs'. Súbor má príponu .ts. Som nový v JavaScripte a TypeScripte, ale mal som dojem, že fs je jadrový modul, takže ako by ho nemohlo nájsť? Ako môžem tento problém vyriešiť?

Iné veci, ktoré som už vyskúšal:

  • Vloženie jednoduchého tela funkcie do súboru a potom kompilovanie cez príkazový riadok pomocou tsc. Tam dostanem v podstate rovnakú chybu: error TS2307: Cannot find module 'fs'.
  • Na príkazovom riadku sudo npm install fs -g. Toto hlási zdanlivý úspech, ale problém nevyrieši.

Prehľadával som SE a web, ale odpovede, ktoré sa zdali byť blízke, všetky predpokladajú, že 'fs' je k dispozícii.

Odpoveď č. 1

Musíte zahrnúť súbor definície pre node.

TypeScript 2.0+

Nainštalujte pomocou npm:

npm install --save-dev @types/node

TypeScript < 2.0

Ak používate typy, môžete spustiť tento príkaz:

typings install dt~node --global --save

Alebo ak používate typings < 1.0, spustite:

typings install node --ambient --save

Alebo ak všetko ostatné zlyhá, stiahnite si súbor manuálne tu a zahrňte ho do svojho projektu.

Odpoveď č. 2

Teraz existuje lepší spôsob bez potreby používať predchádzajúce tsd alebo nástroje typings. NPM teraz má balík @types pre TypeScript. V tomto príklade potrebujete balík @types/node:

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

Uistite sa, že používate možnosť save-dev, aby sa typy inštalovali iba v režime vývoja, nie v produkcii. Mali by ste mať najnovšie knižnice Node pri používaní syntaxe npm install "@types/"...

Nenájdu balík fs, pretože predchádzajúce typy nástrojov pravdepodobne nepoužívajú najnovší súbor definícií node.d.ts.

Váš súbor tsconfig.json je potrebné aktualizovať, aby našiel tieto typové balíčky. Môj príklad používa typy pre jquery, jqueryui a node. Predpokladá sa, že potrebujete, aby syntax fungovala aj vo vašom kódu editora, v tomto prípade v editore kódu '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
}
}

Odpoveď č. 3

"fs" je základný modul Node a myslím, že syntax vášho príkazu importu je trochu nesprávna. Skúste:

import * as fs from "fs";

Odpoveď č. 4

Všetko, čo potrebujete, je nastaviť „moduleResolution“ na „node“ vo vašom tsconfig.json:

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

vykonať

npm install @types/node --save-dev

a teraz môžete použiť štandardný TypeScript import:

import * as fs from "fs";

Odpoveď č. 5

V súbore tsconfig.json máte tri možnosti (tu: Node 11+), pozrite si dokumentáciu:

Buď uveďte oboje typeRoots a types, len typeRoots alebo odstráňte obe riadky úplne (odporúčané):

{"compilerOptions": {
  ...
  "typeRoots": ["node_modules/@types"],  // "typeRoots": [] -> won't work
  "types": ["node"]                      // "types": [] -> won't work
}}

Typy inštalácie:

npm install --save-dev @types/node

Použite systém súborov založený na sľuboch (napr. na použitie async/await):

import {promises as fs} from 'fs';

async function foo() {
    ...
    await fs.writeFile('./yourPath', 'YourContent');
}

Súvisiace články