1. 程式人生 > >【WebGL連載教程三】H5開發3D引擎:TS專案建立和hello_world(新)

【WebGL連載教程三】H5開發3D引擎:TS專案建立和hello_world(新)

在上一篇,我們已經準備好了開發環境(如果你沒有,請返回檢視上一篇)。

現在我們來學習一步一步建立一個基於vscode的ts專案工程。(typeScript)

vscode和一般的ide區別在於,它不是直接在選單裡新建一個工程。

以下內容非常非常的詳細,從無到有,多圖實操,跟著一起做你也會成功~

【一】學習使用vscode來建立一個工程:

其實非常簡單,我們在任意盤下(你專案一般放在哪),建立一個資料夾。

取個名稱:TestWebGL  (專案名稱不重要,或者叫 LearnWebGL )


然後,回到vscode裡面,執行選單欄的,“檔案”>>"開啟資料夾"。


瀏覽選擇你剛剛建立的“TestWebGL”資料夾目錄。這樣它就成了你的工程目錄了。


以後,你建立或生成的所有檔案,資源,配置,都會在這個目錄下進行。

可以看到,TestWebGL目錄在vscode裡面顯示為大寫狀態。TESTWEBGL

* 由此可知,任意一個資料夾目錄,就可以指定為vscode專案的工程目錄。

【二】建立ts專案所需要的配置。

什麼是配置?主要是指 package.json tsconfig.json 這兩個檔案。

* package.json   決定我們的專案名稱,程式說明,以及指令碼指令集合等。

* tsconfig.json    決定我們如何將ts檔案編譯成js,編譯引數。以及輸入輸出的路徑等。

顯然,vscode不會為我們準備好這一切,都需要我們手工去建立。

然而,建立這些配置其實也非常的簡單,只需一行命令就完事了。

(a)建立 package.json :

在vscode中,按快捷鍵 ctrl+~。開啟終端(CMD)輸入   npm init 

會顯示一些提問,比如專案名字,不用管,只需一路回車執行就好,

最後會詢問: Is this ok? (yes) 偷笑 繼續!因為後邊可以手工去修改。

就會在目錄下建立pakage.json配置模板檔案。

(b)建立 tsconfig.json :

在vscode中,按快捷鍵 ctrl+~。開啟終端(CMD)輸入   tsc --init

一路回車,最終會生成tsconfig.json配置模板檔案。


兩個檔案已經生成了,先不用關心裡面的內容是什麼,後邊會講。

【三】建立工程所需要的目錄結構。

我們在其它專案開發的時候,經常會把原始碼,資源,庫,輸出單獨放在一個目錄下方便管理。

所以,常用的存放原始碼的目錄比如:src 。庫目錄:lib。輸出目錄:bin。

選中專案名稱,點選旁邊的”新建資料夾“按鈕圖示,依次建立這三個常用的目錄。


* 注意:點建立的時候,一定要選擇專案名稱,不然會建立到不對的層級,比如子目錄。

萬一層級錯了,不要緊。你只需要拖動它到正確位置即可。

src 目錄:存放原始碼,比如ts檔案。

lib  目錄:存放庫檔案,比如第三方js庫引用。

bin 目錄:存放編譯結果輸出。

【四】編寫第一個ts檔案:Main.ts

選中src目錄,點選”新建檔案“圖示,新建一個ts檔案,命名為:Main.ts


我們就按國際慣例,執行後在控制檯輸出一個文字:hello world

雙擊Main.ts檔案,在編寫區,輸入程式碼:console.log("hello world");


我們知道TypeScript語言是JavaScript的超集,所以我們需要將它先編譯成js才能使用。

【五】初步配置tsconfig.json

生成js的配置,在上面我們已經知曉,是在tsconfig.json中配置的。

開啟tsconfig.json是一個文字檔案,json格式顯示,有許多引數。

在預設情況下,都無需修改,我們需要關心的是,指定生成的js檔案存放目錄。

找到outDir這個選項,預設情況下是//註釋掉的,我們去掉//符號開啟它。修改成:"outDir": "bin/js/", 


這樣,我們剛才的Main.ts如果編譯的話,它會生成輸出到bin/js/目錄下面。

接下來,就是怎麼樣把ts編譯成js的問題了。

【六】初步配置 package.json

這個檔案掌管著一些跟專案相關的東西,比如編譯命令。

雙擊開啟package.json檔案,同樣也是一個文字json格式的內容。

{
  "name": "learnwebgl",//專案名稱
  "version": "1.0.0", //版本號
  "description": "",  //說明
  "main": "", //可執行的指令碼
  "scripts": {        //命令
    "test": "echo \"Error: no test specified\" && exit 1",
  },
  "author": "",//作者
  "license": "ISC"
}

預設情況下,是這樣的,我們可以根據自己的情況修改。

我們最關心的是scripts這個鍵中的內容,它可以指定一些命令,方便使用。

"tsc:w": "tsc -w"        ——以監控模式執行TypeScript編譯器。後臺始終保持程序。

                                    一旦TypeScript檔案變化即會重編譯

將上面這個指令,新增到scripts下。


