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

Issue with Next.js 'use client' #19

Open
ixartz opened this issue Oct 2, 2024 · 13 comments
Open

Issue with Next.js 'use client' #19

ixartz opened this issue Oct 2, 2024 · 13 comments

Comments

@ixartz
Copy link

ixartz commented Oct 2, 2024

First thank you, wanted to try this library and love the promise about supporting multi environment: node.js, edge and browser.

The library works perfectly with RSC and Route Handler (API) with Next.js. There isn't any issue with server side.

I have some issue when using with client component 'use client' in Next.js:

The generated code contains 'async/await' because this module is using "topLevelAwait".
However, your target environment does not appear to support 'async/await'.
As a result, the code may not run as expected or may cause runtime errors.
Internal error: Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.

The configuration I use:

import { configure, getConsoleSink, getLogger } from '@logtape/logtape';

await configure({
  sinks: { console: getConsoleSink() },
  loggers: [
    { category: ['logtape', 'meta'], level: 'warning', sinks: ['console'] },
    { category: 'app', level: 'debug', sinks: ['console'] },
  ],
});

export const logger = getLogger(['app']);
@dahlia
Copy link
Owner

dahlia commented Oct 2, 2024

What if you remove await from the configuration code? That would work too for the most cases.

@ixartz
Copy link
Author

ixartz commented Oct 2, 2024

Yes, thank so much, it works much more better.

When the await is necessary?

@dahlia
Copy link
Owner

dahlia commented Oct 2, 2024

It's necessary if any of sinks you'd like to use is AsyncDisposable, e.g., stream sink. That said, if you can prepend await, you should.

@dahlia
Copy link
Owner

dahlia commented Oct 2, 2024

@ixartz You many need to use v0.6.3, which is released today. It contains a small fix for Node.js client rendering.

@ixartz
Copy link
Author

ixartz commented Oct 2, 2024

@dahlia Thank you for updating the package, but I have new error with the package now:

Critical dependency: require function is used in a way in which dependencies cannot be statically extracted

Import trace for requested module:

I don't have this issue in 0.6.2

@dahlia
Copy link
Owner

dahlia commented Oct 3, 2024

Could you share the import trace as well?

@ixartz
Copy link
Author

ixartz commented Oct 3, 2024

@dahlia Unfortunately, I have reverted everything. But, you should be able to create a new Next.js app and add logtail, you'll able to get the same error.

@kachkaev
Copy link

kachkaev commented Oct 4, 2024

I can confirm a new issue in Next.js (Pages router) and 0.6.3:

 ⚠ ./node_modules/@logtape/logtape/esm/nodeUtil.cjs
Critical dependency: require function is used in a way in which dependencies cannot be statically extracted

Import trace for requested module:
./node_modules/@logtape/logtape/esm/nodeUtil.cjs
./node_modules/@logtape/logtape/esm/nodeUtil.js
./node_modules/@logtape/logtape/esm/formatter.js
./node_modules/@logtape/logtape/esm/mod.js
./src/some-file.ts

There is import { getLogger } from '@logtape/logtape' in ./src/some-file.ts in my case.

The error shows up in server logs, i.e. it happens during the SSR phase, in Node.js environment. When using logtape 0.6.2, this warning does not show up.

dahlia added a commit that referenced this issue Oct 5, 2024
@dahlia
Copy link
Owner

dahlia commented Oct 5, 2024

@ixartz @kachkaev Could you give v0.6.4-dev.96 a try? I addressed this issue again, and I hope it will work for you.

@kachkaev
Copy link

kachkaev commented Oct 7, 2024

👋 @dahlia! I tried v0.6.4-dev.96 right now. Still getting this warning from Next.js webpack (on the server):

Critical dependency: require function is used in a way in which dependencies cannot be statically extracted

Import trace for requested module:
./node_modules/@logtape/logtape/esm/nodeUtil.cjs
./node_modules/@logtape/logtape/esm/nodeUtil.js
./node_modules/@logtape/logtape/esm/formatter.js
./node_modules/@logtape/logtape/esm/mod.js
./src/some-file.ts

This warning does not show up on 0.6.2, sticking with it for now.

@camflan
Copy link

camflan commented Oct 31, 2024

Still happening on 0.7.1 too

@camflan
Copy link

camflan commented Oct 31, 2024

Adding @logtape/logtape to serverComponentsExternalPackages fixes the error for me.

const nextConfig = {
  experimental: {
    instrumentationHook: true, // I'm running logtape config/init in instrumentation.ts when NEXT_RUNTIME is 'nodejs'
    serverComponentsExternalPackages: ["@logtape/logtape"],
    ...
  },
  ...
}

@camflan
Copy link

camflan commented Oct 31, 2024

Still need to figure out how to run on 'edge' though 🤔

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants