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

Avoid bundling chokidar in production express server #7386

Closed
wants to merge 3 commits into from

Conversation

phlipsterit
Copy link

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 :

  • "npx create-remix"
  • Select "Just the basics"
  • Select "Express Server"
  • Select "Typescript"
  • Select yes to "run npm install"
  • "cd my-remix-app"
  • "npm run build"
  • "npm prune --omit=dev" or just "npm prune" when NODE_ENV is set to production
  • "npm run start"
  • The above command will fail with the error Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'chokidar' imported from my-remix-app\server.js

After the the changes in this PR, the above steps will successfully start the server

@changeset-bot
Copy link

changeset-bot bot commented Sep 9, 2023

⚠️ No Changeset found

Latest commit: 8142818

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@remix-cla-bot
Copy link
Contributor

remix-cla-bot bot commented Sep 9, 2023

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 CLA Signed label will be added to the pull request.

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

@remix-cla-bot
Copy link
Contributor

remix-cla-bot bot commented Sep 9, 2023

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;
Copy link
Contributor

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 });
   ...
 }

@brophdawg11 brophdawg11 changed the title Dev Avoid bundling chokidar in production express server Sep 11, 2023
@brophdawg11
Copy link
Contributor

Actually, this looks like a duplicate of #7078, going to close this out in favor of that

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

Successfully merging this pull request may close these issues.

3 participants