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
Uncaught ReferenceError: Buffer is not defined #2248
Comments
I have had the same problem for a few days now. |
I think some |
I am facing a similar error, while trying to include graphql-ws in my app.
|
I think my issue is documented here (I need to try it though) |
I show a way to import the |
yeah I have the same problem :-( A solution is to bring in the import {
unstable_createMemoryUploadHandler,
unstable_parseMultipartFormData,
} from "remix";
const uploadHandler = unstable_createMemoryUploadHandler({
maxFileSize: 5_000_000,
});
export async function uploadAvatar(request: Request) {
const formData = await unstable_parseMultipartFormData(
request,
uploadHandler
);
const file = formData.get("file");
console.log("file in action function: ", file);
return file;
} |
I have moved to Next.js for the moment as i already have some working examples of what i'm trying to do. Please @fergusmeiklejohn if this solution is working for you, let me know so i can close this issue. Thanks |
putting the code in a server only file solves the problem but the Remix team should still be made aware of this bug. It's probably a problem the Buffer package authors need to fix |
Same problem for me. Using |
I moved on to nextjs mainly because remix doesn't have websockets connecting its node server to client. |
@Shaquu I'm having roughly the same issues as well. I'm using Cloudflare Pages as my preferred Remix setup. I tried the example locally and it seems to build fine in dev mode using the I also tried to change the emotion context files to Hopefully that info helps others who are troubleshooting this. TBH, I tried styled-components first but ran into SSR issues and inconsistencies between the server and client generated classes. I tried shimming Linaria but there's too many unknowns with that so I came to emotion. It seems like a fully baked example but this one issue just seems to be sticky |
@drewdecarme to be honest, I just removed emotion references from the code and I am going forward. |
Yeah I'm completely with you on that one. I'm fine with writing the styles I need outside the context of the component. I just love the convenience of co-locating the styles with the component which I've gotten accustomed to over the years. |
Maybe try this one? |
Thanks a lot for the fix @fergusmeiklejohn! Do you know if it's possible to update the |
Sure you just do something like this: const uploadHandler = unstable_createMemoryUploadHandler({
maxFileSize: 5_000_000,
}); |
Is anyone able to reproduce this with the latest release? We added some node browser polyfills and removed some node-specific code from the runtime package in the last few updates. |
Checked on 1.3.2 and still can't use If you just try to use Buffer on the client, it compiles but you get runtime error: If you install polyfill This is why I have the patch that removes the check for node builtins. |
Hello! But I noticed that if instead of this: // Code from the doc
const uploadHandler = unstable_createFileUploadHandler({
maxFileSize: 5_000_000,
file: ({ filename }) => filename,
});
export const action: ActionFunction = async ({ request }) => {
const formData = await unstable_parseMultipartFormData(
request,
uploadHandler
);
const file = formData.get('avatar');
// file is a "NodeFile" which has a similar API to "File"
// ... etc
}; you do this: // Notice the uploadHandler being defined INSIDE the action function
export const action: ActionFunction = async ({ request }) => {
const uploadHandler = unstable_createFileUploadHandler({
maxFileSize: 5_000_000,
file: ({ filename }) => filename,
});
const formData = await unstable_parseMultipartFormData(
request,
uploadHandler
);
const file = formData.get('avatar');
// file is a "NodeFile" which has a similar API to "File"
// ... etc
}; Then the error doesn't appear anymore and the file is available with I just started using Remix, so not sure it's a correct approach, but maybe it's at least a step in the right direction 🙂 |
I actually got this error on 1.3.3 also when only using the regular formData parser like Pretty big bug since crashes all the client side js. |
Edit: I encountered this issue on a project built on the Remix grunge stack. I cannot reproduce this issue in a newly initialised project. That includes a new Remix grunge stack and a new vanilla remix project. After seeing that the error only occurs in my project, i started chopping out code. In my case the error was triggered by a Cypress test route with two imports: import { createUser } from "~/models/user.server";
import { createUserSession } from "~/session.server"; Removing these imports was enough to avoid triggering the error. This same code exists in the Remix grunge stack project and doesn't trigger the error, so something else may be at play here. I haven't dug any deeper yet. |
Same error, but not using |
I have a very trivial example where it appears React 18 is the culprit, cloudflare/workers-sdk#754 -- not sure if anyone else has such an issue |
I spoke with @jacob-ebey about this and the problem ultimately is our documentation. When you call a function in the top-level scope of your route module, our compiler can't reliably code-split that bit from the browser build. And while we do shim Node built-ins, we don't shim Node globals and would prefer that So to solve this, you have two options:
// instead of this...
let uploadHandler = unstable_createFileUploadHandler({
maxFileSize: 5_000_000,
file: ({ filename }) => filename,
});
export async function action({ request }) {
let formData = await unstable_parseMultipartFormData(request, uploadHandler);
// ...
};
// do this...
export async function action({ request }) {
let uploadHandler = unstable_createFileUploadHandler({
maxFileSize: 5_000_000,
file: ({ filename }) => filename,
});
let formData = await unstable_parseMultipartFormData(request, uploadHandler);
// ...
}; Understand that In the meantime, I'll make sure all of our examples and documentation are updated to fix any bugs and clarify! |
i dont get it: why the same route code, migrating to react18 + latest remix throws the error? I’m not using any |
A few of our examples incorrectly called server-only functions at the top-level scope of a route module which will result in an error when they use Node globals. The examples were fixed and clarity added where needed. Addresses issue raised in #2248.
I'm unsure how React 18 specifically would cause an issue like this, but this isn't just about If you can create a new issue with a minimal repro showing your problem with React 18 we can try to help out there. |
A few of our examples incorrectly called server-only functions at the top-level scope of a route module which will result in an error when they use Node globals. The examples were fixed and clarity added where needed. Addresses issue raised in #2248.
@chaance Unfortunately, I'm still getting the same issues when trying to follow the emotion example in the examples directory for Remix. I've tried a few of the fixes that you have mentioned before but still experiencing the
I would assume that the culprit is For what it's worth, I'm using Cloudflare Pages and am currently using Remix |
for me what worked was: import { defineConfig } from 'vite'
reply to this comment: |
I'd like to point out that if you're a dummy like me, and googling // ws.client.ts
import WebSocket from 'ws';
const ws = new WebSocket('ws://localhost: 3000'); Turns out |
Use this on the page or function where you get an error:
|
Thank you @mhmdunl1, your solution helped me :) |
Hey folks, check my example to fix this issue https://gist.github.com/jdnichollsc/b73eca1f34bdd1e3a95283774fda2212 |
What version of Remix are you using?
v1.2.3
Steps to Reproduce
The examples in the docs https://remix.run/docs/en/v1/api/remix#uploadhandler
Just after adding this code inside a route
Expected Behavior
To work, as expected from the docs
Actual Behavior
Log the error to the the browser console on page load
The text was updated successfully, but these errors were encountered: