安裝rust開發環境基本上應該依照rust官網的指示即可,nodejs的話就不建議直接官網下載,如果只是想玩玩就算了(大不了移除?),但如果要開發很多不同程式,那麼建議依後面介紹的步驟,在一台電腦裡裝很多個nodejs版本,畢竟它不像一些C#有懶人包,裝了.net 8可以向下相容編譯成在.net core 3 的runtime環境執行。
因為官網說的:「高效能、可靠性、生產力」 XDD,還說可以讓每個人都能打造出高效軟體,有圖有真相 (O):
喂? 太偷懶了吧,好啦,在這邊說明一下為什麼我會想用rust,絕對不是因為它很酷,也不是因為在寫C#時快被物件導向概念搞死,主要是在學DDD概念時,一直無法很好的結合領域物件的概念 (?),看到rust的enum,我覺得它是個很棒的概念,感覺應該可以更好的去實現領域物件,還可以順便搭上世界的潮流:
雖然我不是數學家,但這聽起來很酷對吧。好了不多說,我們快把環境裝起來。
以下依windows, mac, linux不同平台分別說明:
建議依官方提示下載安裝包
另外要下載 C++ build tools,依照下載安裝勾選使用 C++ 的桌面開發
,安裝完就可以使用了。
您似乎正在運行 Windows。欲使用 Rust,請下載安裝工具後,執行該程式並遵照螢幕上的指示。當看見相關提示時,您可能需要下載 Visual Studio C++ Build tools。若您並非使用 Windows,請參考「其他安裝方式」。
~$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
C:\> rustc -V # 檢查版本
rustc 1.68.2 (9eb3afe9e 2023-03-27)
C:\> rustup update # 更新版本
info: checking for self-updates
info: downloading self-update
stable-x86_64-pc-windows-msvc updated - rustc 1.71.1 (eb26296b5 2023-08-03) (from rustc 1.68.2 (9eb3afe9e 2023-03-27))
info: cleaning up downloads & tmp directories
% rustc -V # 檢查版本
rustc 1.69.0 (84c898d65 2023-04-16)
% rustup update
info: downloading self-update
stable-aarch64-apple-darwin updated - rustc 1.71.1 (eb26296b5 2023-08-03) (from rustc 1.69.0 (84c898d65 2023-04-16))
info: cleaning up downloads & tmp directories
~$ rustc -V # 檢查版本
rustc 1.71.1 (eb26296b5 2023-08-03)
~$ rustup update # 更新版本
info: syncing channel updates for 'stable-x86_64-unknown-linux-gnu'
info: checking for self-update
stable-x86_64-unknown-linux-gnu unchanged - rustc 1.71.1 (eb26296b5 2023-08-03)
info: cleaning up downloads & tmp directories
以下指令 powershell
也適用喔,題外話 windows建議下使用新的 pwsh
~$ cargo new hello # 建立新的專案,並放至資料夾hello底下
Created binary (application) `hello` package
~$ ls # 查看目錄是否已建立 (?)
hello
~$ cd hello/ # 進入專案工作目錄
~$ cargo run # 編譯並執行程式
Compiling hello v0.1.0 (/home/user/code/hello)
Finished dev [unoptimized + debuginfo] target(s) in 0.49s
Running `target/debug/hello`
Hello, world!
等等,我們不是要跑rust的嗎,怎麼指令是打cargo ?
npm
啊,或yarn
,或pnpm
gem
或bundle
dotnet
或 msbuild
就像游泳跑步一樣,不也別人做什麼我們就做什麼
rustc是rust的compiler,cargo則是用來管理rust套件的工具,通常我們在建置時,要去尋找相依套件,並連同相關的套件一起呼叫編譯器建置打包,所以我們後續都會是以cargo的指令為主。
什麼? 你問我為什麼要用套件,自己寫不好嗎?
或許大家有聽過不要重造輪子,自己刻有什麼不好,舉個例子,像CSV格式大家應該用過,沒用過也應該聽過(?),知道它格式的人會想說,不就用逗號分隔嗎,有什麼難的,這麼簡單還要載套件?但是都沒想過自己是不是真的懂CSV,有沒有依照CSV標準來寫,如果遇到英文字串有逗號咋辦(Hello Co., Ltd.
)?,這時他又會說用"
圍起來不就好了:"Hello Co., Ltd."
,那如果裡面要加上"
怎麼辦,那如果...各種如果怎樣辦,結果就是平常用都好好的,突然不知道哪一天就爆了,(先怪USER不依照程式的規格放資料,不然就是說我怎麼會知道 ╯°Д°)╯ ┻━┻ (╯°O°))。
一般我會先覺得我 這個菜雞 遇到的問題,其他大大們應該遇過,所以先google看其他先進怎麼解,畢竟前人的解法會經過比較多驗證 i.e.該修的bug都修了 ,或是有些stackflow上的解答不好就會被樓下噴(?)。既然我想要 用別人的輸子 快速且有效地解決遇到的問題,所以快速study一下,評估適用性,再取捨一下,最後有符合我的需求就使用,(不過現在要提醒大家記得看一下授權條款)。
什麼,我以為安裝到這邊就好了? 哈哈 代誌不是巧巧人所想ㄟ那麼簡單。因為我們後面會用到其他套件或框架堆疊起來的技術棧,所以還有一些(ㄉㄨㄟ)工具要安裝。
一個類似hot-reload的東西,可以幫助開發
~$ cargo install cargo-watch
在windows安裝 Tauri 還算相對簡單(?),只要
PS> cargo install tauri-cli # 安裝 tauri的命令列工具
Updating crates.io index
Downloaded tauri-cli v1.4.0
Downloaded 1 crate (1.2 MB) in 3.17s
Installing tauri-cli v1.4.0
Updating crates.io index
... 中間省略數百行,上個廁所,泡杯咖啡回來還沒跑完 ...
Compiling jsonschema v0.16.1
Finished release [optimized] target(s) in 4m 54s
Replacing C:\Users\myname\.cargo\bin\cargo-tauri.exe
Replaced package `tauri-cli v1.2.3` with `tauri-cli v1.4.0` (executable `cargo-tauri.exe`)
linux指令一樣,但是秒完成,噢不是,原來是我之前裝過了,所以cargo溫馨提示已安裝:
$ cargo install tauri-cli # 安裝 tauri的命令列工具
Updating crates.io index
Ignored package `tauri-cli v1.4.0` is already installed, use --force to override
什麼是protoc,就是編譯 protobuf 用的,那protobuf又是什麼,就是用來當 gRPC 通訊的介面定義檔案,不知道的可以看一下gRPC的中文維基說明,那與大家現在常用的REST API over HTTP有什麼不同呢,可以參考概略的比較表。
安裝方式基本依官方說明
就是到 github 下載最新發佈的執行檔,找一個看起來像是protoc-24.0-win64.zip
的檔案,其中檔名的24.0
可能會依查找的時間點不同而不同,解壓後把bin\protoc.exe
放在windows裡的path找的到的地方即可,如果不知道放哪也可以放在%homepath%\.cargo\bin
這裡,打開檔案總管把路徑貼上就會打開進到cargo的資料夾了。
~$ brew install protobuf
~$ protoc --version # Ensure compiler version is 3+
~$ apt install -y protobuf-compiler
~$ protoc --version # Ensure compiler version is 3+
聰明的你應該知道這是跟WebAssembly的打包有關係,沒錯!! 就是rust要編譯成wasm所需要用到的工具包
PS> cargo install wasm-pack
Updating crates.io index
Downloaded wasm-pack v0.12.1
Downloaded 1 crate (423.6 KB) in 1.02s
Installing wasm-pack v0.12.1
Compiling wasm-pack v0.12.1
Finished release [optimized] target(s) in 30.16s
Replacing C:\Users\myname\.cargo\bin\wasm-pack.exe
Replaced package `wasm-pack v0.10.3` with `wasm-pack v0.12.1` (executable `wasm-pack.exe`)
好不容易裝完 Rust的相關開發工具了,再撐一下,node.js安裝相對比較容易也比較快 (因為大部分的人的電腦應該都裝過了)
我們看一下官網的說明:
好像有看沒有懂(?),我們看一下中文版的:
好像比較清楚一點了,可以減少代碼量、無虛擬DOM就在理論上效能會比較好,最後打包完的artifact也會比較小。總之,聽說它的語法相對比較簡潔,效能相對三大框架比較快,打包體積也比較小,感覺就滿有趣的,再稍稍了解一下,會發現他的思維與三大框架不同,把一些runtime的工作拿到compile時來做,(怎麼感覺有點像rust把其他語言在runtime時的gc,拿到compile時強制做掉一樣),難不成他們效能的來源就是如此,我們後續有機會再慢慢邊玩邊了解。
開始之前,我們先安裝前端開發工具 Node.js。不過等等,先別急著下載,因為node.js更版頻繁,各種套件的相依性可能需要不同的執行版本,有時候專案一多可能有些程式代碼來不及跟著升版,所以我們需要降版node.js執行。那怎麼辦?,程式碼的版控交給git,node.js的版控就交給nvm。
所以我們先安裝 ,類似Ruby的rvm,或是Python的pyenv。nvm是(Node Version Manager),就是用來控制Node.js的版本,讓多個版本可以安裝在同一台電腦,需要時再切換到想使用的版本,(多個願望一次滿足?)。
使用windows環境的的用戶看這裡,往下找到一個Download Now的連結,按下去,
接著再點 nvm-setup.exe (懶人包) 下載後直接安裝即可。
nvm的使用可以看官方文件,如果覺得英文不好讀,這裡有中文解說版本,想要了解的人可以參考。
PS> nvm version # 確認nvm已成功安裝,顯示nvm版號
1.1.9
PS> nvm install lts # 安裝最新的LTS版本
Downloading node.js version 18.17.1 (64-bit)...
Extracting node and npm...
Complete
npm v9.6.7 installed successfully.
Installation complete. If you want to use this version, type
nvm use 18.17.1
PS> nvm list # 這裡顯示已安裝及目前使用的版本
18.17.1
* 18.12.1 (Currently using 64-bit executable)
16.15.0
PS> nvm use 18.17.1 # 切換要使用的版本
Now using node v18.17.1 (64-bit)
直接看原廠說明,一直複製貼上就好了(O),以下列出安裝指令碼:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash
和windows底下的指令有一點點不一樣
~$ nvm install --lts # 安裝最新版node.js LTS版本
Installing latest LTS version.
Downloading and installing node v18.17.1...
Downloading https://nodejs.org/dist/v18.17.1/node-v18.17.1-linux-x64.tar.xz...
############################################################################################## 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v18.17.1 (npm v9.6.7)
裝好後一下來check一下,咦,非win陣營的終端命令列模式就是比較美,趕快把linux裝起來,或者你想直上mac也可以 (喂)
nvm list
提醒一下大家不要安裝到奇數版本的node.js版本,不然可能會發生一些奇怪的事(?)。
有了node.js之後,接下來需要用開發軟體的套件管理器,就類似C#的nuget、Ruby的Gems、Python的pip,一開始就用nodejs內建的npm來安裝pnpm吧 (怎麼有種用IE來下載Chrome的感覺)。
~$ npm install -g pnpm # 安裝 pnpm
added 1 package in 777ms
1 package is looking for funding
run `npm fund` for details
~$ pnpm -v # 查看 pnpm版本
8.6.12
好了,開發環境總算準備的差不多了(吧?),下一篇就讓我們開始來跑第一個 app 吧。
%homepath%\.cargo\config
~/.cargo/config
[http]
check-revoke = false
如果還是不行,可以試著重開IDE,或重開terminal(powershell, bash),或重開機(誤)
.npmrc
設定 strict-ssl為 falsenpm config set strict-ssl false
yarn config set strict-ssl false --global