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
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 2 additions & 5 deletions src/FileSystemUtilities.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import mkdirp from "mkdirp";
import fs from "fs";
import cmdShim from "cmd-shim";
import readCmdShim from "read-cmd-shim";
import { resolve, dirname, relative, join } from "path";
import { resolve, dirname, relative } from "path";
import ChildProcessUtilities from "./ChildProcessUtilities";

const ENDS_WITH_NEW_LINE = /\n$/;
Expand Down Expand Up @@ -51,10 +51,7 @@ export default class FileSystemUtilities {

@logger.logifyAsync()
static rimraf(filePath, callback) {
ChildProcessUtilities.exec("npm bin", {cwd: __dirname}, (err, npmBinPath) => {
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.

}

@logger.logifyAsync()
Expand Down