npm在Windows上是Windows批处理脚本,具有文件扩展名,
.cmd而不是可执行文件,在这种情况下,该脚本会修改当前目录,并且在退出前不会还原该目录。
我建议使用代替
cd hui-components-style
命令
pushd hui-components-style
并使用代替
cd ..
命令
popd
有关这两个命令(push和pop目录)的详细信息,请打开命令提示符窗口,然后运行
pushd /?并
popd /?显示每个命令的帮助。
使用绝对路径可以更好地理解的说明。
- 当前目录是
C:TempHDC
。 - 该命令
pushd hui-components-style
保存C:TempHDC
在堆栈上并设置为新的当前目录C:TempHDChui-components-style
。 npm
执行修改当前目录。- 该命令从堆栈
popd
获取C:TempHDC
,并将该目录设置为当前目录,而与当前目录是哪个目录无关。
因此,经过这两个修改的代码是:
echo STEP12cd HDCgit config --global url."https://".insteadOf git://echo STEP13pushd hui-components-stylecall npm.cmd install --registry http://localhost:23510popd
必须使用命令,
call因为它是
npm具有完整文件名
npm.cmd而不是可执行文件的批处理文件,即
call npm.cmd install --registry http://localhost:23510
否则,将 继续
执行当前批处理文件的
npm.cmd命令,并且
npmWindows命令处理器将永远不会处理与行之后的当前批处理文件中的任何命令。
另外,也可以使用以下代码:
echo STEP12cd HDCgit config --global url."https://".insteadOf git://echo STEP13cd hui-components-stylesetlocalcall npm.cmd install --registry http://localhost:23510endlocalcd ..
setlocal 命令执行以下操作:
- 它将当前目录的路径压入堆栈。
- 它将命令扩展的状态压入堆栈。
- 它将延迟扩展的状态推入堆栈。
- 它将当前环境变量表的内存地址压入堆栈。
- 它在内存中创建当前环境变量表的副本,并使该新环境变量表处于活动状态。
这些5个步骤总是即使进行
setlocal被称为具有1或的4个可能的选项2
EnableExtensions,
DisableExtensions,
EnableDelayedExpansion,
DisableDelayedExpansion以
额外地 改变命令扩展和/或延迟的环境变量扩展的状态。
现在,批处理文件
npm.cmd可以更改当前工作目录,可以添加,删除和修改环境变量,可以启用/禁用命令扩展,以及可以启用/禁用延迟扩展的用法。
但是在下一个命令 endlocal 之后,对命令处理环境的所有修改都无关紧要,因为 endlocal
- 删除当前环境表;
- 从堆栈中弹出先前环境表的内存地址,并使用该地址来恢复初始环境变量;
- 从堆栈中弹出延迟扩展的状态,并相应地禁用/启用延迟扩展;
- 从堆栈弹出命令扩展的状态,并相应地禁用/启用命令扩展;
- 从堆栈中弹出先前的当前目录路径,并将当前目录设置为此路径以还原当前目录。
这两个命令的名称实际上是不言自明的:
- setlocal …根据当前环境设置本地命令进程环境。
- endlocal …结束本地命令进程环境并还原以前的环境。



