前言:
- 这个方法不需要你有 bat 指令功底,能耐心看完,会拷贝代码然后代入使用即可。
首先说一下package.json的 script 中的几个钩子
scripts: 声明一系列npm脚本指令
- prepublish: 在包发布之前运行,也会在npm install安装到本地时运行
- publish,postpublish: 包被发布之后运行
- preinstall: 包被安装前运行
- install,postinstall: 包被安装后运行
- preuninstall,uninstall: 包被卸载前运行
- postuninstall: 包被卸载后运行
- preversion: bump包版本前运行
- postversion: bump包版本后运行
- pretest,test,posttest: 通过npm test命令运行
- prestop,stop,poststop: 通过npm stop命令运行
- prestart,start,poststart: 通过npm start命令运行
- prerestart,restart,postrestart: 通过npm restart运行
// 举个例子
"scripts":{
"prestart":"prebuild.bat",
"start":"webpack .",
"poststart":"postbuild.bat"
}
以 start 命令为例,我们的命令都是key value 形式存放的,一般使用npm start
命令时执行的是webpack .
,如果我们加上代码中的两行,那么执行npm start
时,流程是这样的:
- 先执行
prestart
指令,此时会对应的执行prebuild.bat
文件 - 然后执行
start
指令,此时会执行webpack .
命令 - 最后执行
poststart
指令,此时会执行postbuild.bat
文件
pre 意味着,在某个命令之前执行,post 则是之后,对应的可以参考我上面的钩子指令。
获取package.json中的版本号–bat脚本
文件名:prebuild.bat
(自己随便取,我这里主要是为了和后面对应)。
文件路径:这个文件要和 package.json
同级。
@echo off
REM 获取版本号
for /f "tokens=1,2* delims=," %%a in (package.json) do (
echo %%a | findstr "version" >nul && echo {%%a} > "src/assets/config/version.json" || echo;
)
首先说明一下:我也不会使用bat指令,这些bat指令,是我从网上查资料,然后自己改造,最后写成的。
这几行bat指令,会读取你的package.json
文件,取出 version
这一行,然后写入到路径为src/assets/config/version.json
的version.json
文件里。
如果路径下不存在version.json
这个文件的话,会自动创建此文件然后在写入。
使用方法
打开package.json
找到我们 打包 或 其他指令(这里以build
打包指令为例):
"build":"xxxxxx"
此时我们需要在package.json
的scripts
里,也就是 build 命令所在的地方,加一行:
"prebuild":"prebuild.bat"
这样,每次我们执行npm run build
的时候,程序都会先走 prebuild
钩子,对应的去执行 prebuild.bat
文件,然后bat文件会读取出package.json
里的version版本,并放入我们指定的version.json
文件里。
- 注意:这里每次写入
version.json
,都是覆盖写入,不是追加。
如果我们需要拿版本号的话,只需要读取我们创建的json文件即可。