我在我的 dockerized 项目中使用 vue-cli,其中端口映射如下所示:"4180:8080",编译我的 SPA 后的实际消息如下所示:
App running at:
- Local: http://localhost:8080/app/
It seems you are running Vue CLI inside a container.
Access the dev server via http://localhost:<your container's external mapped port>/app/
应用程序运行良好,我可以按照设想通过 http://localhost:4180/app/访问,但我无法找到正确的方法来更改上面的消息以显示此链接,而不是"您似乎正在容器内运行 Vue CLI......"。我可以使用 webpack 钩子在消息之前插入链接,但实际上想找到更改消息的方法,由 cli 生成。有可能吗?
我遇到了这个问题 - 因为我想用 bash 做同样的事情,在 Docker 容器中运行(可能是你已经在做的事情(。
你可以通过在 Docker 容器中生成子节点进程来调用 Vue CLI 命令来实现这一点(假设你的容器正在运行节点(。然后,您可以相应地修改stdout
和stderr
的输出。
您可以通过以下两种方式之一调用 Javascript 文件:
- 使用 shell 脚本(例如 bash(调用 node 并运行此脚本
- 将 Dockerfile 的入口点设置为使用此脚本(假设您默认运行 node(
// index.js
const { spawn } = require('child_process')
const replacePort = string => {
return string.replace(`<your container's external mapped port>`, 8000)
}
const vueCLI = (appLocation, args) => {
return new Promise((resolve, reject) => {
const vue = spawn('vue', args, {cwd: appLocation})
vue.stdout.on('data', (data) => {
console.log(replacePort(data.toString('utf8', 0, data.length)))
})
vue.stderr.on('data', (error) => {
console.log(replacePort(error.toString('utf8', 0, error.length)))
})
vue.on('close', (exitCode) => {
if (exitCode === 0) {
resolve()
} else {
reject(new Error('Vue CLI exited with a non-zero exit code'))
}
})
})
}
vueCLI('path/to/app', CLI_Options).then(() => resolve()).catch(error => console.error(error))
这种方法确实有缺点,不限于:
- 性能较慢 - 由于效率较低
- 内存泄漏的潜在危险,有待实施
- 僵尸的风险,如果父进程死亡
由于上述原因和其他几个原因,这条路线被发现不适合我的特定情况。
与其更改消息,不如更改 Vue 正在侦听的端口。
. npm 运行服务-- --端口 4180
这会自动更新您的消息以显示新端口,并且在您为新端口更新 docker 端口转发后,它将再次工作。