SlideShare a Scribd company logo
1 of 46
Download to read offline
Laravel 工作坊
專案啟動與設定
shengyou @ 彰師大資工系學會 (2014.12.06)
階段任務
• 使用 composer 指令建立一個 Laravel 專案
• 設定 Laravel 環境變數
• 安裝 Laravel 套件 (generator、ide-helper、
faker)
• 綜合演練
啟始 Laravel 專案
啟始 Laravel 專案
• 打開 cmder.exe 切換至 專案目錄
• 用 composer 指令啟始 laravel 專案
$	
  cd	
  C:UwAmpwww
$	
  composer	
  create-­‐project	
  laravel/laravel	
  {your-­‐project-­‐
name}	
  -­‐-­‐prefer-­‐dist
★ 參考:http://laravel.tw/docs/4.2/installation
備用方案
• 直接從 Laravel 官方下載打包好的 zip
• 下載完成後,直接解壓縮,並重新命名資
料夾名稱成專案名稱,再執行以下指令:
http://cabinet.laravel.com/latest.zip
$	
  cd	
  C:UwAmpwww{專案名稱}
$	
  php	
  artisan	
  key:generate
Laravel 目錄結構
• public 是 Document Root
• vendor 是 composer 安裝的套件
• app 是程式核心
Laravel 目錄結構
config 資料夾內放置 Laravel 框架所有的設定 及環境變數值
Laravel 目錄結構
controllers 資料夾內放置所有 controller 的 案
Laravel 目錄結構
database 資料夾內有兩個資料夾,migrations 放所有資料庫操
作相關紀錄;seeds 則放所有假資料產生的 案
Laravel 目錄結構
models 資料夾內放置所有 model 的 案
Laravel 目錄結構
storage 資料夾裡是 Laravel 運作時自動產生的各種 案 (快
取、log…) 一般不用動,但 署時要記得把寫入權限打開
Laravel 目錄結構
views 資料夾內放置所有 view 的 案
Laravel 目錄結構
public 資料夾內放所有公開 案,包括 css, js, favicon,
robots.txt,及程式進入點 index.php
Laravel 目錄結構
vendor 資料夾裡所有的 案都是用 composer 管理,
一般來說不需要動,我們也會在版本控制系統內忽略
了解 composer.json
{
	
   "name":	
  "{vendor}/{package-­‐name}",
	
   "description":	
  "{package	
  description}",
	
   "keywords":	
  ["{keyword1}",	
  "{keyword2}"],
	
   "license":	
  "{license}",
	
   "type":	
  "project",
	
   "require":	
  {
	
   	
   "laravel/framework":	
  "4.2.*"
	
   },
	
  	
  	
  	
  "autoload":	
  {
	
  	
  	
  	
  	
  	
  	
  	
  略...
	
   },
	
  	
  	
  	
  "scripts":	
  {
	
  	
  	
  	
  	
  	
  	
  	
  略...
	
  	
  	
  	
  }
	
   "config":	
  {
	
   	
   "preferred-­‐install":	
  "dist"
	
   },
	
   "minimum-­‐stability":	
  "stable"
}
私有專案用:proprietary
格式:"vendor/package-­‐name":	
  "version"
套件穩定度的設定:
•stable	
  (預設)
•RC
•beta
•alpha
•dev
移除不必要 案
• 專案內的幾個說明 可以移除,包括:
- CONTRIBUTING.md
- readme.md
驗證安裝
• 開啟 UwAmp,確認 Document Root 指向
Laravel 專案的 public,並啟動 Server
• 打開瀏覽器:http://localhost:8000
確認
安裝成功
存 點
• 試著把現在已經可以運作的程式碼加入版
本控制內
• 流程提醒:
- 建立一個新的 存庫
- working directory > staging area > commit
.gitignore
• 有一些 案 (比方說 IDE 的設定 ) 我們不
想要放到版本控制系統裡,希望 git 可以
自動忽略 些 案
• 只要把想忽略的規則寫入 .gitignore 裡並
commit 到 存庫,日後 git 就會自動忽略
些 案
設定 Laravel
各開發階段流程
[ development ]
開發用、測試用
[ local ]
本機端開發
[ staging ]
階段性發
[ production ]
正式上線
每個開發夥伴本機端
獨立開發,開發完成
後送回版本控制系統
[version control]
原始碼管理
定期從版本控制系統
取出後,進行整合、
單元等測試
專案階段完成後,進
行階段性發 ,給客
戶測試、確認
所有階段完成後 署
至正式主機,對外公
開使用
什麼是環境設定?
• 在開發過程中,程式碼會經過數個不同的
開發階段,每個開發階段都會 署在不同
的機器上。也因此,諸如 DB 連線資 等
變數在不同機器上就會有不同的設定
• 環境變數的設計,就是讓程式碼可以動態
的適應不同機器上的不同設定,減少 署
時需手動調整設定的負擔
為什麼要設定環境?
• 以往程式碼 署到不同主機時,就要手動
修改相關的連線資
• Laravel 的環境設定設計,可以讓 Laravel
自動依照不同的主機名稱,自動載入對應
的相關設定,開發者也可自行決定開發階
段的名稱,可搭配自動 署工具,讓 署
工作快速不出錯
如何知道目前的環境
$	
  php	
  artisan	
  env
