vercel / next.js

The React Framework
https://nextjs.org
MIT License
127.49k stars 27.04k forks source link

ReferenceError: exports is not defined with edge runtime #51313

Closed va3y closed 9 months ago

va3y commented 1 year ago

Verify canary release

Provide environment information

Operating System:
      Platform: darwin
      Arch: arm64
      Version: Darwin Kernel Version 22.3.0: Mon Jan 30 20:38:37 PST 2023; root:xnu-8792.81.3~2/RELEASE_ARM64_T6000
    Binaries:
      Node: 20.3.0
      npm: 9.6.7
      Yarn: N/A
      pnpm: N/A
    Relevant packages:
      next: 13.4.6-canary.4
      eslint-config-next: 13.4.4
      react: 18.2.0
      react-dom: 18.2.0
      typescript: 5.1.3

Which area(s) of Next.js are affected? (leave empty if unsure)

Middleware / Edge (API routes, runtime)

Link to the code that reproduces this issue or a replay of the bug

https://github.com/va3y/grammy-next-edge/blob/next/pages/api/bot.ts

To Reproduce

Run the dev server and access the route

import { NextResponse } from "next/server";

export const runtime = "edge";

export default async function handler() {
    console.log(module); // OK
    console.log(module.exports); // OK

    console.log(exports); // ReferenceError: exports is not defined

    return new NextResponse("", { status: 200 });
}

Describe the Bug

ReferenceError: exports is not defined

Expected Behavior

exports should be globally accessible. A lot of libraries use it

Which browser are you using? (if relevant)

No response

How are you deploying your application? (if relevant)

No response

balazsorban44 commented 1 year ago

This is not standard ESM, the library needs to compile correctly, using export foo and/or export default

The lib author seems to be correct though: https://github.com/grammyjs/grammY/issues/435#issuecomment-1592411494

grammy/web is correctly compiled to ESM. The reproduction does not represent the reported issue, so please add one.

github-actions[bot] commented 1 year ago

We cannot recreate the issue with the provided information. Please add a reproduction in order for us to be able to investigate.

Why was this issue marked with the please add a complete reproduction label?

To be able to investigate, we need access to a reproduction to identify what triggered the issue. We prefer a link to a public GitHub repository (template for pages, template for App Router), but you can also use these templates: CodeSandbox: pages or CodeSandbox: App Router.

To make sure the issue is resolved as quickly as possible, please make sure that the reproduction is as minimal as possible. This means that you should remove unnecessary code, files, and dependencies that do not contribute to the issue.

Please test your reproduction against the latest version of Next.js (next@canary) to make sure your issue has not already been fixed.

I added a link, why was it still marked?

Ensure the link is pointing to a codebase that is accessible (e.g. not a private repository). "example.com", "n/a", "will add later", etc. are not acceptable links -- we need to see a public codebase. See the above section for accepted links.

What happens if I don't provide a sufficient minimal reproduction?

Issues with the please add a complete reproduction label that receives no meaningful activity (e.g. new comments with a reproduction link) are automatically closed and locked after 30 days.

If your issue has not been resolved in that time and it has been closed/locked, please open a new issue with the required reproduction.

I did not open this issue, but it is relevant to me, what can I do to help?

Anyone experiencing the same issue is welcome to provide a minimal reproduction following the above steps. Furthermore, you can upvote the issue using the :+1: reaction on the topmost comment (please do not comment "I have the same issue" without reproduction steps). Then, we can sort issues by votes to prioritize.

I think my reproduction is good enough, why aren't you looking into it quicker?

We look into every Next.js issue and constantly monitor open issues for new comments.

However, sometimes we might miss one or two due to the popularity/high traffic of the repository. We apologize, and kindly ask you to refrain from tagging core maintainers, as that will usually not result in increased priority.

Upvoting issues to show your interest will help us prioritize and address them as quickly as possible. That said, every issue is important to us, and if an issue gets closed by accident, we encourage you to open a new one linking to the old issue and we will look into it.

Useful Resources

maccman commented 1 year ago

Here is a basic reproduction of the error: https://github.com/maccman/grammyjs-nextjs-edge-bug

balazsorban44 commented 9 months ago

This has been fixed via https://github.com/vercel/next.js/pull/58967, you can update to at least 14.0.4. If you think you still have the issue after upgrading, please open a new issue.