1515// then on, it will run as normal without re-downloading.
1616
1717var install = require ( ".." ) . install ;
18- var spawn = require ( "child_process" ) . spawn ;
18+ var child_process = require ( "child_process" ) ;
1919var path = require ( "path" ) ;
2020var fs = require ( "fs" ) ;
2121
2222// Make sure we get the right path even if we're executing from the symlinked
2323// node_modules/.bin/ executable
24+ var interpreter = fs . realpathSync ( process . argv [ 0 ] ) ;
2425var targetPath = fs . realpathSync ( process . argv [ 1 ] ) ;
2526
27+ // Figure out the binary name as we'll eventually want to execute
28+ // this. Re-executing this script doesn't always work because of varying
29+ // permissions and modes of operation across platforms (for example, Windows has
30+ // some interesting edge cases here.)
31+ var binaryName = path . join (
32+ __dirname ,
33+ ".." ,
34+ "unpacked_bin" ,
35+ path . basename ( targetPath )
36+ ) ;
37+ if ( process . platform === "win" ) {
38+ binaryName += ".exe" ;
39+ }
40+
2641// cd into the directory above bin/ so install() puts bin/ in the right place.
2742process . chdir ( path . join ( path . dirname ( targetPath ) , ".." ) ) ;
2843
2944install ( process . platform , process . arch ) . then ( function ( ) {
30- spawn ( targetPath , process . argv . slice ( 2 ) , {
31- stdio : "inherit"
32- } ) . on ( "exit" , process . exit ) ;
33- } ) ;
45+ child_process
46+ . spawn ( binaryName , process . argv . slice ( 2 ) , { stdio : "inherit" } )
47+ . on ( "exit" , process . exit ) ;
48+ } ) ;
0 commit comments