问题:vue项目启动需要同时启动mock 和 dev 服务?
尝试解决方案
1、npm run dev && npm run mock
这样会阻塞npm run serve 运行,因为第一个服务没有抛出执行完成的命令(终止服务),所以无法执行第二个
2、如果是node服务可以使用pm2 &&
pm2 start mack.js && pm2 start mack1.js
3、使用node.js
node node.js 执行
使用原生的接口
const childProcess = require('child_process')
childProcess.exec(`npm run mock`)
childProcess.exec(`npm run sever:dev`)
使用runjs 插件
const { run } = require('runjs')
async function testasyncawait() {
console.log('testasyncawait开始执行')
await run('npm run serve:dev', { async: true }).then((data) => {
console.log('mock开始执行')
run(`npm run mock`, { cwd: `mock` })
console.log('mock可能执行完毕')
})
}
testasyncawait()
这两种方式全部失败,还是因为第一个服务没有抛出执行完成的命令(终止服务),所以无法执行第二个
如果改成npm run build:dev 这样是可行的,因为build命令会结束服务,所以会执行第二个
const { run } = require('runjs')
async function testasyncawait() {
console.log('testasyncawait开始执行')
await run('npm run build:dev', { async: true }).then((data) => {
console.log('mock开始执行')
run(`npm run mock`, { cwd: `mock` })
console.log('mock可能执行完毕')
})
}
testasyncawait()
最终解决方案
1、使用concurrently 这个只能并行,不能串行
npm install concurrently
package.json
"all": "concurrently \"vue-cli-service serve --mode development\" \"cd mock && node --experimental-modules ./mock.mjs\""
2、使用npm-run-all 文档说可以串行,本人尝试只有并行可以
npm install npm-run-all
"all2": "run-p serve:dev mock"