接下來,我們嘗試編譯ts輸出為js檔案。

按ctrl+~ 開啟終端,輸入:npm tsc:w

不出意外的話,在bin/js/目錄下,會生成一個Main.js


* 小知識:手工編譯ts檔案的快捷鍵是:ctrl+shift+b。然而每次編譯都需要按這幾個鍵,太不智慧了。

好在提供了tsc -w的指令,它可以實時的監控你的任意一個ts檔案,只要內容發生了變動,就會立即編譯它。

由於我們使用的正是這個命令,所以以後只要更改了ts檔案的內容,都會自動編譯成js了,非常舒服省事。

【七】編寫html檔案呼叫生成的js檔案。

在上一節,我們生成了Main.js檔案,我們只需要在bin目錄下,建立一個index.html檔案。然後呼叫這個js就完事了。index.html的內容十分的簡單。

<script type="text/javascript" src="js/Main.js"></script>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Document</title>
    <script type="text/javascript" src="js/Main.js"></script>
</head>

<body>
    <img src="" id="img"/>
    <canvas id='my-canvas' width='480' height='400'>
        對不起,您的瀏覽器未支援H5內容.
    </canvas>
</body>

</html>

在body區域,有一個canvas標籤,這是h5的畫布,在本節中這不是必須的,在以後的章節我們會講解它。
到現在為止,我們只差一步就完成了,因為web開發是需要有一個http的web服務的。

所以我們還有最後一個任務,就是在vscode中安裝一個http web網站服務外掛。

【八】安裝web瀏覽的http服務外掛:lite-server。

按ctrl+~開啟終端,輸入:npm install -g lite-server --save-dev
引數 -g 表示全域性安裝,在前面我們已經接觸過了。

引數 -save-dev 表示將會把安裝的環境寫入到pakage.json裡面。

安裝成功後,http的網站目錄預設在我們的專案下,我們需要改到bin/輸出目錄下。

我們建立一個http的配置檔案存放到configs目錄下(新建)。configs/http-config.json

{ "port":8000, "files":[""], "startPath":"./bin/index.html", "server":{"baseDir":"./"}}

prot:指定web訪問的埠。 

files:表明需要監視哪些檔案,一但這些檔案的內容發生變化時,會自動重新整理瀏覽器。

server:伺服器的主目錄。

startPath:指定啟動lite-server後自動開啟的主頁。

然後,我們只需要讓lite-server伺服器讀取這個配置就可以了。

同樣,按ctrl+~開啟終端,輸入:lite-server -c configs/http-config.json

http伺服器讀取配置啟動,並會開啟預設的瀏覽器。建議使用谷歌瀏覽器作為預設的瀏覽器。

以後開啟http服務只需要輸入:lite-server 

* 它會一直在後臺執行,直到你在終端裡按 ctrl+c 組合鍵,就可以關閉它。 請記住!

另外,終端裡的所有程序都關聯在vscode上,當我們關閉vscode軟體後,程序都會全部關閉。

【九】使用谷歌瀏覽器除錯輸出。

在谷歌瀏覽器,按F12開啟控制檯,切換到Console選項卡中,按F5重新整理。

不出意外的話,控制檯應該輸出了:hello world


【十】寫在結尾:

其實每個步驟都十分簡單,做為入門級的教程,為了照顧新人,保證每一步都清晰易懂;

所以將每一步都用多圖的形式展現出來,導致的結果就是篇幅很長,大神們可以忽略跳過了。

裡面還有一些內容沒有完全講解,但在以後的學習過程中會詳細講解。

本節你只需要搞懂ts專案的建立到編譯,然後到除錯輸出這個流程。

其實打交道最多的是終端命令,希望好好掌握它。ctrl+~

由於是業餘時間寫作,錯誤難免會有,如有發現歡迎留言指出。

最終的 tsconfig.json 檔案內容:

{ "compilerOptions": { "reorderFiles": true, /* 排序編譯 */ "target": "es5", /* ECMAScript目標版本: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */ "declaration": true, /* 是否建立 '.d.ts' 檔案. */ "sourceMap": true, /* 是否建立 '.map' 檔案.這個檔案主要用於前端除錯 */ "outFile": "bin/js/Main.js", /* 指定輸入到一個js檔案中. */ "noImplicitAny": false, /* 為false時,如果編譯器無法根據變數的使用來判斷型別時,將用any型別代替。為true時,將進行強型別檢查,無法推斷型別時,提示錯誤. */ "removeComments":false,/* 編譯生成的JavaScript檔案是否移除註釋 **/ }, "exclude": [ "node_modules",/* 忽略npm模組. */ "bin"/* 忽略bin目錄. */ ]}如果你的編譯器不支援"reorderFiles": true, /* 排序編譯 */請在本部落格中使用typescript-box編譯器。

最終的 package.json 檔案內容:

{ "name": "learnwebgl", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "tsc:w": "tsc-x -w", "web": "lite-server -c configs/http-config.json" }, "author": "", "license": "ISC", "dependencies": {}}

在下一節,我們將學會用ts呼叫webgl畫布!

來做為進入3D程式設計的開始。