使用 artisan 指令查尋目前的環境
Laravel 如何偵測環境?
★ 參考:http://laravel.tw/docs/configuration#environment-configuration
‘環境名稱’	
  =>	
  array(‘電腦1’,	
  ‘電腦2’),
在	
  bootstrap/start.php	
  設定
設定語法:
如何查詢電腦名稱?
$	
  hostname
使用 hostname 指令查尋電腦名稱
如何查詢電腦名稱?
使用控制台查尋電腦名稱 (我的電腦 > 內容)
如何設定環境變數?
• app/config/{environment}/*.php
- Laravel 會自動根據目前的環境,載入對
應的設定 ,覆寫 production 的設定
- 只需要複製需要覆寫的設定即可,沒有
設定的則會由 production 的值帶入
- {environment} 名稱可自定,但 testing 保
留給單元測試使用
★ 參考:http://laravel.tw/docs/4.2/configuration#environment-configuration
設定資料庫連線
‘databse’	
  =>	
  ‘blog_local’,
‘username’	
  =>	
  ‘root’,
‘password’	
  =>	
  ‘root’,
將資料庫連線資 改為 MAMP 設定
設定範例:
測試資料庫連線
連線失敗
連線成功
從 phpMyAdmin 確認
新的 migrations 資料表產生
存 點
• 試著把現在已經可以運作的程式碼加入版
本控制內
• 流程提醒:
- working directory > staging area > commit
安裝 Packages
什麼是 Package?
• 在開發程式時,往往希望可以直接使用別
人已經寫好的函式庫,不用重新發明輪子
• Package 就是 Laravel 的擴充程式,透過安
裝 Package 就可以直接使用別人寫好的功
能,加快開發速度
• 個單元將安裝數個 Package 協助開發
何處尋找 Package?
• 透過搜尋引擎尋找:
- Packagist
- Packalyst
• 聽 大神/同事/朋友 的推薦
• 看別人的 Open Source 裡有用到 些?
如何安裝 Package?
• 仔細閱讀 README (確認版本、規格)
• 調整 composer.json / composer update
• 設定 ServiceProvider、Alias (視需求)
• Publish 設定 (視需求)
• Migrate DB (視需求)
★ 以 Generator 為例:https://github.com/JeffreyWay/Laravel-4-Generators/
要安裝的 Packages
• way/generators
- Laravel 各種 Class 案產生器
• barryvdh/laravel-ide-helper
- 從原始碼產生編輯器語法補完
• fzaninotto/faker
- 產生資料庫假資料使用
安裝額外套件
• 編輯 composer.json
• 更新套件
$	
  composer	
  update
"require":	
  {
	
   "laravel/framework":	
  "4.2.*"
},
"require-­‐dev":	
  {
	
   "way/generators":	
  "~2.0",
	
   "barryvdh/laravel-­‐ide-­‐helper":	
  "v1.11.3",
	
   "fzaninotto/faker":	
  "v1.4.0"
},
"autoload":	
  {
★ 套件查詢:https://packagist.org/
更新套件
使用 composer update 指令
設定 Service Provider
依套件指示設定 Service Provider
測試安裝結果
確認出現對應的 artisan 指令
artisan ide-helper:generate
• 掃描目前的專案目錄,針對每個類別產生
編輯器可用的提示
- 執行完畢後,會在專案目錄底下產生一
個 _ide_helper.php 的 案 (可加
入 .gitignore裡)
• 範例:
$	
  php	
  artisan	
  ide-­‐helper:generate
存 點
• 試著把現在已經可以運作的程式碼加入版
本控制內
• 流程提醒:
- working directory > staging area > commit
綜合演練
• 用 SourceTree 啟動一個新的 存庫
• 用 cmder + composer 啟動一個新專案
• 在 Netbeans 裡輸入專案
• 設定 Laravel 及安裝 Laravel 套件
• 設定/啟動 UwAmp
• 瀏覽器裡預覽
問與答
學員可開始練習、實作
單元小結
• 在 個單元裡,我們說明如何透過
composer 啟動一個 Laravel 專案,並設定
Laravel 環境變數、安裝套件
• 下一個單元,我們將學習如何使用 Laravel
的 migration 功能進行資料庫操作

More Related Content

What's hot

What's hot (20)

使用 Controller
使用 Controller使用 Controller
使用 Controller
 
Package 安裝與使用
Package 安裝與使用Package 安裝與使用
Package 安裝與使用
 
開發工具與環境建置
開發工具與環境建置開發工具與環境建置
開發工具與環境建置
 
Model 設定與 Seeding
Model 設定與 SeedingModel 設定與 Seeding
Model 設定與 Seeding
 
給你一個使用 Laravel 的理由
給你一個使用 Laravel 的理由給你一個使用 Laravel 的理由
給你一個使用 Laravel 的理由
 
開發環境建置
開發環境建置開發環境建置
開發環境建置
 
使用者認證
使用者認證使用者認證
使用者認證
 
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎
 
Route路由控制
Route路由控制Route路由控制
Route路由控制
 
[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者
[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者
[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎
 
工作坊簡介
工作坊簡介工作坊簡介
工作坊簡介
 
COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹
COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹
COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹
 
工作坊總結
工作坊總結工作坊總結
工作坊總結
 
使用 Controller
使用 Controller使用 Controller
使用 Controller
 
工作坊簡介
工作坊簡介工作坊簡介
工作坊簡介
 
選一個框架當好朋友,讓您成為開心攻城獅
選一個框架當好朋友,讓您成為開心攻城獅選一個框架當好朋友,讓您成為開心攻城獅
選一個框架當好朋友,讓您成為開心攻城獅
 
驗證與訊息
驗證與訊息驗證與訊息
驗證與訊息
 
wagon - 免安裝可攜的 Laravel 開發環境
wagon - 免安裝可攜的 Laravel 開發環境wagon - 免安裝可攜的 Laravel 開發環境
wagon - 免安裝可攜的 Laravel 開發環境
 

Viewers also liked

Viewers also liked (15)

使用 Eloquent ORM
使用 Eloquent ORM使用 Eloquent ORM
使用 Eloquent ORM
 
Model & Seeding整合
Model & Seeding整合Model & Seeding整合
Model & Seeding整合
 
開發流程與工具介紹
開發流程與工具介紹開發流程與工具介紹
開發流程與工具介紹
 
Schema & Migration操作
Schema & Migration操作Schema & Migration操作
Schema & Migration操作
 
Route 機制
Route 機制Route 機制
Route 機制
 
Migrations 與 Schema 操作
Migrations 與 Schema 操作Migrations 與 Schema 操作
Migrations 與 Schema 操作
 
Model 設定與 Seeding
Model 設定與 SeedingModel 設定與 Seeding
Model 設定與 Seeding
 
啟動 Laravel 與環境設定
啟動 Laravel 與環境設定啟動 Laravel 與環境設定
啟動 Laravel 與環境設定
 
PHP 語法基礎與物件導向
PHP 語法基礎與物件導向PHP 語法基礎與物件導向
PHP 語法基礎與物件導向
 
Route 路由控制
Route 路由控制Route 路由控制
Route 路由控制
 
Migrations 與 Schema操作
Migrations 與 Schema操作Migrations 與 Schema操作
Migrations 與 Schema操作
 
CRUD 綜合運用
CRUD 綜合運用CRUD 綜合運用
CRUD 綜合運用
 
開發環境建置
開發環境建置開發環境建置
開發環境建置
 
應用程式部署
應用程式部署應用程式部署
應用程式部署
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎
 

Similar to 專案啟動與設定

A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
Wen-Tien Chang
 
Java Build Tool course in 2011
Java Build Tool course in 2011Java Build Tool course in 2011
Java Build Tool course in 2011
Ching Yi Chan
 
docker intro
docker introdocker intro
docker intro
koji lin
 
[OSDC12]相依性管理 - 以Ruby開發為例
[OSDC12]相依性管理 - 以Ruby開發為例[OSDC12]相依性管理 - 以Ruby開發為例
[OSDC12]相依性管理 - 以Ruby開發為例
YC Ling
 

Similar to 專案啟動與設定 (20)

使用 laravel 的前與後
使用 laravel 的前與後使用 laravel 的前與後
使用 laravel 的前與後
 
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
 
從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用
 
Java Build Tool course in 2011
Java Build Tool course in 2011Java Build Tool course in 2011
Java Build Tool course in 2011
 
Cloudstack dev/user sharing
Cloudstack dev/user sharingCloudstack dev/user sharing
Cloudstack dev/user sharing
 
讓軟體開發與應用更自由 - 使用 Docker 技術
讓軟體開發與應用更自由 - 使用 Docker 技術讓軟體開發與應用更自由 - 使用 Docker 技術
讓軟體開發與應用更自由 - 使用 Docker 技術
 
Flutter 踩雷心得
Flutter 踩雷心得Flutter 踩雷心得
Flutter 踩雷心得
 
給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發
 
Laravel 5.2 教學
Laravel 5.2 教學Laravel 5.2 教學
Laravel 5.2 教學
 
docker intro
docker introdocker intro
docker intro
 
DAE 新变化介绍
DAE 新变化介绍DAE 新变化介绍
DAE 新变化介绍
 
Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer Talk
 
Phalcon2014 Startup
Phalcon2014 StartupPhalcon2014 Startup
Phalcon2014 Startup
 
Docker基礎
Docker基礎Docker基礎
Docker基礎
 
[OSDC12]相依性管理 - 以Ruby開發為例
[OSDC12]相依性管理 - 以Ruby開發為例[OSDC12]相依性管理 - 以Ruby開發為例
[OSDC12]相依性管理 - 以Ruby開發為例
 
GDG Taichung - Flutter and Firebase.pdf
GDG Taichung - Flutter and Firebase.pdfGDG Taichung - Flutter and Firebase.pdf
GDG Taichung - Flutter and Firebase.pdf
 
運用 Docker 整合 Laravel 提升團隊開發效率
運用 Docker 整合 Laravel 提升團隊開發效率運用 Docker 整合 Laravel 提升團隊開發效率
運用 Docker 整合 Laravel 提升團隊開發效率
 
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
 
20170830 2nd sre build and deployment scripting
20170830 2nd sre build and deployment scripting20170830 2nd sre build and deployment scripting
20170830 2nd sre build and deployment scripting
 
Package安裝與使用
Package安裝與使用Package安裝與使用
Package安裝與使用
 

More from Shengyou Fan

[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
Shengyou Fan
 

More from Shengyou Fan (20)

[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
 
[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
 
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀
 
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
 
How I make a podcast website using serverless technology in 2023
How I make a podcast website using serverless technology in 2023How I make a podcast website using serverless technology in 2023
How I make a podcast website using serverless technology in 2023
 
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀
 
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
 
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇
 
Using the Exposed SQL Framework to Manage Your Database
Using the Exposed SQL Framework to Manage Your DatabaseUsing the Exposed SQL Framework to Manage Your Database
Using the Exposed SQL Framework to Manage Your Database
 
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
 
[COSCUP 2022] Kotlin Collection 遊樂園
[COSCUP 2022] Kotlin Collection 遊樂園[COSCUP 2022] Kotlin Collection 遊樂園
[COSCUP 2022] Kotlin Collection 遊樂園
 
初探 Kotlin Multiplatform
初探 Kotlin Multiplatform初探 Kotlin Multiplatform
初探 Kotlin Multiplatform
 
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率
 
[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南
 
以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用
以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用
以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用
 
Composer 經典食譜
Composer 經典食譜Composer 經典食譜
Composer 經典食譜
 
老派浪漫:用 Kotlin 寫 Command Line 工具
老派浪漫:用 Kotlin 寫 Command Line 工具老派浪漫:用 Kotlin 寫 Command Line 工具
老派浪漫:用 Kotlin 寫 Command Line 工具
 
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator
 
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API
 
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless
 

專案啟動與設定