Laravel Elixir
简介
Laravel Elixir 提供了简洁流畅的 API,让你能够在你的 Laravel 应用程序中定义基本的 Gulp 任务。Elixir 支持许多常见的 CSS 与 JavaScrtip 预处理器,甚至包含了测试工具。使用链式调用,Elixir 让你流畅地定义开发流程,例如:
elixir(function(mix) {
mix.sass('app.scss')
.coffee('app.coffee');
});
如果你曾经对于上手 Gulp 及编译资源文件感到困惑,那么你将会爱上 Laravel Elixir,不过 Laravel 并不强迫你使用 Elixir,你可以自由的选用你喜欢的自动化开发流程工具。
安装及配置
安装 Node
在开始使用 Elixir 之前,你必须先确定你的机器上有安装 Node.js。
node -v
默认情况下,Laravel Homestead 会包含你所需的一切;但是,如果你没有使用 Vagrant,那么你可以简单的浏览 Node 的下载页面 进行安装。
Gulp
接着,你需要全局安装 Gulp 的 NPM 扩展包:
npm install --global gulp
Laravel Elixir
最后的步骤就是安装 Elixir!在每一份新安装的 Laravel 代码里,你会发现根目录有个名为 package.json
的文件。想像它就如同你的 composer.json
文件,只不过它定义的是 Node 的依赖扩展包,而不是 PHP 的。你可以使用以下的命令安装依赖扩展包:
npm install
如果你是在 Windows 系统上或在 Windows 主机系统上运行 VM 进行开发,你需要在运行 npm install
命令时将 --no-bin-links
开启:
npm install --no-bin-links
运行 Elixir
Elixir 是创建于 Gulp 之上,所以要运行你的 Elixir 任务,只需要在命令行运行 gulp
命令。在命令增加 --production
标示会告知 Elixir 压缩你的 CSS 及 JavaScript 文件:
// 运行所有任务...
gulp
// 运行所有任务并压缩所有 CSS 及 JavaScript...
gulp --production
监控资源文件修改
因为每次修改你的资源文件之后在命令行运行 gulp
命令会相当不便,因此你可以使用 gulp watch
命令。此命令会在你的命令行运行并监控资源文件的任何修改。当发生修改时,新文件将会自动被编译:
gulp watch
使用样式
项目根目录的 gulpfile.js
包含你所有的 Elixir 任务。Elixir 任务可以被链式调用起来,以定义你的资源文件该如何进行编译。
Less
要将 Less 编译为 CSS,你可以使用 less
方法。less
方法会假设你的 Less 文件被保存在 resources/assets/less
文件夹中。默认情况下,此例子的任务会将编译后的 CSS 放置于 public/css/app.css
:
elixir(function(mix) {
mix.less('app.less');
});
你可能会想合并多个 Less 文件至单个 CSS 文件。同样的,生成的 CSS 会被放置于 public/css/app.css
:
elixir(function(mix) {
mix.less([
'app.less',
'controllers.less'
]);
});
如果你想自定义编译后的 CSS 输出位置,可以传递第二个参数至 less
方法:
elixir(function(mix) {
mix.less('app.less', 'public/stylesheets');
});
// 指定输出的文件名称...
elixir(function(mix) {
mix.less('app.less', 'public/stylesheets/style.css');
});
Sass
sass
方法让你能编译 Sass 至 CSS。Sass 文件的默认读取路径是 resources/assets/sass
,你可以使用此方法:
elixir(function(mix) {
mix.sass('app.scss');
});
同样的,如同 less
方法,你可以编译多个 Sass 文件至单个的 CSS 文件,甚至可以自定义生成的 CSS 的输出目录:
elixir(function(mix) {
mix.sass([
'app.scss',
'controllers.scss'
], 'public/assets/css');
});
纯 CSS
如果你只是想将一些纯 CSS 样式合并成单个的文件,你可以使用 styles
方法。此方法的默认路径为 resources/assets/css
目录,而生成的 CSS 会被放置于 public/css/all.css
:
elixir(function(mix) {
mix.styles([
'normalize.css',
'main.css'
]);
});
当然,你也可以通过传递第二个参数至 styles
方法,将生成的文件输出至指定的位置:
elixir(function(mix) {
mix.styles([
'normalize.css',
'main.css'
], 'public/assets/css');
});
Source Maps
Source maps 在默认情况下是开启的。因此,针对每个被编译的文件,同目录内都会伴随着一个 *.css.map
文件。这个文件能够让你在浏览器调试时,可以追踪编译后的样式选择器至原始的 Sass 或 Less 位置。
如果你不想为你的 CSS 生成 source maps,你可以使用一个简单的配置选项关闭它们:
elixir.config.sourcemaps = false;
elixir(function(mix) {
mix.sass('app.scss');
});
使用脚本
Elixir 也提供了一些函数来帮助你使用 JavaScript 文件,像是编译 ECMAScript 6、编译 CoffeeScript、Browserify、压缩、及简单的串联纯 JavaScript 文件。
CoffeeScript
coffee
方法可以用于编译 CoffeeScript 至纯 JavaScript。coffee
函数接收一个相对于 resources/assets/coffee
目录的 CoffeeScript 文件名字符串或数组,接着在 public/js
目录生成单个的 app.js
文件:
elixir(function(mix) {
mix.coffee(['app.coffee', 'controllers.coffee']);
});
Browserify
Elixir 还附带了一个 browserify
方法,给予你在浏览器引入模块及 ECMAScript 6 的有用的特性。
此任务假设你的脚本都保存在 resources/assets/js
,并会将生成的文件放置于 public/js/main.js
:
elixir(function(mix) {
mix.browserify('main.js');
});
虽然 Browserify 附带了 Partialify 及 Babelify 转换器,但是只要你愿意,你可以随意安装并增加更多的转换器:
npm install aliasify --save-dev
elixir.config.js.browserify.transformers.push({
name: 'aliasify',
options: {}
});
elixir(function(mix) {
mix.browserify('main.js');
});
Babel
babel
方法可被用于编译 ECMAScript 6 与 7 至纯 JavaScript。此函数接收一个相对于 resources/assets/js
目录的文件数组,接着在 public/js
目录生成单个的 all.js
文件:
elixir(function(mix) {
mix.babel([
'order.js',
'product.js'
]);
});
若要选择不同的输出位置,只需简单的指定你希望的路径作为第二个参数。该方法除了 Babel 的编译外,特色与功能同等于 mix.scripts()
。
Scripts
如果你想将多个 JavaScript 文件合并至单个文件,你可以使用 scripts
方法。
scripts
方法假设所有的路径都相对于 resources/assets/js
目录,且默认会将生成的 JavaScript 放置于 public/js/all.js
:
elixir(function(mix) {
mix.scripts([
'jquery.js',
'app.js'
]);
});
如果你想多个脚本的集合合并成不同文件,你可以使用调用多个 scripts
方法。给予该方法的第二个参数会为每个串联决定生成的文件名称:
elixir(function(mix) {
mix.scripts(['app.js', 'controllers.js'], 'public/js/app.js')
.scripts(['forum.js', 'threads.js'], 'public/js/forum.js');
});