Tác vụ Mix tùy biến
Tạo ra một tác vụ tùy biến cho dự án Elixir của bạn.
Giới thiệu
Sẽ không có gì là lạ nếu bạn muốn mở rộng ứng dụng Elixir bằng cách thêm một số tác vụ Mix. Trước khi học cách tạo ra một tác vụ Mix cụ thể, ta hãy xem qua những tác vụ có sẵn:
$ mix phx.new my_phoenix_app
* creating my_phoenix_app/config/config.exs
* creating my_phoenix_app/config/dev.exs
* creating my_phoenix_app/config/prod.exs
* creating my_phoenix_app/config/prod.secret.exs
* creating my_phoenix_app/config/test.exs
* creating my_phoenix_app/lib/my_phoenix_app.ex
* creating my_phoenix_app/lib/my_phoenix_app/endpoint.ex
* creating my_phoenix_app/test/views/error_view_test.exs
...
Như ở trên, Phoenix Framework cung cấp một tác vụ Mix để sinh dự án mới. Ồ vậy thì chúng ta có thể tự tạo cái gì đó tương tự cho dự án của chúng ta không nhỉ? Vâng câu trả lời là được, mà còn dễ như bỡn nữa là đằng khác.
Setup
Chúng ta hãy dựng một ứng dụng Mix đơn giản.
$ mix new hello
* creating README.md
* creating .gitignore
* creating mix.exs
* creating lib
* creating lib/hello.ex
* creating test
* creating test/test_helper.exs
* creating test/hello_test.exs
Your Mix project was created successfully.
You can use "mix" to compile it, test it, and more:
cd hello
mix test
Run "mix help" for more commands.
Bây giờ trong file lib/hello.ex mà Mix sinh ra cho chúng ta, hãy viết một hàm đơn giản để xuất ra “Hello, World!”.
defmodule Hello do
@doc """
Output's `Hello, World!` everytime.
"""
def say do
IO.puts "Hello, World!"
end
end
Tác vụ Mix tùy biến
Giờ thì ta tiến hành tạo tác vụ Mix của chính chúng ta nào. Hãy tạo mới một thư mục và file hello/lib/mix/tasks/hello.ex. Trong file này, hãy thêm vào 7 dòng code Elixir.
defmodule Mix.Tasks.Hello do
@moduledoc "The hello mix task: `mix help hello`"
use Mix.Task
@shortdoc "Simply runs the Hello.say/0 command."
def run(_) do
# calling our Hello.say() function from earlier
Hello.say()
end
end
Chú ý rằng defmodule bắt đầu với Mix.Tasks
và tên mà chúng ta muốn gọi từ command line. Ở dòng thử hai, use Mix.Task
sẽ cho chúng ta các tính năng của Mix.Task
. Sau đó khai báo một hàm run mà ta tạm thời bỏ qua các tham số. Trong hàm này, ta gọi module Hello
cùng với hàm say
.
Chạy tác vụ Mix
Ta hãy thử kiểm tra mix task vừa được tạo. Nó sẽ chạy ngon lành chỉ cần ta đứng trong thư mục. Từ command line, chạy lệnh mix hello
, và ta sẽ thấy kết quả như sau:
$ mix hello
Hello, World!
Mix khá là thân thiện. Nó biết rằng ai thì cũng sẽ có lúc viết sai chính tả, nên nó dùng một kĩ thuật gọi là fuzzy string matching (tạm dịch: so trùng các chuỗi gần nhau) để gợi ý.
$ mix hell
** (Mix) The task "hell" could not be found. Did you mean "hello"?
Bạn có để ý là chúng ta vừa giới thiệu một thuộc tính module mới là @shortdoc
? Nó sẽ có ích khi ta đưa ứng dụng ra sử dụng, như khi user chạy lệnh mix help
từ terminal.
$ mix help
mix app.start # Starts all registered apps
...
mix hello # Simply calls the Hello.say/0 function.
...
Caught a mistake or want to contribute to the lesson? Edit this lesson on GitHub!