打字稿中的 fs/promises api 未在 javascript 中正确编译

Rah*_*rma 15 javascript fs node.js typescript


我最近在使用 typescript 和 fs/promises API,并且在编译和运行 typescript 代码时遇到了这个错误,我收到了这个错误说

internal/modules/cjs/loader.js:968
  throw err;
  ^

Error: Cannot find module 'fs/promises'
Run Code Online (Sandbox Code Playgroud)

当我查看编译后的代码时,这就是我发现的......

var promises_1 = require("fs/promises");
Run Code Online (Sandbox Code Playgroud)

通过将其更改为开始工作

var promises_1 = require("fs").promises;
Run Code Online (Sandbox Code Playgroud)

这是我的打字稿文件导入

import { readFile, writeFile, appendFile } from "fs/promises";
Run Code Online (Sandbox Code Playgroud)

我的package.json文件

 "devDependencies": {
    "@types/cheerio": "^0.22.22",
    "@types/got": "^9.6.11",
    "@types/node": "^14.14.6"
  },
  "dependencies": {
    "cheerio": "^1.0.0-rc.3",
    "got": "^11.8.0"
  }
Run Code Online (Sandbox Code Playgroud)

和我的tsconfig.json文件

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "strict": true,
    "outDir": "dist",
    "sourceMap": true
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "**/*.spec.ts"]
}
Run Code Online (Sandbox Code Playgroud)

节点版本12.18.0

有没有人面临同样的问题,或者我做错了什么?
请帮忙
谢谢...

rat*_*ray 60

我最喜欢的解决方案:

import { promises as fs } from 'fs';

async function main() {
  await fs.writeFile('test.txt', 'hello');
}
Run Code Online (Sandbox Code Playgroud)


Rah*_*rma 33

错误是由于不受支持的 Node 版本 12.x 不支持此 require 语句...

var promises_1 = require("fs/promises");
Run Code Online (Sandbox Code Playgroud)

但这有效

var promises_1 = require("fs").promises;
Run Code Online (Sandbox Code Playgroud)

这可以通过将节点更新到最新来解决。

  • 我使用 `import {promises as fsp} from "fs"` (23认同)

小智 7

在 Node v12.18.1 中对我有用的是:

import { promises } from "fs";
const { readFile, writeFile } = promises;
Run Code Online (Sandbox Code Playgroud)

我可以在 NestJS/express 上下文中使用这两种方法。