如何在 Laravel 测试时跳过 Webpack

Laravel

让我们谈谈如何在 CI 管道中摆脱 NodeJS。

我运行 Chipper CI(Laravel 的持续集成)。 我一直很恼火的是,Webpack 构建比 CI 管道的实际 有价值 部分花费更多时间并导致更多问题。

我们中的大多数人只需要运行我们的测试并可能开始部署。 节点构建任务会增加大量时间,并且需要更多的 CPU/RAM 使用率。

如果我们只是在管道中不需要 Node 怎么办? 我们能不能……不能?

答案是:当然,也许!

功能测试

很多时候,在 CI 管道中构建静态资产的唯一原因是生成 mix-manifest.json 文件。

这允许在运行 Laravel Feature 测试时使用 mix() 助手函数。 功能测试会向你的应用程序发出 HTTP 调用,因此通常会呈现使用 mix() 助手函数的 blade 模板。

如果你没有 manifest 文件,则会引发错误!

生成此清单文件涉及构建你的静态资源 - 换句话说,使用 npm(或 yarn)安装依赖项并运行 Webpack 任务:

# Build static assets

npm ci --no-audit
npm run dev

旁注:你肯定应该提交了你的 package-lock.json 文件并运行npm ci -- no-audit 而不是npm install

如果查看你的 public/mix-manifest.json 文件,它可能看起来像这样(有或没有哈希,取决于您是否启用了版本控制)

{
    "/js/app.js": "/js/app.js",
    "/js/foo.js": "/js/foo.js",
    "/css/app.css": "/css/app.css"
}

事实上你不一定需要此文件来进行测试!

在你测试的 setUp() 方法中,可以添加以下魔法:

protected function setUp(): void
{
    parent::setUp();

    $this->withoutMix();
}

有了这些,mix() 助手将不会返回任何缺少清单文件的错误。 您的测试无需运行 NodeJS 任务即可通过!

你可以做的另一件事是复制的 CI 管道创建一个清单文件以进行测试。

假设我们的 Mix 配置生成了上面的 mix-manifest.json 文件。 我们可以将一个虚拟清单文件提交到tests/mix-manifest.json,它总是可用的!

然后,在我们的 CI 管道脚本中,我们可以使用该文件而不是安装/构建我们的 Node 依赖项:

  • 如果我们创建一个 mix-manifest.json 文件只是为了测试呢?
  • 在 CI 中,我们可以将它移动到需要的地方去
cp tests/mix-manifest.json public/mix-manifest.json

然后运行你的测试,不需要 NodeJS!

php artisan test

有了这个文件,mix() 助手函数就可以工作了,并且您的功能测试可以顺利通过!
创建正确的 manifest 文件可以帮助您在 CI 管道中节省大量时间和服务器资源

当您向根目录下的 manifest 文件添加新文件的同时也应更新 tests 目录下的 manifest 文件

什么时候需要构建前端资源?

有时,您需要在 CI 管道中构建前端资源!以下是您需要注意的最常见情况:

  1. 当您构建生产环境的前端资源时将它们打包到可部署的 “artifact” (zip 文件、容器镜像等)
  2. 当您在测试中运行其他 node 命令时,例如 eslint
  3. 当你使用 Laravel Dusk 进行浏览器测试时

如果我需要构建静态资源怎么办?

即使你需要在 CI 脚本中构建静态资源,你仍然可以节省宝贵的时间!

我最喜欢的包是 Airdrop(作者 Aaron Francis)。 它可以帮助您构建静态资源 如果它们在提交之间发生了更改。 如果它们没有更改,您可以从 S3 等文件系统驱动程序下载它们。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://laravel-news.com/skip-webpack-wh...

译文地址:https://learnku.com/laravel/t/69480

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!