1. 云栖社区>
  2. PHP教程>
  3. 正文

Laravel Elixir 深入探究(二):版本控制、测试套件、任务执行以及自定义任务和扩展

作者:用户 来源:互联网 时间:2017-12-01 09:07:03

测试版本控制任务

Laravel Elixir 深入探究(二):版本控制、测试套件、任务执行以及自定义任务和扩展 - 摘要: 本文讲的是Laravel Elixir 深入探究(二):版本控制、测试套件、任务执行以及自定义任务和扩展, 4、版本控制 我们接着上一节继续往下讲,当你修改一个JavaScript或者CSS文件后需要将其推送到服务器上。当用户在浏览器中访问站点时,有些用户也许可以立即获取到最新修改的前端资源文件,而另一些用户的浏览器可能仍然使用的

Laravel Elixir 深入探究(二):版本控制、测试套件、任务执行以及自定义任务和扩展

4、版本控制

我们接着上一节继续往下讲,当你修改一个JavaScript或者CSS文件后需要将其推送到服务器上。当用户在浏览器中访问站点时,有些用户也许可以立即获取到最新修改的前端资源文件,而另一些用户的浏览器可能仍然使用的是之前的缓存文件,这样就不能看到最新的效果。要修复这一问题,开发者可以通过修改文件名或者追加一个查询字符串到文件名后,又或者在文件名后追加一个随机字符串,该过程被称作版本控制或哈希。

Elixir也支持版本控制,要为文件添加版本控制,可以使用 version 方法:

mix.version('path/to/file');

注:该方法中传入的路径相对于 public 文件夹。

同时对多个文件添加版本控制也是可以的,和之前 mix 对象提供的其他方法一样,只需要传入文件数组即可:

mix.version(['path/to/file1', 'path/to/file2']);

添加版本控制后的所有文件被保存到 public/build 目录,并且在文件名和文件扩展之间多了一个唯一散列值(也可以成为唯一版本号):

mix.version('css/main.css'); // public/build/css/main-39d5f9a7.cssmix.version('js/app.js'); // public/build/js/app-78efbae6.js

要想在Blade模板或者只是php文件(未使用Blade)中一直使用最新版本的前端资源文件,可以使用Laravel提供的帮助函数 elixir (如果没有这个方法你就只能每次手动输入编译后的包含散列值的文件名):

<link rel="stylesheet" href="{{ elixir('css/main.css') }}" /><script src="{{ elixir('js/main.js') }}"></script> 5、运行测试套件

所谓测试套件指的是一组测试用例集合,用于测试软件/应用在指定场景中能否实现预期效果。

默认情况下Elixir为测试套件准备了两个任务,一个是 phpunit ,而另一个是 phpspec ,在 gulpfile.js 文件中,调用 mix 对象上的 phpUnit 方法进行 phpunit 测试:

mix.phpUnit();

而进行 phpspec 测试方法如下:

mix.phpSpec(); 6、执行Elixir任务

要运行以上列出的所有任务,只需在Laravel项目根目录下运行如下命令即可:

gulp

这会运行定义在 gulpfile.js 文件中的所有任务。如果你不想在每次修改后重新运行 gulp 命令,可以通过如下方式实现:

监听文件修改

使用如下命令:

gulp watch

将会监听所有前端文件修改,因此无论何时你保存一个Sass文件,该文件都会自动编译;如果定义了测试任务,无论何时你保存php文件,配置的测试套件都会运行。

你还可以添加一个选项 --production 到 gulp 命令以触发前端资源优化,例如最小化。

执行单个任务

有时候你可能只想运行单个任务,比如编译样式文件:

gulp styles

如果是编译CoffeeScript文件可以运行如下命令:

gulp scripts

如果是运行测试套件可以运行:

gulp tdd

该命令不仅会运行测试套件,还会监听文件修改。

7、自定义任务和扩展

通过上面的使用示例很明显Laravel Elixir自带了很多有用的任务,但是,还有很多需求这些自带的任务不能满足,比如 Stylus 编译,图片压缩等。如果要定义自己的任务,只需简单扩展Elixir即可:

elixir.extend(nameOfTask, function(arguments) { // 定义一个gulp任务 // 设置监听特定文件的监听器(可选) // 将gulp任务推入队列});

接下来我们来构建一个记录当前日期到控制台的简单任务:

var gulp = require('gulp'),elixir = require('laravel-elixir');elixir.extend('logDate', function() { gulp.task('date_logger', function() { console.log(new Date()); }); // this.registerWatcher('date_logger', '/**/*.js'); return this.queueTask('date_logger');});

要使用上面这个任务,可以在 mix 对象上进行如下调用:

mix.logDate();

然后去命令行运行:

gulp watch

这样每次修改js文件保存后都会执行 logDate 任务。

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索测试 , 版本 , 控制 , 任务 ,以便于您获取更多的相关知识。

弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率

40+云计算产品,6个月免费体验

现在注册,免费体验40+云产品,及域名优惠!

云服务器9.9元/月,大学必备