我在MacBook Air上运行。我安装了MS Code作为IDE并安装了TypeScript。
我有一个简单的文件,只有这一行:
import fs = require('fs');
我在“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'是可用的。
答案 0 :(得分:49)
您需要包含节点的定义文件。
TypeScript 2.0 +
使用npm安装:
npm install --save-dev @types/node
TypeScript< 2.0 强>
如果您使用typings,则可以运行此命令:
typings install dt~node --global --save
或者如果你正在使用打字< 1.0运行:
typings install node --ambient --save
如果所有其他方法都失败了,请手动下载文件here并将其包含在您的项目中。
答案 1 :(得分:42)
现在有一种更好的方法,无需使用以前的tsd或打字工具。
NPM现在有了打字稿的@types包。在此示例中,您需要包@types/node
:
npm install "@types/node" --save-dev
确保使用save-dev选项仅在开发模式下安装类型,而不是在生产中。使用npm install“@ types /”语法...
时,您应该拥有最新的节点库找不到fs包,因为之前的工具类型很可能没有使用最新的node.d.ts定义文件。
您的tsconfig.json文件需要更新才能找到这些类型的包。 我的例子是使用jquery,jqueryui和节点类型。假设您需要语法来为您的代码编辑器工作,在本例中是'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
}
}
答案 2 :(得分:16)
“fs”是一个核心Node模块,我认为你的import语句有点偏。尝试:
import * as fs from "fs";
答案 3 :(得分:12)
你需要的只是" moduleResolution"设置为"节点"在你的tsconfig.json中:
{
"compilerOptions": {
...
"moduleResolution": "node"
...
}
}
执行
npm install @types/node --save-dev
现在您可以使用标准的TypeScript导入:
import * as fs from "fs";
答案 4 :(得分:4)
tsconfig.json
中有三个选项(此处为节点11+),请参见blog post:
指定 typeRoots
和types
,仅typeRoots
或删除这两行都行(推荐):
{"compilerOptions": {
...
"typeRoots": ["node_modules/@types"], // "typeRoots": [] -> won't work
"types": ["node"] // "types": [] -> won't work
}}
安装类型:
npm install --save-dev @types/node
使用基于承诺的文件系统(例如,使用异步/等待):
import {promises as fs} from 'fs';
async function foo() {
...
await fs.writeFile('./yourPath', 'YourContent');
}
答案 5 :(得分:2)