-
Notifications
You must be signed in to change notification settings - Fork 2.6k
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
Avoid bundling chokidar in production express server #7386
Conversation
|
Hi @phlipsterit, Welcome, and thank you for contributing to Remix! Before we consider your pull request, we ask that you sign our Contributor License Agreement (CLA). We require this only once. You may review the CLA and sign it by adding your name to contributors.yml. Once the CLA is signed, the If you have already signed the CLA and received this response in error, or if you have any questions, please contact us at [email protected]. Thanks! - The Remix team |
Thank you for signing the Contributor License Agreement. Let's get this merged! 🥳 |
import chokidar from "chokidar"; | ||
// Avoid bundling chokidar in produciton builds since it is a devDependency | ||
const chokidar = | ||
process.env.NODE_ENV === "development" ? await import("chokidar") : null; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could this import()
move into createDevRequestHandler
as well?
app.all(
"*",
process.env.NODE_ENV === "development"
- ? createDevRequestHandler()
+ ? await createDevRequestHandler()
: createRequestHandler({
build,
mode: build.mode,
})
);
- function createDevRequestHandler() {
+ async function createDevRequestHandler() {
+ const chokidar = await import('chokidar');
const watcher = chokidar.watch(BUILD_PATH, { ignoreInitial: true });
...
}
Actually, this looks like a duplicate of #7078, going to close this out in favor of that |
Make the import statement of chokidar conditional based on the node environment. We don't want to import it in production builds, because chokidar is not needed for production, and it is listed in the devDependencies in package.json.
It's common for deploy scripts to run "npm prune" after a build to remove all development dependencies from node_modules. This will remove chokidar. Running the application with "npm run start" afterward will then fail when server.js tries to import chokidar.
The code change in this PR is based on a suggestion from xHomu in a help-question in the Remix Discord
To reproduce the issue, follow these steps :
After the the changes in this PR, the above steps will successfully start the server