iT邦幫忙

2023 iThome 鐵人賽

DAY 2
0

安裝rust開發環境基本上應該依照rust官網的指示即可,nodejs的話就不建議直接官網下載,如果只是想玩玩就算了(大不了移除?),但如果要開發很多不同程式,那麼建議依後面介紹的步驟,在一台電腦裡裝很多個nodejs版本,畢竟它不像一些C#有懶人包,裝了.net 8可以向下相容編譯成在.net core 3 的runtime環境執行。

為什麼選 rust

因為官網說的:「高效能、可靠性、生產力」 XDD,還說可以讓每個人都能打造出高效軟體,有圖有真相 (O):

rust 官方頁面

喂? 太偷懶了吧,好啦,在這邊說明一下為什麼我會想用rust,絕對不是因為它很酷,也不是因為在寫C#時快被物件導向概念搞死,主要是在學DDD概念時,一直無法很好的結合領域物件的概念 (?),看到rust的enum,我覺得它是個很棒的概念,感覺應該可以更好的去實現領域物件,還可以順便搭上世界的潮流:

雖然我不是數學家,但這聽起來很酷對吧。好了不多說,我們快把環境裝起來。

安裝 rust 編譯器(complier)

以下依windows, mac, linux不同平台分別說明:

第一次安裝rust

windows

建議依官方提示下載安裝包

另外要下載 C++ build tools,依照下載安裝勾選使用 C++ 的桌面開發 ,安裝完就可以使用了。

您似乎正在運行 Windows。欲使用 Rust,請下載安裝工具後,執行該程式並遵照螢幕上的指示。當看見相關提示時,您可能需要下載 Visual Studio C++ Build tools。若您並非使用 Windows,請參考「其他安裝方式」。

VS安裝畫面

mac 或 linux

~$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

更新 rust 版本

windows

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

mac

% 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

linux

~$ 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!

Cargo: Rust的套件管理工具

等等,我們不是要跑rust的嗎,怎麼指令是打cargo ?

  • 跑nodejs的指令也是打npm啊,或yarn,或pnpm
  • 跑ruby的指令是用gembundle
  • 跑c#用 dotnetmsbuild

就像游泳跑步一樣,不也別人做什麼我們就做什麼

rustc是rust的compilercargo則是用來管理rust套件的工具,通常我們在建置時,要去尋找相依套件,並連同相關的套件一起呼叫編譯器建置打包,所以我們後續都會是以cargo的指令為主。

什麼? 你問我為什麼要用套件,自己寫不好嗎?

年輕人終究是年輕人梗圖

或許大家有聽過不要重造輪子,自己刻有什麼不好,舉個例子,像CSV格式大家應該用過,沒用過也應該聽過(?),知道它格式的人會想說,不就用逗號分隔嗎,有什麼難的,這麼簡單還要載套件?但是都沒想過自己是不是真的懂CSV,有沒有依照CSV標準來寫,如果遇到英文字串有逗號咋辦(Hello Co., Ltd.)?,這時他又會說用"圍起來不就好了:"Hello Co., Ltd.",那如果裡面要加上"怎麼辦,那如果...各種如果怎樣辦,結果就是平常用都好好的,突然不知道哪一天就爆了,(先怪USER不依照程式的規格放資料,不然就是說我怎麼會知道 ╯°Д°)╯ ┻━┻ (╯°O°))。

一般我會先覺得我 這個菜雞 遇到的問題,其他大大們應該遇過,所以先google看其他先進怎麼解,畢竟前人的解法會經過比較多驗證 i.e.該修的bug都修了 ,或是有些stackflow上的解答不好就會被樓下噴(?)。既然我想要 用別人的輸子 快速且有效地解決遇到的問題,所以快速study一下,評估適用性,再取捨一下,最後有符合我的需求就使用,(不過現在要提醒大家記得看一下授權條款)。

安裝開發工具包

什麼,我以為安裝到這邊就好了? 哈哈 代誌不是巧巧人所想ㄟ那麼簡單。因為我們後面會用到其他套件或框架堆疊起來的技術棧,所以還有一些(ㄉㄨㄟ)工具要安裝。

安裝 cargo watch

一個類似hot-reload的東西,可以幫助開發

~$ cargo install cargo-watch

安裝 Tauri CLI

在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

什麼是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的資料夾了。

protoc檔案清單

  • mac
~$ brew install protobuf
~$ protoc --version  # Ensure compiler version is 3+
  • linux
~$ apt install -y protobuf-compiler
~$ protoc --version  # Ensure compiler version is 3+

安裝 wasm-pack

聰明的你應該知道這是跟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安裝相對比較容易也比較快 (因為大部分的人的電腦應該都裝過了)

為什麼選Svelte

我們看一下官網的說明:

svelte官網

好像有看沒有懂(?),我們看一下中文版的:

svelte官網中文版

好像比較清楚一點了,可以減少代碼量、無虛擬DOM就在理論上效能會比較好,最後打包完的artifact也會比較小。總之,聽說它的語法相對比較簡潔,效能相對三大框架比較快,打包體積也比較小,感覺就滿有趣的,再稍稍了解一下,會發現他的思維與三大框架不同,把一些runtime的工作拿到compile時來做,(怎麼感覺有點像rust把其他語言在runtime時的gc,拿到compile時強制做掉一樣),難不成他們效能的來源就是如此,我們後續有機會再慢慢邊玩邊了解。

前端開發工具 node.js via nvm

開始之前,我們先安裝前端開發工具 Node.js。不過等等,先別急著下載,因為node.js更版頻繁,各種套件的相依性可能需要不同的執行版本,有時候專案一多可能有些程式代碼來不及跟著升版,所以我們需要降版node.js執行。那怎麼辦?,程式碼的版控交給git,node.js的版控就交給nvm

所以我們先安裝 ,類似Rubyrvm,或是Pythonpyenv。nvm是(Node Version Manager),就是用來控制Node.js的版本,讓多個版本可以安裝在同一台電腦,需要時再切換到想使用的版本,(多個願望一次滿足?)。

windows 安裝

使用windows環境的的用戶看這裡,往下找到一個Download Now的連結,按下去,

nvm 說明文件

接著再點 nvm-setup.exe (懶人包) 下載後直接安裝即可。

nvm下載檔案清單

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)

非 windows 安裝

直接看原廠說明,一直複製貼上就好了(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
  • mac版

    nvm in mac

  • lunux版

    nvm in linux

安裝 pnpm

提醒一下大家不要安裝到奇數版本的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 吧。

疑難排解

  • 我同事(win11的環境)發生的靈異事件,安裝wasm-pack一直失敗,不曉得為什麼,但是用git bash開啟終端機再安裝,竟然就成功了!!真的是見鬼了
  • 解決套件管理 Cargo 無法驗證外部 https 憑證
    • 開啟或建立以下檔案:
      • windows: %homepath%\.cargo\config
      • linux or mac: ~/.cargo/config
    • 輸入以下內容
      [http]
      check-revoke = false
      
      如果還是不行,可以試著重開IDE,或重開terminal(powershell, bash),或重開機(誤)

      參考來源

  • 解決 npm 無法驗證外部 https 憑證
    • pnpm: 在package.json同層目錄加一個.npmrc 設定 strict-ssl為 false

    參考一

    • 或是執行以下指令
      npm config set strict-ssl false
      
    • 如果你是用yarn
      yarn config set strict-ssl false --global
      

補充資訊

  • LTS版本:大家在下載東西經常可見的LTS代表Long-Term Support,大意就是會給個有效期限的意思,就像鮮奶過期了你還是可以喝,只是拉肚子要自己負責XDD,這邊有一些常見的的支援表供參:.NETNode.jsPostgreSQLUbuntu
    • 一般來說LTS版本會比較穩定,通常有另一個版本可能開發團隊想要試新功能,比較不穩定不適合一般用戶使用,所以LTS上通常比較常見的更新都是修複bug或漏洞之類的,新功能通常會在下一個釋出才會放,一般是經過比較完整的測試才發佈。不過這個沒有絕對,只是一般是這樣,具體還是看開發團隊想怎樣就怎樣,(開發人員就是任性)。

參考資訊


上一篇
01 大全端? 使用rust + svelte建構跨平台應用程式
下一篇
03 rust 跑起來!,建立第一支 tauri 程式
系列文
前端? 後端? 摻在一起做成全端就好了30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言