Rahul
Rahul

Reputation: 1319

fs/promises API in TypeScript is not compiling correctly in JavaScript

I was recently working with TypeScript and the fs/promises API and got this error when the TypeScript code was compiled and run. I got this error saying:

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

Error: Cannot find module 'fs/promises'

When I looked at the compiled code, this is what I found...

var promises_1 = require("fs/promises");

Which started working by changing it to

var promises_1 = require("fs").promises;

This is my TypeScript file import:

import { readFile, writeFile, appendFile } from "fs/promises";

My package.json file:

 "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"
  }

And my tsconfig.json file:

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "strict": true,
    "outDir": "dist",
    "sourceMap": true
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "**/*.spec.ts"]
}

Node.js version: 12.18.0

How can I fix this?

Upvotes: 53

Views: 91314

Answers (6)

Sumit Kumar dey
Sumit Kumar dey

Reputation: 1

Try v20.0.0, It's will be work.

Upvotes: 0

Felix
Felix

Reputation: 1810

For importing specific methods you can use - example for: copyFile, rename:

import { copyFile, rename } from 'node:fs/promises';

Upvotes: 1

rattray
rattray

Reputation: 6089

The solution I like best:

import { promises as fs } from 'fs';

async function main() {
  await fs.writeFile('test.txt', 'hello');
}

Upvotes: 68

Kevin Ready
Kevin Ready

Reputation: 91

What worked for me in node v12.18.1 was:

import { promises } from "fs";
const { readFile, writeFile } = promises;

I could use both methods within nestJS/express context.

Upvotes: 7

Rahul
Rahul

Reputation: 1319

The error was due to unsupported Node version 12.x which doesn't support this require statement...

var promises_1 = require("fs/promises");

but this works

var promises_1 = require("fs").promises;

This can be solved by updating the Node to the latest.

Upvotes: 59

Cerberus
Cerberus

Reputation: 10317

In the used version of Node.js, there's no dedicated module fs/promises yet, according to the documentation. It should be possible, however, to upgrade Node.js to the latest 12.x, so that the module will be accessible.

Upvotes: 1

Related Questions