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

src: set default config as node.config.json #57171

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

marco-ippolito
Copy link
Member

@marco-ippolito marco-ippolito commented Feb 21, 2025

This PR changes the current behavior:

node --experimental-default-config-file foo.js

Will automatically look for a node.config.json file (I dont have strong opinion on the default)

If a --experimental-config-file is provided it will use that:

node --experimental-config-file=foo.json foo.js

@nodejs-github-bot nodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. needs-ci PRs that need a full CI run. labels Feb 21, 2025
@marco-ippolito marco-ippolito added the semver-minor PRs that contain new features and should be released in the next minor version. label Feb 21, 2025
@jasnell
Copy link
Member

jasnell commented Feb 21, 2025

Hmm, I'm a bit concerned about naming collisions with existing uses of node.json such as this https://github.com/kubeedge/kubeedge/blob/master/build/node.json.

@marco-ippolito
Copy link
Member Author

Maybe noderc.json? That should not have collisions (I HOPE 😆)

@targos
Copy link
Member

targos commented Feb 21, 2025

In any case, I don't think it should be unflagged from the first release.

@marco-ippolito
Copy link
Member Author

In any case, I don't think it should be unflagged from the first release.

it's not unflagged, I'm not sure what are you referring to

@targos
Copy link
Member

targos commented Feb 21, 2025

Okay then, I guess I didn't read the commit message correctly

Copy link

codecov bot commented Feb 21, 2025

Codecov Report

Attention: Patch coverage is 73.33333% with 4 lines in your changes missing coverage. Please review.

Project coverage is 90.27%. Comparing base (044d69a) to head (3e6cfd1).
Report is 24 commits behind head on main.

Files with missing lines Patch % Lines
src/node_config_file.cc 63.63% 2 Missing and 2 partials ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main   #57171      +/-   ##
==========================================
- Coverage   90.35%   90.27%   -0.08%     
==========================================
  Files         629      630       +1     
  Lines      184424   184643     +219     
  Branches    36034    36138     +104     
==========================================
+ Hits       166633   166691      +58     
- Misses      10913    11011      +98     
- Partials     6878     6941      +63     
Files with missing lines Coverage Δ
lib/internal/process/pre_execution.js 93.03% <100.00%> (-0.28%) ⬇️
src/node_options.cc 85.21% <100.00%> (-0.11%) ⬇️
src/node_options.h 98.33% <100.00%> (+<0.01%) ⬆️
src/node_config_file.cc 73.18% <63.63%> (+1.21%) ⬆️

... and 40 files with indirect coverage changes

@jasnell
Copy link
Member

jasnell commented Feb 21, 2025

When searching I was only able to find examples of node.json in common use. Even nodejs.json might work (despite the ugly double js in there). Or .node.json (making it a dot prefixed file). The other possibility is that we look for a .nodejs directory in cwd and load .nodejs/config.json. Every option is likely equally unfortunate in their own special ways tho.

@marco-ippolito
Copy link
Member Author

Best options are
.node.json or
noderc.json imho, I'll try a survey on social media so see what people think

Copy link
Member

@anonrig anonrig left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How does this play with file permissions?

@marco-ippolito
Copy link
Member Author

How does this play with file permissions?

I added a test, also will need a rebase after #57170 lands.

There are 6k results for node.json on github:
https://github.com/search?q=path:**/node.json+language:JSON&type=code&l=JSON

I wish we could just take it 🥺

Otherwise:

  • node.config.json

  • nodejs.json

@darcyrush
Copy link

darcyrush commented Feb 24, 2025

Modern versions of eslint and prettier both support a version of .config naming notion such as eslint.config.cjs, so node.config.json would align nicely, and having .config in the name makes it pretty obvious and explicit.

@bricss
Copy link

bricss commented Feb 24, 2025

IMO, node.config.json to de moon 🚀🌔

@marco-ippolito marco-ippolito marked this pull request as draft February 24, 2025 11:40
@marco-ippolito marco-ippolito force-pushed the default-value-node-json branch from f1b6d67 to 70b3289 Compare February 24, 2025 12:02
@marco-ippolito marco-ippolito changed the title src: set default config as node.json src: set default config as node.config.json Feb 24, 2025
@marco-ippolito marco-ippolito force-pushed the default-value-node-json branch from 70b3289 to e00ade9 Compare February 24, 2025 12:03
@marco-ippolito
Copy link
Member Author

node.config.json it is

@marco-ippolito marco-ippolito marked this pull request as ready for review February 24, 2025 12:05
@marco-ippolito marco-ippolito force-pushed the default-value-node-json branch 3 times, most recently from c0373f2 to 6456729 Compare February 24, 2025 12:16
@marco-ippolito marco-ippolito force-pushed the default-value-node-json branch 2 times, most recently from 434360e to 54b272c Compare February 25, 2025 06:03
@@ -976,6 +977,18 @@ unknown keys or keys that cannot used in `NODE_OPTIONS`.
Node.js will not sanitize or perform validation on the user-provided configuration,
so **NEVER** use untrusted configuration files.

### `--experimental-default-config-file`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When the day comes that we load node.config.json without needing any flags, I assume we’ll need a way to disable that behavior and not just as a temporary “while still experimental” measure, because I assume that some people will consider it a security hazard that we might load configuration implicitly. (Though we already do so via NODE_OPTIONS, I guess, so if you think I’m wrong about this assumption I’m very open to be persuaded that I’m wrong.) So when this feature is stable and if we do need a permanent way to prevent the automatic loading, I think the options are either --no-default-config-file or --disable-default-config-file. We have a bunch of --no-* flags and also a bunch of --disable-* flags, and I’m not sure if there’s any reasoning behind one versus the other.

Personally I think disable makes more sense for this particular feature from an English language perspective of “disable the loading of the default config file”, as opposed to “no default config file” being a bit ambiguous (am I telling it not to load a default config file, or that Node should error if there is no default config file, or something else?). But I defer to the crowd on this one.

@marco-ippolito marco-ippolito force-pushed the default-value-node-json branch from 54b272c to 3e6cfd1 Compare February 26, 2025 13:22
@marco-ippolito marco-ippolito added the request-ci Add this label to start a Jenkins CI on a PR. label Feb 26, 2025
@github-actions github-actions bot removed the request-ci Add this label to start a Jenkins CI on a PR. label Feb 26, 2025
@nodejs-github-bot
Copy link
Collaborator

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
c++ Issues and PRs that require attention from people who are familiar with C++. needs-ci PRs that need a full CI run. semver-minor PRs that contain new features and should be released in the next minor version.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants