如何使用 TypeScript 在 VS Code 中找到模块“fs”?
Posted
技术标签:
【中文标题】如何使用 TypeScript 在 VS Code 中找到模块“fs”?【英文标题】:How to find module "fs" in VS Code with TypeScript? 【发布时间】:2016-09-12 15:43:23 【问题描述】:我在 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”是可用的。
【问题讨论】:
你肯定是用node
执行这段代码?
计划是用node执行,是的。当前应用程序可以访问本地文件。 @peteb
【参考方案1】:
tsconfig.json
中有三个选项(此处:节点 11+),请参阅docs:
指定typeRoots
和types
,仅typeRoots
或删除这两行完全(推荐):
"compilerOptions":
...
"typeRoots": ["node_modules/@types"], // "typeRoots": [] -> won't work
"types": ["node"] // "types": [] -> won't work
安装类型:
npm install --save-dev @types/node
使用基于 promise 的文件系统(例如使用 async / await):
import promises as fs from 'fs';
async function foo()
...
await fs.writeFile('./yourPath', 'YourContent');
【讨论】:
当我创建了一个声明文件夹来放置我的.d.ts
文件并在我的compilerOptions
中创建了一个typeRoots
数组时,我没有指定node_modules/@types
,这就是导致我出错的原因.一旦我将它添加到 typeRoots
数组中,它就会再次起作用。
优秀的答案。与这里 90% 的人不同,我已经安装了 node
类型,但遇到了核心 node
模块的问题(例如在 运行时 找不到的 os
)【参考方案2】:
您需要包含节点的定义文件。
TypeScript 2.0+
使用 npm 安装:
npm install --save-dev @types/node
TypeScript
如果你使用typings,那么你可以运行这个命令:
typings install dt~node --global --save
或者,如果您使用的是
typings install node --ambient --save
或者,如果一切都失败了,手动下载文件here 并将其包含在您的项目中。
【讨论】:
我使用了您在编辑之前使用的命令,并且成功了。 (typings install node --ambient --save
) 谢谢!
@Brick 是的,这会起作用。答案中的命令是针对刚刚发布的typings 1.0
这个已经过时了,现在的类型通常应该用npm安装,如Abe's answer below。
带纱:yarn add @types/node --dev
安装@types/node
后,可能需要重启Code才能正确识别模块。这应该只适用于本机节点模块,根据您的代码构建,甚至可能对您来说不是问题。【参考方案3】:
现在有一种更好的方法,无需使用以前的 tsd 或 typings 工具。
NPM 现在有用于 typescript 的 @types 包。在这个例子中你需要包@types/node
:
npm install "@types/node" --save-dev
确保您使用 save-dev 选项仅在开发模式下安装类型,而不是在生产模式下。使用 npm install "@types/" 语法时,您应该拥有最新的节点库...
它没有找到 fs 包,因为以前的工具类型很可能没有使用最新的 node.d.ts 定义文件。
您的 tsconfig.json 文件需要更新才能找到这些类型的包。 如果使用 jquery、jqueryui 和节点类型,我的示例。假设您的代码编辑器也需要该语法,在本例中为“原子”代码编辑器
"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
【讨论】:
【参考方案4】:您只需要在 tsconfig.json 中将“moduleResolution”设置为“node”:
"compilerOptions":
...
"moduleResolution": "node"
...
执行
npm install @types/node --save-dev
现在您可以使用标准 TypeScript 导入:
import * as fs from "fs";
【讨论】:
试过但仍然遇到同样的问题 @pardeepjain,你有旧的打字稿吗?使用vscode?检查状态栏上的 Typescript 版本。【参考方案5】:Typescript 了解基于约定的模块,请查看Module resolution 了解更多详情。
还要让 IDE 了解 fs
模块,您必须为节点提供类型。
也可以查看github issue
【讨论】:
【参考方案6】:"fs" 是一个核心 Node 模块,我认为你的 import 语句语法有点不对劲。试试:
import * as fs from "fs";
【讨论】:
啊,不包括 Node 的类型。尝试添加此文件及其引用路径:github.com/DefinitelyTyped/DefinitelyTyped/blob/master/node/… @EricN 该页面导致 404。即使模块是整个 NodeJs 核心的一部分,也需要输入? 是的,打字是必要的。 Node 不是用 Typescript 编写的,因此它没有 Typescript 查找的任何类型数据。定义文件为您提供所有类型数据。以上是关于如何使用 TypeScript 在 VS Code 中找到模块“fs”?的主要内容,如果未能解决你的问题,请参考以下文章