5

Angular CLI 全局 ng.cmd 文件内容分析

 3 years ago
source link: https://segmentfault.com/a/1190000040688804
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Angular CLI 全局 ng.cmd 文件内容分析

文件内容如下:

REM Jerry
::这是注释
@ECHO off
SETLOCAL
CALL :find_dp0

IF EXIST "%dp0%\node.exe" (
  SET "_prog=%dp0%\node.exe"
) ELSE (
  SET "_prog=node"
  SET PATHEXT=%PATHEXT:;.JS;=;%
)

"%_prog%"  "%dp0%\node_modules\@angular\cli\bin\ng" %*
ENDLOCAL
EXIT /b %errorlevel%
:find_dp0
SET dp0=%~dp0
EXIT /b
  • SETLOCAL:

开始批处理文件中环境改动的本地化操作。在执行 SETLOCAL 之后所做的环境改动只限于批处理文件。要还原原先的设置,必须执行 ENDLOCAL。

在批处理文件中开始环境变量的本地化。 本地化一直持续到遇到匹配的 endlocal 命令或到达批处理文件的末尾。

更多细节见 windows 文档

在不停止父批处理程序的情况下从另一个调用一个批处理程序。 call 命令接受标签作为调用的目标

  • CALL :find_dp0

魔法变量 %n 包含用于调用文件的参数:%0 是 bat 文件本身的路径,%1 是后面的第一个参数,%2 是第二个,依此类推。

由于参数通常是文件路径,所以有一些额外的语法来提取部分路径。 ~d 是驱动器,~p 是路径(不含驱动器),~n 是文件名。 它们可以组合,所以 ~dp 是驱动器+路径。

因此 %~dp0 在 bat 中非常有用:它是执行 bat 文件所在的文件夹。

您还可以获得有关文件的其他类型的元信息:~t 是时间戳,~z 是大小。

dp0 意思是批处理文件所在的驱动器和路径。

第五行调用的 :find_dp0, 实现在第18行。

  • set: 设置环境变量。

SET dp0=%~dp0

意思是把当前批处理文件所在的绝对路径,设置给批处理文件执行时临时声明的环境变量 dp0

  • IF EXIST "%dp0%\node.exe"

检查当前批处理文件的同级目录下,是否存在 node.exe 文件。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK