Я использую MacBook Air. Я установил VS Code как IDE, а также установил TypeScript.
У меня есть простой файл с этой строкой:
import fs = require('fs');
Под «fs» внутри круглых скобок появляется красная волнистая линия, и появляется сообщение об ошибке [ts] Cannot find module 'fs'.
. Файл имеет расширение .ts. Я новичок в JavaScript и TypeScript, но у меня сложилось впечатление, что fs
это базовый модуль, так как же его не найти? Как решить проблему?
Другие вещи, которые я уже пробовал:
- Помещение тела простой функции в файл, а затем компиляция в командной строке с помощью
tsc
. Я получаю там эквивалентную ошибку:error TS2307: Cannot find module 'fs'.
- В командной строке
sudo npm install fs -g
. Это сообщает об очевидном успехе, но не решает проблему.
Я покопался в SE и в Интернете, но все ответы, которые казались близкими, похоже, предполагают, что 'fs' доступен.
javascript
typescript
tsc
Кирпич
источник
источник
node
?Ответы:
Вам необходимо включить файл определения для узла.
TypeScript 2.0+
Установить с помощью npm:
TypeScript <2.0
Если вы используете набор текста, вы можете запустить эту команду:
typings install dt~node --global --save
Или, если вы используете типизацию <1.0, запустите:
Или, если ничего не помогает, вручную загрузите файл сюда и включите его в свой проект.
источник
typings install node --ambient --save
) Спасибо!yarn add @types/node --dev
@types/node
вам может потребоваться перезапустить Code, чтобы он правильно распознал модули. Это должно относиться только к модулям собственных узлов и может даже не быть проблемой для вас, в зависимости от вашей сборки кода.Теперь есть лучший способ, не переходя к предыдущему tsd или инструментам ввода. NPM теперь имеет пакет @types для машинописного текста. В этом примере вам понадобится пакет
@types/node
:npm install "@types/node" --save-dev
Убедитесь, что вы используете опцию save-dev, чтобы устанавливать типы только в режиме разработки, а не в производственной среде. При использовании синтаксиса npm install "@ types /" у вас должны быть новейшие библиотеки узлов ...
Пакет fs не найден, потому что предыдущие инструменты, скорее всего, не использовали последний файл определения node.d.ts.
Ваш файл tsconfig.json необходимо обновить, чтобы найти пакеты этих типов. Мой пример при использовании типов jquery, jqueryui и node. Предполагая, что вам нужен синтаксис для работы и для вашего редактора кода, в данном случае редактор кода атома
{ "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" ... } }
выполнять
и теперь вы можете использовать стандартный импорт TypeScript:
import * as fs from "fs";
источник
У вас есть три варианта
tsconfig.json
(здесь: Node 11+), см. Документы :Либо укажите оба
typeRoots
иtypes
,typeRoots
либо полностью удалите обе строки (рекомендуется):{"compilerOptions": { ... "typeRoots": ["node_modules/@types"], // "typeRoots": [] -> won't work "types": ["node"] // "types": [] -> won't work }}
Типы установки:
Используйте файловую систему на основе обещаний (например, для использования async / await):
import {promises as fs} from 'fs'; async function foo() { ... await fs.writeFile('./yourPath', 'YourContent'); }
источник
.d.ts
файлов и создалtypeRoots
массив в моем,compilerOptions
я не указал,node_modules/@types
и это вызвало у меня ошибку. Как только я добавил это вtypeRoots
массив, он снова заработал.Typescript знает о модулях на основе соглашений, проверьте для получения более подробной информации разрешение модуля .
Также, чтобы IDE знала о
fs
модуле, вы должны указать типы для узла.Также проверьте эту проблему github
источник