Как найти модуль " fs " в MS коде с TypeScript?

Я работаю на MacBook Air. Я установил MS-код в качестве IDE, а также установил TypeScript.

у меня есть простой файл с такой строкой:

import fs = require('fs');

Я получаю красную закорючку под "fs" внутри скобки, и сообщение об ошибке [ts] Cannot find module 'fs'. файл имеет a .расширение ТС. Я новичок в JavaScript и TypeScript, но у меня сложилось впечатление, что fs был основным модулем, так как его нельзя было найти? Как я могу исправить проблема?

другие вещи, которые я уже пробовал:

  • ввод простого тела функции в файл, а затем компиляция в командной строке с помощью tsc. Я получаю по существу эквивалентную ошибку:error TS2307: Cannot find module 'fs'.
  • в командной строке sudo npm install fs -g. Это сообщает о явном успехе, но не устраняет проблему.

я пошарил вокруг SE и в интернете, но ответы, которые казались близкими, все, похоже, предполагают, что " fs " доступен.

5 ответов


вам нужно включить файл определения для узла.

TypeScript 2.0+

установить с помощью npm:

npm install --save-dev @types/node

TypeScript

Если вы используете typings затем вы можете выполнить эту команду:

typings install dt~node --global --save

или если вы используете typings

typings install node --ambient --save

или, если все остальное не удается, вручную загрузите файл здесь и включите его в свой проект.


теперь есть лучший способ, не переходя к предыдущим инструментам tsd или typings. NPM теперь имеет пакет @types для typescript. В этом примере вам нужен пакет @types/node:

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

убедитесь, что вы используете опцию save-dev только для установки типов в режиме разработки, а не в производстве. При использовании синтаксиса npm install "@types/" у вас должны быть последние библиотеки узлов...

Он не находит пакет fs, потому что предыдущие инструменты typings большинство вероятно, не использует последний узел.d.файл определения ts.

ваш tsconfig.файл json должен быть обновлен, чтобы найти эти пакеты типов. Мой пример при использовании типов jQuery, jqueryui и node. Предполагая, что вам нужен синтаксис для работы вашего редактора кода, в этом случае редактор кода "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 " - это модуль основного узла, и я думаю, что синтаксис вашего оператора импорта немного выключен. Попробуйте:

import * as fs from "fs";

все, что вам нужно, это" moduleResolution "установить в" node " в вашем tsconfig.в JSON:

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

выполнить

npm install @types/node --save-dev

и теперь вы можете использовать стандартный импорт TypeScript:

import * as fs from "fs";

Typescript знает о модулях, основанных на соглашениях, проверьте разрешение модуля подробнее.

также для IDE, чтобы знать о fs модуль, вы должны предоставить типизации для узла.

также проверить это выпуск github