在[Elixir001]中使用 mix escript.build 生成一個lifelog 的escript啟動腳本。 今天我們嘗試一下另一種方式:生成Archives。 我們先添加一個Task 1. 查看下我們現在有那一些task. 這個命令非常有用,:) > mix help mix # Run
在[Elixir001]中使用 mix escript.build 生成一個lifelog 的escript啟動腳本。
今天我們嘗試一下另一種方式:生成Archives。
我們先添加一個Task
1. 查看下我們現在有那一些task.
這個命令非常有用,:)
> mix help mix # Runs the default task (current: "mix run") mix app.start # Starts all registered apps mix archive # Lists all archives mix archive.build # Archives this project into a .ez file mix archive.install # Installs an archive locally mix archive.uninstall # Uninstalls archives mix clean # Deletes generated application files .....
2. 創建項目自定義的Task.
> mkdir -p lib/mix/tasks #一般都是放在lib/mix/tasks下的! >emacs lib/mix/tasks/lifelog.start.ex # 一般都是以.分隔的! defmodule Mix.Tasks.Lifelog.Start do use Mix.Task @shortdoc "Start logging" @moduledoc """ Manager your life. """ def run(args) do { _opts, args, _ } = OptionParser.parse(args) # 把命令行的args parse成可以使用的args Mix.Tasks.App.Start.run(args) #要先把application先啟動 LifeLog.CLI.main(args) end end
現在我們可以在當前目錄下運行
> mix lifelog.start #在項目當前目錄下
成功打開錄入界面!!!!!!! ,但是如果在別的目錄下呢?
3. 構建archive
現在我們如果不在項目的root目錄下運行
> mix lifelog.start ** (Mix) The task "lifelog.start" could not be found
根本找不到我們的這個task,因為我們還沒有安裝對應的archive,這個命令可以在上面的步驟1看到說明,我們只需要按說明來生成一個archive就行
> mix archive #查看當前install了什麼archive * hex-0.11.1.ez Archives installed at: /Users/zhongwen/.mix/archives > mix archive build #它會生成一個App-Version.ez文件 Compiled lib/mix/lifelog.start.ex Generated archive "lifelog-0.0.1.ez" with MIX_ENV=dev > mix archive.install lifelog-0.0.1.ez Are you sure you want to install archive "lifelog-0.0.1.ez"? [Yn] y * creating /Users/zhongwen/.mix/archives/lifelog-0.0.1.ez
> mix archive
* hex-0.11.1.ez
* lifelog-0.0.1.ez
Archives installed at: /Users/zhongwen/.mix/archives
mix archive build如果不指定文件名並且在當前目錄有mix.exs文件的話,會根據它裡面的app 和 version生成 App-Version.ez,
這下我們就可以到處運行
> mix lifelog.start
4.補充說明
以上已能完整的創建並安裝一個archive啦,但是上面有一個比較有意思的函數,我們這個例子中並實際用到,但卻是一個非常有用的函數!
Interactive Elixir (1.2.2) - press Ctrl+C to exit (type h() ENTER for help) iex(1)> OptionParser.parse(["--debug"]) {[debug: true], [], []} iex(2)> OptionParser.parse(["--source", "lib"]) {[source: "lib"], [], []} iex(3)> OptionParser.parse(["--source", "lib", "test/test.exs", "--verbose"]) {[source: "lib", verbose: true], ["test/test.exs"], []}
它可以把命令行的參數args轉化為一個keywords list.
更多詳細的例子可以通過(doc裡面的例子更加全面)
iex(4)> h OptionParser.parse
5.Resources
5.2 Mix.Tasks.Archive.Build Documentation
5.3 The Phoenix installer archive application 這個看上去也很棒!
5.4 以上提到的所有代碼修改: 增加Task 並生成archive 啟動
Loading up the process dictionary