6
6
// "#!<prog> <args...>"
7
7
//
8
8
// Write a binroot/pkg.bin + ".cmd" file that has this line in it:
9
- // @<prog> <args...> %~ dp0<target> %*
9
+ // @<prog> <args...> %dp0% <target> %*
10
10
11
11
module . exports = cmdShim
12
12
cmdShim . ifExists = cmdShimIfExists
@@ -43,9 +43,10 @@ function cmdShim (from, to, cb) {
43
43
}
44
44
45
45
function cmdShim_ ( from , to , cb ) {
46
- var then = times ( 2 , next , cb )
46
+ var then = times ( 3 , next , cb )
47
47
rm ( to , then )
48
48
rm ( to + ".cmd" , then )
49
+ rm ( to + ".ps1" , then )
49
50
50
51
function next ( er ) {
51
52
writeShim ( from , to , cb )
@@ -61,7 +62,7 @@ function writeShim (from, to, cb) {
61
62
if ( er )
62
63
return cb ( er )
63
64
fs . readFile ( from , "utf8" , function ( er , data ) {
64
- if ( er ) return writeShim_ ( from , to , null , null , cb )
65
+ if ( er ) return writeShim_ ( from , to , null , null , null , cb )
65
66
var firstLine = data . trim ( ) . split ( / \r * \n / ) [ 0 ]
66
67
, shebang = firstLine . match ( shebangExpr )
67
68
if ( ! shebang ) return writeShim_ ( from , to , null , null , null , cb )
@@ -86,50 +87,67 @@ function writeShim_ (from, to, prog, args, variables, cb) {
86
87
args = args || ""
87
88
variables = variables || ""
88
89
if ( ! prog ) {
89
- prog = "\"%~ dp0\\" + target + "\""
90
+ prog = "\"%dp0% \\" + target + "\""
90
91
shProg = "\"$basedir/" + shTarget + "\""
91
92
pwshProg = shProg
92
93
args = ""
93
94
target = ""
94
95
shTarget = ""
95
96
} else {
96
- longProg = "\"%~ dp0\\" + prog + ".exe\""
97
+ longProg = "\"%dp0% \\" + prog + ".exe\""
97
98
shLongProg = "\"$basedir/" + prog + "\""
98
99
pwshLongProg = "\"$basedir/" + prog + "$exe\""
99
- target = "\"%~ dp0\\" + target + "\""
100
+ target = "\"%dp0% \\" + target + "\""
100
101
shTarget = "\"$basedir/" + shTarget + "\""
101
102
}
102
103
103
104
// @SETLOCAL
105
+ // @CALL :find_dp0
104
106
//
105
- // @IF EXIST "%~ dp0\node.exe" (
106
- // @SET "_prog=%~ dp0\node.exe"
107
+ // @IF EXIST "%dp0% \node.exe" (
108
+ // @SET "_prog=%dp0% \node.exe"
107
109
// ) ELSE (
108
110
// @SET "_prog=node"
109
111
// @SET PATHEXT=%PATHEXT:;.JS;=;%
110
112
// )
111
113
//
112
- // "%_prog%" "%~ dp0\.\node_modules\npm\bin\npm-cli.js" %*
114
+ // "%_prog%" "%dp0% \.\node_modules\npm\bin\npm-cli.js" %*
113
115
// @ENDLOCAL
116
+ // @EXIT /b
117
+ //
118
+ // :find_dp0
119
+ // SET dp0=%~dp0
120
+ // EXIT /b
121
+ //
122
+ // Subroutine trick to fix https://github.com/npm/cmd-shim/issues/10
123
+ var head = '@ECHO off\r\n' +
124
+ 'SETLOCAL\r\n' +
125
+ 'CALL find_dp0\r\n'
126
+ var foot = 'ENDLOCAL\r\n' +
127
+ 'EXIT /b\r\n' +
128
+ 'find_dp0:\r\n' +
129
+ 'SET dp0=%~dp0\r\n' +
130
+ 'EXIT /b\r\n'
131
+
114
132
var cmd
115
133
if ( longProg ) {
116
134
shLongProg = shLongProg . trim ( ) ;
117
135
args = args . trim ( ) ;
118
136
var variableDeclarationsAsBatch = toBatchSyntax . convertToSetCommands ( variables )
119
- cmd = "@SETLOCAL\r\n"
137
+ cmd = head
120
138
+ variableDeclarationsAsBatch
121
139
+ "\r\n"
122
- + "@ IF EXIST " + longProg + " (\r\n"
123
- + " @ SET \"_prog=" + longProg . replace ( / ( ^ " ) | ( " $ ) / g, '' ) + "\"\r\n"
140
+ + "IF EXIST " + longProg + " (\r\n"
141
+ + " SET \"_prog=" + longProg . replace ( / ( ^ " ) | ( " $ ) / g, '' ) + "\"\r\n"
124
142
+ ") ELSE (\r\n"
125
- + " @ SET \"_prog=" + prog . replace ( / ( ^ " ) | ( " $ ) / g, '' ) + "\"\r\n"
126
- + " @ SET PATHEXT=%PATHEXT:;.JS;=;%\r\n"
143
+ + " SET \"_prog=" + prog . replace ( / ( ^ " ) | ( " $ ) / g, '' ) + "\"\r\n"
144
+ + " SET PATHEXT=%PATHEXT:;.JS;=;%\r\n"
127
145
+ ")\r\n"
128
146
+ "\r\n"
129
147
+ "\"%_prog%\" " + args + " " + target + " %*\r\n"
130
- + '@ENDLOCAL\r\n'
148
+ + foot
131
149
} else {
132
- cmd = "@" + prog + " " + args + " " + target + " %*\r\n"
150
+ cmd = head + prog + " " + args + " " + target + " %*\r\n" + foot
133
151
}
134
152
135
153
// #!/bin/sh
@@ -228,7 +246,7 @@ function writeShim_ (from, to, prog, args, variables, cb) {
228
246
}
229
247
230
248
function chmodShim ( to , cb ) {
231
- var then = times ( 2 , cb , cb )
249
+ var then = times ( 3 , cb , cb )
232
250
fs . chmod ( to , "0755" , then )
233
251
fs . chmod ( to + ".cmd" , "0755" , then )
234
252
fs . chmod ( to + ".ps1" , "0755" , then )
0 commit comments