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

Support clearing Node.js cache for package.json #54924

Open
davidfirst opened this issue Sep 13, 2024 · 7 comments
Open

Support clearing Node.js cache for package.json #54924

davidfirst opened this issue Sep 13, 2024 · 7 comments
Labels
feature request Issues that request new features to be added to Node.js. loaders Issues and PRs related to ES module loaders

Comments

@davidfirst
Copy link

What is the problem this feature will solve?

When a long-running Node.js process is active and a package.json file is modified (for example, by adding "type": "module"), Node.js does not detect this change. It continues treating the package as CommonJS, which results in an error like Unexpected token 'export' when attempting to use ES modules.

This is crucial for us at bit, where we run a background process called “bit server” that manages the local development workspace. Among its tasks is creating new web components, which initially have a package.json without "type": "module". If the component is later determined to be ESM, the package.json is updated accordingly. (Explaining why this can’t be handled differently is beyond the scope of this feature request).

What is the feature you are proposing to solve the problem?

I propose adding an API that allows clearing the cached information related to the package.json of a specific module (or optionally clearing the cache for all modules). Either option would solve the issue.

What alternatives have you considered?

Restarting the Node.js process, but this results in a poor user experience.

@davidfirst davidfirst added the feature request Issues that request new features to be added to Node.js. label Sep 13, 2024
@RedYetiDev
Copy link
Member

It continues treating the package as CommonJS, which results in an error like Unexpected token 'export' when attempting to use ES modules.

How are you loading the files? require or import? Can you provide a little example that shows this error?

@RedYetiDev RedYetiDev added the loaders Issues and PRs related to ES module loaders label Sep 13, 2024
@davidfirst
Copy link
Author

I'm loading the files with await import() syntax.

I created a simple project to demonstrate it. You can simply clone it git clone https://github.com/davidfirst/node-pkg-json-caching-issue.git and run node pkg1/index.js

@RedYetiDev
Copy link
Member

CC @nodejs/loaders

@ljharb
Copy link
Member

ljharb commented Sep 13, 2024

I know you said it's out of scope, but I'd love to understand why adding type:module (and changing the meaning of every .js file in the package, not all of which might be the same format) is easier than changing the file extensions to .mjs for files that are ESM?

@davidfirst
Copy link
Author

@GiladShoham please take a look at the last message. Do you think this would be a viable option for Bit?

@GiladShoham
Copy link

Yes I think it might work.
I thought about trying it as well.
I still have some concerns about some use cases but we can definitely try it at least.
I still think that from node.js perspective it will be a good idea to provide a way to clear that cache like you can clear the require cache.

@davidfirst
Copy link
Author

Now that I think about it, the templates that Bit allows users to create components from can actually be developed by the community. This means we don’t have full control over these templates, and developers might configure the "type": "module" setting in the package.json instead of using file extensions. While we can document this, it’s not a foolproof solution. Identifying the cause of this issue can be quite challenging.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature request Issues that request new features to be added to Node.js. loaders Issues and PRs related to ES module loaders
Projects
Development

No branches or pull requests

4 participants