Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

fs/promises api in typescript not compiling in javascript correctly


I was recently working with typescript and 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 version 12.18.0

Is there someone facing the same problem or am I doing something wrong?
please help
Thanks...

like image 584
Rahul Sharma Avatar asked Nov 07 '20 06:11

Rahul Sharma


4 Answers

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.

like image 154
Rahul Sharma Avatar answered Oct 09 '22 04:10

Rahul Sharma


The solution I like best:

import { promises as fs } from 'fs';

async function main() {
  await fs.writeFile('test.txt', 'hello');
}
like image 26
rattray Avatar answered Oct 09 '22 05:10

rattray


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.

like image 6
Kevin Ready Avatar answered Oct 09 '22 04:10

Kevin Ready


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.

like image 1
Cerberus Avatar answered Oct 09 '22 03:10

Cerberus