【问题标题】:How to change vue-cli message after successfull compile ("App running at...")?成功编译后如何更改 vue-cli 消息(“App running at ...”)?
【发布时间】:2020-01-05 05:53:06
【问题描述】:

我在 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 生成的消息的方法。有没有可能?

【问题讨论】:

    标签: vue-cli


    【解决方案1】:

    我提出了这个问题 - 因为我希望使用 bash 做同样的事情,在 Docker 容器中运行(可能是你已经在做的事情)。

    您可以通过从 Docker 容器中生成子节点进程来调用 Vue CLI 命令来实现此目的(假设您的容器正在运行节点)。然后您可以相应地修改stdoutstderr 的输出。

    您可以通过以下两种方式之一调用 Javascript 文件:

    • 使用 shell 脚本(例如 bash)调用 node 并运行此脚本
    • 设置 Dockerfile 的入口点以使用此脚本(假设您默认运行节点)
    // 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))
    
    

    这种方法确实有缺点,不仅限于:

    • 性能变慢 - 因为效率较低
    • 内存泄漏的潜在危险,视实施情况而定
    • 如果父进程死亡,僵尸的风险

    由于上述原因和其他几个原因,这条路线被发现不适合我的具体情况。

    【讨论】:

      【解决方案2】:

      而不是更改消息,it's better to change the port Vue is listening on

      。 npm run serve -- --port 4180

      这会自动更新您的消息以说明新端口,并且在您为新端口更新您的 docker 端口转发后,它将再次工作。

      【讨论】:

      • 很遗憾,这不是一个合适的选择。我项目中的外部端口将来可能会更改。我需要尽可能保持我的 Dockerfile 不变,并且当我的团队成员可能需要另一个端口时不要随时编辑它。我将有关端口映射的信息注入到我的环境变量并使用它,例如,在我的沙箱服务器(express&nodejs)的消息中生成链接,因此我试图将此信息注入 CLI 消息。我已经在我的问题中描述了一种实现类似效果的方法,但希望有更优雅的方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-28
      • 2018-06-01
      • 1970-01-01
      • 2018-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多