如何使用 TypeScript 在 VS Code 中查找模块 "fs"?
How to find module "fs" in VS Code with TypeScript?
我 运行 使用 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' 可用。
"fs" 是一个核心节点模块,我认为您的 import 语句语法有点偏离。尝试:
import * as fs from "fs";
您需要包含节点的定义文件。
打字稿 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 并将其包含在您的项目中。
Typescript 了解基于约定的模块,查看 Module resolution 了解更多详情。
另外 IDE 要了解 fs
模块,您必须为节点提供类型。
同时检查这个 github issue
现在有一种更好的方法,无需使用以前的 tsd 或打字工具。
NPM 现在有用于 typescript 的 @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
}
}
您只需要在 tsconfig.json:
中将 "moduleResolution" 设置为 "node"
{
"compilerOptions": {
...
"moduleResolution": "node"
...
}
}
执行
npm install @types/node --save-dev
现在您可以使用标准的 TypeScript 导入:
import * as fs from "fs";
您在 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
使用基于承诺的文件系统(例如使用异步/等待):
import {promises as fs} from 'fs';
async function foo() {
...
await fs.writeFile('./yourPath', 'YourContent');
}
我这边的工作
const fs = require('fs') as typeof import('fs');
nwjs 与 vitejs
const fs = nw.require('fs') as typeof import('fs');
这删除了 any
我 运行 使用 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' 可用。
"fs" 是一个核心节点模块,我认为您的 import 语句语法有点偏离。尝试:
import * as fs from "fs";
您需要包含节点的定义文件。
打字稿 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 并将其包含在您的项目中。
Typescript 了解基于约定的模块,查看 Module resolution 了解更多详情。
另外 IDE 要了解 fs
模块,您必须为节点提供类型。
同时检查这个 github issue
现在有一种更好的方法,无需使用以前的 tsd 或打字工具。
NPM 现在有用于 typescript 的 @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
}
}
您只需要在 tsconfig.json:
中将 "moduleResolution" 设置为 "node"{
"compilerOptions": {
...
"moduleResolution": "node"
...
}
}
执行
npm install @types/node --save-dev
现在您可以使用标准的 TypeScript 导入:
import * as fs from "fs";
您在 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
使用基于承诺的文件系统(例如使用异步/等待):
import {promises as fs} from 'fs';
async function foo() {
...
await fs.writeFile('./yourPath', 'YourContent');
}
我这边的工作
const fs = require('fs') as typeof import('fs');
nwjs 与 vitejs
const fs = nw.require('fs') as typeof import('fs');
这删除了 any