-
Notifications
You must be signed in to change notification settings - Fork 29.7k
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
file.path is only a getter #55538
Comments
This is by-design. https://nodejs.org/api/fs.html#direntpath states:
|
Sorry for the close/reopen, 😅 butter-fingers...
The PR to (runtime) deprecate this (#51050) was open for over five months before merging. There was plenty of opportunity for feedback during that time. You can always open a PR requesting a change (though it may have to wait until after the deprecation cycle).
If you have advice for it to be more useful, I'm sure you can open a feature request. Additionally, your issue isn't very clear, which of the following are you asking:
The property is defined as read-only. This is not a bug.
Feel free to search past issues, such as #50976 for more context
If you'd like to see a change, open a feature request or PR. Assuming that the intent of this issue was (1) Why is it only a getter, I've marked this was |
It should be. My packages represent about 10% of the downloads in Node.js and this will break my packages. |
cc @aduh95 |
You can do |
Thanks for explaining how javascript properties work. I'm not interested in the discussions at all. If I read the discussions, will I find invitations to people like me, @doowb, @phated, or other people who have created the most used path/file related projects in Node.js? I don't remember receiving any invites to the discussion, or any discussion about similar topics, yet my packages account for almost 10% of Node.js total downloads, and some of my packages have more than 30 million dependents. IMHO that makes no sense at all, but I can live it it. What I am interested in, is not having to deal with my already existing packages breaking when people start using the latest version(s) of Node. A simple search shows that 148,000 javascript files, and 53,000 typescript files on GitHub use the exactly term: Why is this even a debate. Node should have been using symbols or something if you want the ability to arbitrarily change properties. This is unacceptable. Please either make |
I can see why you are upset, and I have been similarly been upset in the past. The only way to be sure to be part of the discussion is to show up, and devoting effort and care to the project. It still happens from time to time to me as well that a change that affects my projects badly gets landed, and I’m on the TSC. The only solution is to show up, and this is on each of us. What I propose:
|
@jonschlinkert, which modules did it break? |
I looked at it a bit more in detail, and it seems the biggest issue is that it was made read-only, and on second instance its about the deprecation itself. Therefore, a quick solution to this problem is to make the property writable in https://github.com/nodejs/node/pull/51050/files#diff-5cd422a9a64bc2c1275d70ba5dcafbc5ea55274432fffc5e4159126007dc4894R228. @aduh95 I don't see any reasoning in that PR on why it was made read-only, so I guess this should be non-contentious. I would also mark |
On the contrary, I would move it to EoL so it no longer affects userland modules |
Agreed, however that would need to be a semver-major change per the deprecation cycle, so it'd half to wait 6 months. |
Yeah sorry if I came across harshly.
Fair
I was saying it would break them when people start using the latest. Fortunately I haven't gotten issues yet, but I've used
Agreed. The read-only decision is my only concern. I like your proposed solution(s). |
I will send a PR as early as I can (if no one else beat me to it. |
I would highly recommend to see the root cause rather than focusing on the property being non-writable and potentially making it worse with quick solutions. The value of For the code examples, consider the - fs.readdirSync(__dirname).map(f => {
- f.path = path.join(__dirname, f.name)
+ fs.readdirSync(__dirname, { recursive: true }).map(f => {
+ f.absolutePath = path.resolve(__dirname, f.parentPath, f.name)
})
IIRC Bikeshedding
Decorating is okay but if you use the original To solve the current issue with runtime deprecation implementation: would defining a setter solve it? Here's the property definition: Lines 212 to 219 in 0668e64
I think, we can assign a private As for future of this property, DEP0178 was added almost an year ago, I think we should remove this property in |
It is already runtime deprecated, and the workaround (
It’s an absolute path if an absolute path or file: URL was passed to |
First of all I truly love your work, but when you make claims like this, it diminishes some of that respect and credibility, at least in my opinion.
This is also an intriguing point: who is actually more qualified to be experienced, and who can confidently make that claim? |
My point was that this wasn't a theoretical scenario and that I have first-hand knowledge that this will break some of my packages. And given the number of other projects that depend on my packages, this breakage should be considered a bug. If you don't use real world usage or regressions to decide what is a bug and what isn't, then what is your yardstick? If you took that statement to mean something else, that was not my intent. I can see how you might have thought I intended my comment differently, but that's not where my mind was. |
FWIW I know @jonschlinkert really well and he didn't mean for his comment to come across the way you may be taking it. |
PR-URL: nodejs#55547 Refs: nodejs#55538 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: LiviaMedeiros <livia@cirno.name> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com> Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
PR-URL: nodejs#55547 Refs: nodejs#55538 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: LiviaMedeiros <livia@cirno.name> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com> Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
This is fixed and will be released in the next v23 release |
thank you!!! |
PR-URL: nodejs#55548 Fixes: nodejs#55538 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: LiviaMedeiros <livia@cirno.name> Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
PR-URL: nodejs#55548 Fixes: nodejs#55538 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: LiviaMedeiros <livia@cirno.name> Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
PR-URL: nodejs#55547 Refs: nodejs#55538 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: LiviaMedeiros <livia@cirno.name> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com> Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
PR-URL: nodejs#55548 Fixes: nodejs#55538 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: LiviaMedeiros <livia@cirno.name> Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
Version
23
Platform
Subsystem
No response
What steps will reproduce the bug?
How often does it reproduce? Is there a required condition?
Since
withFileTypes
has been around for years, this will happen with every library that I created that useswithFileTypes
.What is the expected behavior? Why is that the expected behavior?
file.path
should be the absolute path to the file if it's going to be decorated, since this is a well established convention for every file and path library I've ever seen.What do you see instead?
I see an error with a read only property, and a warning that
path
is deprecated. I have to say this is completely absurd.parentPath
? Since node has existeddirname
has been the name of directories.Why is someone deciding to name it
parentPath
? Who made this decision? Is there a precedent for this or a spec you can point to? FWIW I've created hundreds of path libraries and I have never seen that term used anywhere.Additional information
I think whoever is making these decisions should be involving people with more experience in Node.js. These decisions are going to cause massive headaches for existing code that use firmly establish conventions that have existed for years.
If you're going to finally fix file/dirent objects to be more useful, why not just use conventions of tooling that has already proliferated in the ecosystem, like vinyl files? I'm really interested in the reasoning here.
The text was updated successfully, but these errors were encountered: