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

Fix rimraf bin resolution #566

Merged
merged 2 commits into from
Feb 2, 2017
Merged

Fix rimraf bin resolution #566

merged 2 commits into from
Feb 2, 2017

Conversation

rtsao
Copy link
Contributor

@rtsao rtsao commented Feb 1, 2017

On NPM3, rimraf is being hoisted to the parent node_modules, so exec("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

if (err) return callback(err);
ChildProcessUtilities.spawn(join(npmBinPath.trim(), "rimraf"), [filePath], {}, callback);
});
ChildProcessUtilities.spawn(require.resolve('rimraf/bin'), [filePath], {}, callback);
Copy link
Contributor

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.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yep, just realized :)

@roblg
Copy link
Contributor

roblg commented Feb 1, 2017

Nice! 👍

if (err) return callback(err);
ChildProcessUtilities.spawn(join(npmBinPath.trim(), "rimraf"), [filePath], {}, callback);
});
ChildProcessUtilities.spawn(require.resolve("rimraf/bin"), [filePath], {}, callback);
Copy link
Contributor

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")

Copy link
Contributor Author

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.

Copy link
Contributor Author

@rtsao rtsao Feb 1, 2017

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")

Copy link
Contributor

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.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@gigabo thoughts?

Copy link
Contributor

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.

Copy link
Contributor Author

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.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@gigabo @hzoo If everything looks good it'd be nice to get this released since lerna clean is basically broken right now.

@gigabo
Copy link
Contributor

gigabo commented Feb 1, 2017

LGTM. Thanks @rtsao!

@hzoo hzoo merged commit 15d52df into lerna:master Feb 2, 2017
@hzoo
Copy link
Contributor

hzoo commented Feb 2, 2017

awesome

@Reinmar
Copy link

Reinmar commented Feb 2, 2017

I think it affected us too (https://travis-ci.org/ckeditor/ckeditor5/builds/197615503#L1201) so we're waiting for a new release :)

@hzoo
Copy link
Contributor

hzoo commented Feb 2, 2017

Ok released beta.36!

@lock
Copy link

lock bot commented Dec 27, 2018

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.

@lock lock bot locked as resolved and limited conversation to collaborators Dec 27, 2018
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants