package.json合并多scripts执行报错,vue启动serve自动ftp部署的正确写法
语法错误原因
你当前的写法存在两处错误:
&&是串行执行运算符,必须等前一个命令执行完成并退出进程后才会运行后一个命令。而vue-cli-service serve是启动常驻的本地开发服务,进程会一直保持运行不会主动退出,因此后续的部署命令永远无法触发。- 直接写
deploy无法被系统识别,要调用同 package.json 内定义的其他脚本,需要使用npm run deploy(pnpm、yarn用户替换为对应包管理器的执行命令即可)。
正确实现方式
方案1:系统原生并行符(快速实现,有系统兼容性问题)
Mac/Linux 系统可直接用 & 运算符并行执行两个命令:
"scripts": { "deploy": "vue-cli-service ftpdeploy --genHist --diffFileOnly --ftpCfgPath /ftpdeploy/ --ftpHistPath /ftpdeploy/", "serve": "vue-cli-service serve & npm run deploy", "build": "vue-cli-service build" }
Windows 系统不同终端对应的并行符不同,cmd 用 &,PowerShell 用 ;,不建议多端协作场景使用该方案。
方案2:跨平台并行执行(全系统兼容,推荐)
先安装跨平台脚本执行工具 npm-run-all:
npm install npm-run-all -D
修改 scripts 配置,用内置的 run-p 命令并行执行多个脚本:
"scripts": { "deploy": "vue-cli-service ftpdeploy --genHist --diffFileOnly --ftpCfgPath /ftpdeploy/ --ftpHistPath /ftpdeploy/", "start:serve": "vue-cli-service serve", "serve": "run-p start:serve deploy", "build": "vue-cli-service build" }
如果需要确保开发服务完全启动后再执行部署,可额外安装端口监听工具 wait-on 优化逻辑:
- 安装依赖
npm install wait-on -D
- 修改配置(将示例中的8080端口替换为你实际的开发服务端口)
"scripts": { "deploy": "vue-cli-service ftpdeploy --genHist --diffFileOnly --ftpCfgPath /ftpdeploy/ --ftpHistPath /ftpdeploy/", "start:serve": "vue-cli-service serve", "wait-deploy": "wait-on http://localhost:8080 && npm run deploy", "serve": "run-p start:serve wait-deploy", "build": "vue-cli-service build" }
内容的提问来源于stack exchange,提问作者Charlotte Wells
相关产品推荐
相关产品推荐

