-
Notifications
You must be signed in to change notification settings - Fork 2.2k
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
Fix rimraf bin resolution #566
Conversation
src/FileSystemUtilities.js
Outdated
if (err) return callback(err); | ||
ChildProcessUtilities.spawn(join(npmBinPath.trim(), "rimraf"), [filePath], {}, callback); | ||
}); | ||
ChildProcessUtilities.spawn(require.resolve('rimraf/bin'), [filePath], {}, callback); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Linter's choking on the single-quotes here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yep, just realized :)
Nice! 👍 |
src/FileSystemUtilities.js
Outdated
if (err) return callback(err); | ||
ChildProcessUtilities.spawn(join(npmBinPath.trim(), "rimraf"), [filePath], {}, callback); | ||
}); | ||
ChildProcessUtilities.spawn(require.resolve("rimraf/bin"), [filePath], {}, callback); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This relies on the internal structure of the rimraf
package not changing.
Could we combine this with a walk up to .bin
so we can use the public interface?
Something like:
path.join(require.resolve("rimraf"), "../.bin/rimraf")
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah I thought about this but figured rimraf was pretty stable. Alternatively https://github.com/thlorenz/resolve-bin could be used, but I didn't want to include another dependency.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To your idea, is ./.bin/rimraf
guaranteed to be set in the same node_modules
folder where ./rimraf/
is installed? I was worried this could differ across npm versions or yarn or something. But if that's not a problem, then yeah I like your idea. Would we need to use path.resolve
in that case?
path.resolve(require.resolve("rimraf"), "../.bin/rimraf")
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm using https://github.com/thlorenz/resolve-bin in multiple projects to get proper path to bin file.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@gigabo thoughts?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, I guess relying on the relative location of the .bin/
directory isn't much different from relying on the location of bin.js
in rimraf. 😆
I'd like to avoid adding a dep if possible.
Maybe a comment to the effect of "this will break if the location of the executable changes within rimraf" would be enough to help us fix things up quickly in the unlikely case that it actually moves.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍 sounds good. I'll add a comment.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM. Thanks @rtsao! |
awesome |
I think it affected us too (https://travis-ci.org/ckeditor/ckeditor5/builds/197615503#L1201) so we're waiting for a new release :) |
Ok released beta.36! |
This thread has been automatically locked because there has not been any recent activity after it was closed. Please open a new issue for related bugs. |
On NPM3,
rimraf
is being hoisted to the parent node_modules, soexec("npm bin", {cwd: __dirname},
produces the wrong bin path. So in the current version of lerna, the clean command is broken.I've simplified the logic to use
require.resolve
, which will work regardless of where rimraf is. This should also be faster as well!Fixes bug introduced in: #547