News for hackers. Stuff that matters.
Re:Temporary fork enables Node.js to optionally use the Chak... by dyscrete on Tuesday May 12, 2015 @03:26PM (#9534237)
Wow, what's up Microsoft?
Re:Temporary fork enables Node.js to optionally use the Chak... by pionar on Tuesday May 12, 2015 @03:36PM (#9534296)
Actually, I was thinking, what's up node? Each dependency keeps a private copy of its dependencies? How messed up is that? Or am I just reading that wrong?
Re:Temporary fork enables Node.js to optionally use the Chak... by bryanlarsen on Tuesday May 12, 2015 @03:40PM (#9534324)
That's a feature, not a bug. It lets A rely on version 0.9 of X while B relies on version 0.8.
Re:Temporary fork enables Node.js to optionally use the Chak... by pionar on Tuesday May 12, 2015 @03:46PM (#9534368)
I don't call that a feature. There's other ways of doing version pinning without junking up my filesystem.
Re:Temporary fork enables Node.js to optionally use the Chak... by tdicola on Tuesday May 12, 2015 @07:16PM (#9535633)
Regardless of who is right or wrong at the end of the day it's still broken for many people. If Microsoft and Joyent/the node & npm community care about people using node & npm on Windows then the issues needs to be resolved, period.
Re:Temporary fork enables Node.js to optionally use the Chak... by ksherlock on Tuesday May 12, 2015 @04:02PM (#9534465)
Re:Temporary fork enables Node.js to optionally use the Chak... by nemothekid on Wednesday May 13, 2015 @12:11AM (#9536713)
I don't see how this npm's problem - the language itself doesn't let you catch this problem - and the pattern itself is dangerous. I'd have to agree with IsaacSchlueter here.

If I have a library (libA) that uses fooV1 and another (libB) that uses fooV2, there is no reason I should expect those two dependencies to interop with each other (except explicitly stated by the developer).

The solution (that there should be one set of dependencies) is an even worse problem that currently afflicts the Golang community, which they have decided to solve the same way npm has decided to solve it - vendoring.

Now with Golang, if you only have 1 set of dependancies, and one of your libraries depended on an older version - your program just won't compile (unless you update the library to use fooV2) and I'm not sure how thats useful to anyone. Most people will just tell you should have have just versioned that dependency.

Re:Temporary fork enables Node.js to optionally use the Chak... by spion on Wednesday May 13, 2015 @04:08AM (#9537463)
In the vast majority of cases, its not. But in the cases when people want to invent new globally useful abstractions, like bignum, promises, cleaner streams etc - i.e. to reshape the platform - they can't do that. For example, the overhead of adding bluebird as a dependency to every module quickly adds up, and bluebird had to fight with many issues stemming from multiple versions of it communicating with each other.

IMO while this has contributed to the growth of node the ecosystem, it also stifled the growth of node the platform.

Re:Temporary fork enables Node.js to optionally use the Chak... by efdee on Wednesday May 13, 2015 @05:11AM (#9537675)
No, it's a "bug". It is not required for loading specific versions -- those can be kept in a flat structure just as well. No need for the idiotic nesting.
Re:Temporary fork enables Node.js to optionally use the Chak... by bryanlarsen on Wednesday May 13, 2015 @08:24AM (#9538373)
IMO a flat structure would just be a confused mess. There would be hundreds of packages in that directory.
Re:Temporary fork enables Node.js to optionally use the Chak... by efdee on Saturday May 16, 2015 @11:44AM (#9556494)
I'd rather have hundred of packages in a well sorted flat directory than the same number of packages in an "Alice In Wonderland"-style rabbit hole.
Re:Temporary fork enables Node.js to optionally use the Chak... by espadrine on Wednesday May 13, 2015 @02:19AM (#9537119)
Having node_modules/[email protected]/ and node_modules/[email protected]/ would allow it as well. Yet each dependency would not keep a private copy of its own dependencies.
Re:Temporary fork enables Node.js to optionally use the Chak... by kuschku on Tuesday May 12, 2015 @07:16PM (#9535636)
Unless you create file paths that are so long that they break the default tools of the OS. That’s the point where you went too far.
Re:Temporary fork enables Node.js to optionally use the Chak... by pmontra on Wednesday May 13, 2015 @02:55AM (#9537249)
Or the OS went too short, so to say. There are two problems here.

1) Windows' limit of 260 characters per path name is incredibly small for a modern OS and that was true many years ago as well.

2) Npm approach relied on well behaved OSes and file systems allowing long path names. It's not future proof because you don't know on which OS and file system you'll need to run, maybe some limited embedded device.

Ruby's rvm solved that problem with a single directory level and a gem@version naming scheme.

Re:Temporary fork enables Node.js to optionally use the Chak... by kuschku on Friday May 15, 2015 @11:07AM (#9551097)
Exactly. Ruby’s solution will run even on FAT12 (which has only single-level directories), while npm isn’t really compatible.

In general, node does this quite often – their memory model also assumes they have infinite memory.

Re:Temporary fork enables Node.js to optionally use the Chak... by tracker1 on Tuesday May 12, 2015 @04:29PM (#9534630)
npm 3 will adjust dependencies to flatten these things out as much as possible, only creating nested dependencies when there's a version conflict between modules.