Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Module not found: Can't resolve 'fs in node_modules/destroy #9768

Closed
jrusso1020 opened this issue Dec 17, 2019 · 20 comments
Closed

Module not found: Can't resolve 'fs in node_modules/destroy #9768

jrusso1020 opened this issue Dec 17, 2019 · 20 comments
Labels
please add a complete reproduction The issue lacks information for further investigation

Comments

@jrusso1020
Copy link
Contributor

jrusso1020 commented Dec 17, 2019

Bug report

After upgrading to Next 9.1.6 I am having a problem running my next js server locally. I get

[ error ] ./node_modules/destroy/index.js
Module not found: Can't resolve 'fs' in '**/node_modules/destroy'

When running npm run dev, however this change seems to be working fine in production it just happens locally when running the hot reloading server

Describe the bug

^^ Look at above description

I think it might possibly have to do with this change. We are no longer requiring fs in the hot reloader fd95d6c#diff-6161346d2c5f4b7abc87059d8768c44bL1

To Reproduce

Edit:
Clone this repo https://github.com/iteratelabs/next-not-working
use node version 10.15.3
npm install
run the command npm run dev and you should get a module not found error.

Expected behavior

Expected behavior is for the development server to still run the web application after upgrading.

Screenshots

Screen Shot 2019-12-17 at 12 40 31 PM

System information

  • OS: macOS
  • Version of Next.js: 9.1.6

Additional context

EDIT: I downgraded to 9.1.5 and still get the same error however. Was not getting this error previously though until today

I took a look at this issue #7755 and added

if (!isServer) {
      config.node = {
        fs: 'empty'
      }
    }

to my webpack config but then I got the following error

[ error ] ./node_modules/express/lib/request.js
Module not found: Can't resolve 'net' in '**/node_modules/express/lib'

So now I have

if (!isServer) {
      config.node = {
        fs: 'empty',
       net: 'empty'
   }
}

Which allows me to build the webapp and run it in the development server but I get this warning

[ warn ]  ./node_modules/express/lib/view.js
Critical dependency: the request of a dependency is an expression
@timneutkens
Copy link
Member

Sounds like you're doing something wrong in your app which ends up importing all of next.js and then tries to bundle it. Please always provide a full reproduction when creating issues as it's really hard to tell now.

@timneutkens timneutkens added the please add a complete reproduction The issue lacks information for further investigation label Dec 17, 2019
@jrusso1020
Copy link
Contributor Author

Hi @timneutkens sorry for the generic description, I've tried to create a slightly stripped down repo and posted it here https://github.com/iteratelabs/next-not-working for you to see publicly. As well as updated the reproduction steps

We haven't made any changes where we would be importing all of next.js and creating this error

@timneutkens
Copy link
Member

Cool, thanks! Will have a look later.

@kishanio
Copy link

@timneutkens facing the same issue. Seems like somethings broke in Next.JS dependency tool chain.

Encountered this after fresh npm i

Screenshot 2019-12-18 at 10 41 07 AM

@ohana54
Copy link

ohana54 commented Dec 18, 2019

It's probably due to zivl/sentry-testkit#43
Please read the proposed solution there, as the testkit is not meant to be loaded in a browser environment.

@jrusso1020
Copy link
Contributor Author

can confirm that our issue was related to the sentry package problem, one of our developers figured this out yesterday.

Should the next example with sentry https://github.com/zeit/next.js/tree/canary/examples/with-sentry be updated perhaps? We originally followed this to implement sentry but it seems going forward with newer versions of sentry this will no longer work as is

@ohana54
Copy link

ohana54 commented Dec 18, 2019

@jrusso1020 IMO the next example should be updated with the alternative solution I suggested in the other ticket, copy pasting here:

if (process.env.NODE_ENV !== 'production') {
    // Don't actually send the errors to Sentry
    sentryOptions.beforeSend = () => null

    // Instead, dump the errors to the console
    sentryOptions.integrations = [
      new SentryIntegrations.Debug({
        // Trigger DevTools debugger instead of using console.log
        debugger: false,
      }),
    ]
  }

  Sentry.init(sentryOptions)

This doesn't use the testkit at all.

@jrusso1020
Copy link
Contributor Author

jrusso1020 commented Dec 18, 2019

@ohana54 I agree, I have changed my code to the code you suggested and my next js app is working in development mode again.

I can open up a PR with the changes

jrusso1020 added a commit to jrusso1020/next.js that referenced this issue Dec 18, 2019
With an update to sentry-testkit to depend on native node modules
this example no longer works in the browser. Sentry-testkit is made
for a node server not to work in the browser. However, with this
change we no longer require sentry-testkit in our setup for sentry.
Before this change with the update of sentry-testkit to 3.1 we were
encountering errors when trying to run the next.js local development
server because it was trying to load sentry-testkit in the browser.

Thank you to @ohana54 for his example found here zivl/sentry-testkit#43
this will now close this issue vercel#9768
as well.
timneutkens pushed a commit that referenced this issue Dec 18, 2019
With an update to sentry-testkit to depend on native node modules
this example no longer works in the browser. Sentry-testkit is made
for a node server not to work in the browser. However, with this
change we no longer require sentry-testkit in our setup for sentry.
Before this change with the update of sentry-testkit to 3.1 we were
encountering errors when trying to run the next.js local development
server because it was trying to load sentry-testkit in the browser.

Thank you to @ohana54 for his example found here zivl/sentry-testkit#43
this will now close this issue #9768
as well.
@VaidyaKautilya

This comment has been minimized.

@Coyas
Copy link

Coyas commented Jul 14, 2020

I have this problem too
i try this:

webpack: (config, { isServer }) => {
        // Fixes npm packages that depend on 'fs' module
        if (!isServer) {
            config.node = {
                fs: "empty", // when i put this line i get the 'net' error
                net: "empty" // then i put the 'net' line
            };
        }

        return config;
    }

but @jrusso1020 my console doesn't show the warning that you say appears in yours:
[ warn ] ./node_modules/express/lib/view.js Critical dependency: the request of a dependency is an expression

It appears only when I have the dynamic routes " [id].js " and show me this error:

Unhandled Runtime Error

TypeError: http.ServerResponse is undefined

this is a nightmare, there is a real and official solution for this problem??

@BigSully
Copy link

Same issue with the author, and we've used npm run dev for quite a long time before we discovered the cause.
The cause is that we have put some non-page js files in the pages directory. The issue disappeared after we removed all files and directories in the pages except a simple hello.js of content export default () => <div>hello</div>.
Now we still put those non-page code in the pages directory, but with a different file suffix .jx, which wouldn't be treated as pages by the next.js any more. The .jx file can still be imported by the node file system.

@modbender
Copy link

I got this problem when I was converting function to class element vc code accidentally auto imported import { render } from "node-sass";

@sk3106
Copy link

sk3106 commented Aug 15, 2020

Same issue with the author, and we've used npm run dev for quite a long time before we discovered the cause.
The cause is that we have put some non-page js files in the pages directory. The issue disappeared after we removed all files and directories in the pages except a simple hello.js of content export default () => <div>hello</div>.
Now we still put those non-page code in the pages directory, but with a different file suffix .jx, which wouldn't be treated as pages by the next.js any more. The .jx file can still be imported by the node file system.

This worked for me on the latest version of Next JS. I had to move serverless-mysql db.js file from pages directory and it worked. I could not find any solution until I saw your answer, thank you for sharing this.

@yashwant-dangi
Copy link

i was getting the same error, but it was due to my mistake, since i am using axios for network request, but a some point in my app i typed response and pressed enter and intellisense imported import {response} from 'express', as soon as i removed this line, my code starts working again. you should check your code first in case of imports errors.

@simonhaenisch
Copy link
Contributor

Just got the same error when I was importing an object in a front-end page but the object was defined in an API route which includes server-side imports. Solution was to export the object from its own file so the (unrelated) imports wouldn't get in the way.

Might be a common mistake which is why I'm dropping this here as one possible solution. The error message could definitely be more helpful about which import exactly is causing the trouble 😅 Here's what it looks like with next@9.5.3:

event - build page: /preferences
wait  - compiling...
error - ./node_modules/destroy/index.js:14:0
Module not found: Can't resolve 'fs'
null

@mir4ri
Copy link

mir4ri commented Mar 8, 2021

import { query } from "express";

it was my problem

@s-tkachenko
Copy link

Perhaps it's not the author issue, but could be helpful for someone else.

I had a similar issue with the module "next-page-tester"
Can't resolve 'fs'...
just because I've put my .test.tsx files inside pages folder, Next.js couldn't ignore test files from pages.

Solution: move test files out of pages folder, for example into root/__tests__
Related issue: #1914

@omar-dulaimi
Copy link

I also mistakenly imported this:
const { query } = require('express');

@csgentile
Copy link

import { query } from "express";

it was my problem

I had the same issue using 'next-auth'. I was using some functions like this:

import { providers, signIn, csrfToken, getSession } from 'next-auth';

while the actual path to the import wasn't 'next-auth' but 'next-auth/client'.

So, in my case, I wasn't importing the function from the correct path, but still the error messages prompted didn't help me at all to figure out what was going on and the replies in this thread did help me to have a cue of what possibly was going on.

@balazsorban44
Copy link
Member

This issue has been automatically locked due to no recent activity. If you are running into a similar issue, please create a new issue with the steps to reproduce. Thank you.

@vercel vercel locked as resolved and limited conversation to collaborators Jan 28, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
please add a complete reproduction The issue lacks information for further investigation
Projects
None yet
Development

No branches or pull requests