Tìm hiểu về Elixir trong Laravel
Bài đăng này đã không được cập nhật trong 7 năm
- Giới thiệu
Laravel Elixir cung cấp một API gọn gàng và liền mạch cho việc tạo các Gulp task cho ứng dụng Laravel. Elixir cung cấp một số pre-processor phổ biến cho CSS
và Javascript
, cùng một số công cụ testing. Sử dụng móc nối hàm, Elixir cho phép bạn tạo các asset pipeline một cách liền mạch. Ví dụ:
elixir(function(mix) {
mix.sass('app.scss')
.browserify('app.js', 'public/js/app.js');
mix.copy('./node_modules/font-awesome/fonts', 'public/fonts');
});
Nếu bạn từng cảm thấy khó khăn trong việc bắt đầu sử dụng Gulp và đóng gói asset, bạn sẽ yêu thích Laravel Elixir
. Tuy nhiên, bạn không cần thiết phải sử dụng nó khi phát triển ứng dụng. Bạn hoàn toàn thoải mái chọn lựa công cụ đóng gói asset nào bạn muốn, hoặc thậm chi không dùng gì cả.
- Cài đặt
- Trước khi dùng Elixir, bạn phải đảm báo có NodeJS được cài trên máy của bạn. Kiểm tra :
node -v
Mặc định, Laravel Homestead
đã có sẵn tất cả mọi thứ; tuy nhiên, nếu bạn không sử dụng Vagrant, thì bạn có thể dễ dàng cài Node bằng cách download NodeJS tại trang chủ.
- Sau đó bạn cần cài đặt Gulp vào thư viện global :
npm install --global gulp
Nếu bạn sử dụng một hệ thống quản lý version, bạn có thể muốn chạy npm shrinkwrap để khoá các yêu cầu về npm
:
npm shrinkwrap
Khi đã chạy lệnh này, bạn có thể thoải mái commit file npm-shrinkwrap.json
lên source control.
- Tiếp tục , việc còn lại của chúng ta là cài đặt
Elixir
: Đi cùng với bản cài mới đầy đủ của Laravel, bạn sẽ thấy một filepackage.json
tại thư mục gốc. Hãy nghĩ đó tương tự filecomposer.json
, chỉ khác là nó khai báo các dependency choNode
. Bạn có thể tiến hành cài đặt các dependency bằng cách chạy lệnh sau:
npm install
Nếu bạn đang phát triển trên hệ điều hành Windows hay bạn đang trong VM trên host là Windows, bạn có thể cần chạy lệnh npm install
với thông số --no-bin-links
:
npm install --no-bin-links
- Chạy Elixir
Elixir được xây dựng dựa trên Gulp, vì thế, để chạy các Elixir task, bạn chỉ cần chạy lệnh gulp
trên terminal. Thêm vào cờ --production
vào câu lệnh để yêu cầu Elixir thực hiện minify CSS và Javascript:
// Run all tasks...
gulp
// Run all tasks and minify all CSS and JavaScript...
gulp --production
- Theo dõi sự thay đổi của
asset
Sẽ khá là bất tiện khi phải chạy lệnh gulp mỗi khi có sự thay đổi vềassets
, bạn có thể dùnggulp watch
. Câu lệnh này sẽ tiếp tục chạy trên terminal và theo dõi sự thay đổi củaasset
, nếu phát hiện có sự thay đổi, hay file mới, thì asset sẽ lập tức được đóng gói lại:
gulp watch
- Làm việc với Stylesheets
- Less:
Để đóng gói Less thành CSS, bạn có thể sử dụng hàm less. Hàm này lấy các file Less trong thư mục
resources/assets/less
. Mặc định, task sẽ đặt các file CSS đã đóng gói vào trongpublic/css/app.css
:
elixir(function(mix) {
mix.less('app.less');
});
Bạn cũng có thể gộp các file Less thành một file CSS
:
elixir(function(mix) {
mix.less([
'app.less',
'controllers.less'
]);
});
Bạn có thể thay đổi vị trí file CSS
cuối cùng, bằng cách truyền vào tham số thứ hai trong hàm less:
elixir(function(mix) {
mix.less('app.less', 'public/stylesheets');
});
// Specifying a specific output filename...
elixir(function(mix) {
mix.less('app.less', 'public/stylesheets/style.css');
});
- Sass :
Hàm
sass
cho phép bạn đóng gói Sass thành file CSS. Với các file Sass lưu trongresources/assets/sass
, bạn có thể sử dụng như sau:
elixir(function(mix) {
mix.sass('app.scss');
});
Tương tự với hàm less, bạn có thể đóng gói nhiều file Sass thành một file CSS duy nhất, và chọn vị trí lưu file:
elixir(function(mix) {
mix.sass([
'app.scss',
'controllers.scss'
], 'public/assets/css');
});
- Plain CSS:
Nếu bạn muốn gộp các file CSS thuần vào trong một file, bạn có thể sử dụng hàm styles. Các đường dẫn truyền vào trong hàm này là tương đối với thư mục
resources/assets/css
và file cuối cùng sẽ được lưu tạipublic/css/all.css
:
elixir(function(mix) {
mix.styles([
'normalize.css',
'main.css'
]);
});
Dĩ nhiên, bạn có thể thay đổi vị trí file kết quả vào một vị trí khác bằng cách truyền vào tham số thứ hai của hàm styles
:
elixir(function(mix) {
mix.styles([
'normalize.css',
'main.css'
], 'public/assets/css');
});
4 . Làm việc với Scripts
- CoffeeScript
Hàm coffee được dùng để đóng gói các file CoffeeScript thành file Javascript thuần. Hàm này nhận một chuỗi hay một mảng các file CoffeeScript tương đối trong thư mục resources/assets/coffee
và tạo ra file app.js
trong thư mục public/js
:
elixir(function(mix) {
mix.coffee(['app.coffee', 'controllers.coffee']);
});
- Scripts
Nếu bạn có nhiều file Javascript mà bạn muốn đóng gói thành một file, bạn có thể sử dụng hàm scripts.
Hàm scripts sẽ lấy tất cả các file trong thư mục resources/assets/js
và tạo ra file Javascript cuối dùng tại thư mục public/js/all.js
:
elixir(function(mix) {
mix.scripts([
'jquery.js',
'app.js'
]);
});
Nếu bạn muốn tạo các tập hợp file scripts khác nhau, bạn có thể gọi nhiều hàm scripts.
elixir(function(mix) {
mix.scripts(['app.js', 'controllers.js'], 'public/js/app.js')
.scripts(['forum.js', 'threads.js'], 'public/js/forum.js');
});
Nếu bạn muốn gộp tất cả các scripts trong một thư mục, bạn có thể sử dụng hàm scriptsIn
.File kết quả cuối cùng sẽ được đặt tại public/js.all.js
elixir(function(mix) {
mix.scriptsIn('public/js/some/directory');
});
- Tạo Version/Hash cho 1 file:
elixir(function(mix) {
mix.version("css/all.css");
});
Để tạo link đến file kiểu này thì bạn khai báo dùng helper elixir() của Laravel như sau:
<link rel="stylesheet" href="{{ elixir("css/all.css") }}">
- Kết luận
Laravel Elixir là 1 công cụ rất hữu hiệu giúp bạn thao tác với css và javascript 1 cách đơn giản, hiệu quả .Hi vọng bài viết này có thể giúp các bạn hiểu thêm về Elixir , chúc các bạn thành công :
- Bạn có thể tham khảo chi tiết hơn về Elixir : https://laravel.com/docs/5.2/elixir
All rights reserved