How to find module "fs" in VS Code with TypeScript?

JavascriptTypescriptTsc

Javascript Problem Overview


I'm running on a MacBook Air. I installed VS Code as an IDE and also have TypeScript installed.

I have a simple file with just this line:

import fs = require('fs');

I'm getting a red squiggly under the 'fs' inside the parenthesis and the error message is [ts] Cannot find module 'fs'. The file has a .ts extension. I'm new to JavaScript and to TypeScript, but I was under the impression that fs was a core module, so how could it not be found? How do I fix the problem?

Other things that I tried already:

  • Putting a simple function body in the file and then compiling on the command line with tsc. I get an essentially equivalent error there: error TS2307: Cannot find module 'fs'.
  • On the command line sudo npm install fs -g. This reports apparent success, but doesn't fix the problem.

I poked around SE and the web, but the answers that seemed close all appear to assume that 'fs' is available.

Javascript Solutions


Solution 1 - Javascript

You need to include the definition file for node.

TypeScript 2.0+

Install using npm:

npm install --save-dev @types/node

TypeScript < 2.0

If you use typings then you can run this command:

typings install dt~node --global --save

Or if you are using typings < 1.0 run:

typings install node --ambient --save

Or if all else fails, manually download the file here and include it in your project.

Solution 2 - Javascript

There is a better way now without going to the previous tsd or typings tools. NPM now has the @types package for typescript. In this example you need the package @types/node:

npm install "@types/node" --save-dev

Make sure you are using the save-dev option to only install the types in development mode, not in production. You should have the latest node libraries when use the npm install "@types/" syntax...

It not finding the fs package because the previous tools typings most likely not using the latest node.d.ts definition file.

Your tsconfig.json file needs to be updated to find these type packages. My example if using jquery, jqueryui and node types. Assuming you need the syntax to work for your code editor as well, in this case the 'atom' code editor

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

Solution 3 - Javascript

"fs" is a core Node module and I think your import statement syntax is a little off. Try:

import * as fs from "fs";

Solution 4 - Javascript

All you need is "moduleResolution" set to "node" in your tsconfig.json:

{
  "compilerOptions": {
      ...
	  "moduleResolution": "node"
      ...
  }
}

execute

npm install @types/node --save-dev

and now you can use standard TypeScript import:

import * as fs from "fs";

Solution 5 - Javascript

You have three options in tsconfig.json (here: Node 11+), see docs:

Either specifiy both typeRoots and types, only typeRoots or remove both lines completely (recommended):

{"compilerOptions": {
  ...
  "typeRoots": ["node_modules/@types"],  // "typeRoots": [] -> won't work
  "types": ["node"]                      // "types": [] -> won't work
}}

Install types:

npm install --save-dev @types/node

Use promise based file system (e.g to use async / await):

import {promises as fs} from 'fs';

async function foo() {
    ...
    await fs.writeFile('./yourPath', 'YourContent');
}

Solution 6 - Javascript

Typescript knows about modules based upon conventions , check Module resolution for more detail.

Also for IDE to know about fs module, you have to provide typings for node.

Also check this github issue

Solution 7 - Javascript

on my side this work

 const fs = require('fs') as typeof import('fs');

of for nwjs with vitejs

 const fs = nw.require('fs') as typeof import('fs');

this remove the any

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBrickView Question on Stackoverflow
Solution 1 - JavascriptDavid SherretView Answer on Stackoverflow
Solution 2 - JavascriptAbeView Answer on Stackoverflow
Solution 3 - JavascriptEric NView Answer on Stackoverflow
Solution 4 - JavascriptyrtimiDView Answer on Stackoverflow
Solution 5 - JavascriptUser ReboView Answer on Stackoverflow
Solution 6 - JavascriptMadhu RanjanView Answer on Stackoverflow
Solution 7 - JavascriptjonView Answer on Stackoverflow