Skip to main content

How to Solve the "TypeError: fs.readFileSync is not a function" Error in JavaScript

The TypeError: fs.readFileSync is not a function and the related ReferenceError: fs is not defined are common errors that occur when there is a misunderstanding about JavaScript environments. This error is a clear signal that you are either trying to use the Node.js fs module in the browser, or you have a simple typo or import error in your Node.js code.

This guide will explain the fundamental reason this error occurs and provide the correct solutions for both browser and Node.js environments.

The Core Problem: fs is a Node.js Module

The fs module is the built-in File System module in Node.js. It provides functions to interact with the server's local file system, such as reading files (fs.readFileSync()) and writing files (fs.writeFileSync()).

For critical security reasons, JavaScript code running in a web browser is sandboxed and is not allowed to access the user's local file system. Therefore, the fs module does not exist in the browser.

Scenario 1: You are in a Browser Environment

If you see this error in your browser's developer console, it means your client-side code is trying to use a Node.js-specific API.

Example of problem:

// This code, when run in a browser, will fail.
import * as fs from 'fs';
const data = fs.readFileSync('/path/to/file.txt');

Error Output:

Uncaught TypeError: fs.readFileSync is not a function
// Or more likely:
// Uncaught ReferenceError: fs is not defined

Solution: you must use browser-native APIs to handle files. The correct approach depends on your goal:

Solution A: To read a file from your server

Use the fetch() API.

async function readFileFromServer() {
try {
const response = await fetch('/path/to/your/file.txt');
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const text = await response.text();
console.log(text);
} catch (error) {
console.error('Could not fetch the file:', error);
}
}

Solution B: To let a user select a file from their computer

Use an <input type="file"> element and the FileReader API.

<input type="file" id="file-input">
const fileInput = document.getElementById('file-input');
fileInput.addEventListener('change', function() {
const file = this.files[0];
if (file) {
const reader = new FileReader();
reader.onload = function(e) {
const content = e.target.result;
console.log(content); // The content of the user's file
};
reader.readAsText(file);
}
});

Scenario 2: You are in a Node.js Environment

If you are correctly running your code in Node.js and still see this error, it's almost always a simple typo or an import issue.

Cause A (Most Common): A Simple Typo

The method is named readFileSync using camelCase. A common mistake is to misspell it.

Example of problem:

const fs = require('fs');

// PROBLEM: The method is misspelled as `readFilesync` (lowercase 's').
const data = fs.readFilesync('my-file.txt', 'utf8');

Error Output:

TypeError: fs.readFilesync is not a function

Solution: correct the spelling to readFileSync.

const fs = require('fs');

// Correct: Use the camelCase spelling.
const data = fs.readFileSync('my-file.txt', 'utf8');

console.log(data);

Cause B: Incorrectly Importing the fs Module

You must import the fs module before you can use it. The syntax for this depends on whether your project is using CommonJS or ES Modules.

The Solution (CommonJS - require)

This is the traditional and still very common syntax in Node.js.

const fs = require('fs');

const data = fs.readFileSync('my-file.txt', 'utf8');

The Solution (ES Modules - import)

If you have set "type": "module" in your package.json, you must use the import syntax.

import * as fs from 'fs';
// or to import just one method:
// import { readFileSync } from 'fs';

const data = fs.readFileSync('my-file.txt', 'utf8');

Conclusion

The TypeError: fs.readFileSync is not a function error is a clear indicator of an environment mismatch or a simple typo.

To solve it, follow this diagnostic checklist:

  1. Where is your code running?
    • If it's in the browser, you cannot use the fs module. You must switch to a browser API like fetch() or FileReader.
    • If it's in Node.js, proceed to the next steps.
  2. Check your spelling: Ensure the method is spelled correctly with camelCase: readFileSync.
  3. Check your import: Make sure you have correctly imported the fs module at the top of your file, using either require('fs') for CommonJS or import * as fs from 'fs' for ES Modules.