iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 4
0
Modern Web

線上讀書會-2016 年學 JavaScript 是一種什麼樣的體驗系列 第 4

進一步reactjs攻略前先介紹好用的vscode編輯器Tool

這一篇中會介紹默司大大在線上讀書會 主講的 vscode 的精彩

https://www.youtube.com/watch?v=rsaqfyDLzQM

以下是重點整理

安裝完 vscode 之後開啟終端機到專案的目錄 直接打 code . 就可以直接開啟該專案歐
接下來介紹一些常用的 plugin
** HTML Snippets ** - 常用的一些snippets 可以貼一些html5的快速鍵
** Path intellisense ** - 可以自動把常用資料夾中路徑自動顯示
** eslint ** - 適用於團隊對於程式風格規範,有嚴謹的規範例如程式碼縮排
** git history ** - 可以在vscode裡面直接看到操作紀錄
** Tslint ** - 類似 eslint 嚴謹模式開發, 不過是用在Typescript
** google complete Me ** - 透過google幫你搜尋出可能會用的字,智能提示
** document this ** -可以快速產出文件檔
** angular2 Typescript Snippets ** - 可以快速產出常用的 angularjs 2 Snippet code
** vscode icons ** - 可以變換檔案目錄的小icon 心情會愉快許多歐,可以一眼看出檔案類型
** auto import ** - 如果程式碼中有用到某個關聯性物件,會幫忙自動載入lib庫,目前只可用在typescript
** babelrc ** - 可以有schema功能
** bootstrap 3 snippets ** - bootstrap的 snippets
** Javascript (es6) Code Snippets ** - Javascript es6的 snippets

環境設定
1.全域設定
cmd + p 在輸入>setting 選擇開啟工作區設定,打開後會有分左右兩個畫面左邊的匡是可以參考用的,右邊的匡寫入後就可以改變設定了,這邊的設定值都有中文說明也可以參考默司大大的影片
2.專案設定
cmd + p 在輸入>setting 選擇開啟使用者設定,設定方法與全域一樣只是這是針對某一專案特別的設定
3.快速鍵
cmd + p 在輸入>快 或是 >short 就會出現設定檔了,打開後會有分左右兩個畫面左邊的匡是可以參考用的,右邊的匡寫入後就可以改變設定了,快速鍵主要由 key 與 command 組合 也可以再搭配 when使用 ,舉一個例,如果vscode中要在terminal開啟時按下cmd+w 可以關閉terminal可以透過下列組合完成

           "command":"workbench.action.terminal.kill",
           "key":"cmd+w",
           "when":"terminalFocus"

默司大大的影片也有列舉更多範例可以參考影片中約31分的地方
4.es6/javascript 設定與編譯
影片中有創建一個 jsconfig.json,這個部分是早期vscode要智能提示時需要的設定,新版的已經不需要設定嚕

        {
        "compilerOptions": {
        "module": "commonjs",
        "target": "es5"  // 這裡如果是前端使用es5
        },
        "exclude": [
        "node-modules"
        ]
        }

接下來要使用 npm init -y 創建一個 package.json做套件管理
使用yarn add babel-runtime
在使用 yarn add -dev babel-cli babel-plugin-transform-runtime babel-preset-es2015 babel-preset-stage-0

補充 yarn 是新的類似npm管理套件用的套件 可以透過npm install yarn -g 安裝

編譯.babelrc 設定檔

            {
            "presets": [
            "stage-0",
            "es2015"
            ],
            "plugins": [
            "transform-runtime"  //這邊主要是要讓前端有些瀏覽器不支援es6語法的部分補上一些功能
            ]
            }

完成上述設定檔後,如果要把程式碼轉es5 就要下指令
babel -s -d dist /src (這邊babel 可以安裝全域,-s 是sourceMap -d是目的輸出檔)

sourceMap是什麼東東,程式碼中會es6轉es5,過程中除錯斷點會發生在es5中,所以souceMap就是在對應這個的es6錯誤點使用,之後會再介紹webpack這個東東..因為是2016年....

再把這一段寫在package.json之中的script可以直接用 npm 指令執行編譯輸出
強大的智能提示
可以使用 yarn 安裝各類的 @types/各類的定義檔 這樣會有智能提示的功能非常的強大
影片中 import _ from 'lodash;這樣寫法時智能提示無法作用
要改成 const _ =require('lodash') 或 import * as _ from 'lodash 就可以使用了
使用vscode 火力演示 async/await + promise 示範 56分鐘處
因為es6已經內建所以就不用在載入 Promise ,Demo中是使用後端request包裝成 Promise在使用async/await 前端的話可以使用fetch
備註使用await前 function 前一定要包一個 async ,await接收一定是要一個Promise
Promise寫法如下用一個function去 return new Promise((resolve,reject)=>{ })

整段如下

              const _ =require('loadsh');
              const request=require('request');
              function getUrl(){
                   return new Promise((resolve,reject)=>{ 
                      request('https://google.com',(error,res,data)=>{
                            if(error) return reject(error);
                            resolve(data);
                      });
                   })
              }
            (async()=>{
            try {
               let html= await getUrl();
               console.log(html);
               } catch(err) {
               console.log(err);
                }
            })();

// 以上補充 try catch 錯誤機制 另外如果嫌麻煩 可以使用 warp

const warp = (fn) => (req, res, next) => fn(req, res, next).catch(next)

            warp(async()=>{
               let html= await getUrl();
               console.log(html);
            })();

async/await 屬於 ES7 標準,若有人寫 ES6+ 則表示含部分 ES7 的標準。Babel 載入 stage-0 plugin 後就支援這個標準 (感謝 lavn wei 大的補充)
不過node 7.2 如過是寫後端已不需 babel在轉譯了
node --harmony-async-await app.js 直接可以使用歐

debug 影片 1:08分處
組態設定先選則nodejs版本
組態中 program要改成輸出的執行位置這邊範例為main.js,就如下

            ...
            "program":"${workspaceRoot}/dist/main.js",
               "preLaunchTask":"build", //這個要對應下方工作執行器設定組態檔
               "sourceMaps":true
            ...

cmd + p >工作執行器設定組態檔

             ...
                },{
                "TaskName":"build",
                "args":["run","build"]
                }
             ...

就可以下斷點了,影片斷點環境是後端歐
5.typescript 設定與編譯
typescript 是微軟推出可以使用強型別的語言可以產出javascript,方便開發及維護的的一種語言
方便的部分是因為有static typing 可以讓程式碼編輯器中的語法提示(Intellisense)功能,更好維護的部分則是未來如果javascript一直更新版本,不需要去跟新的語法則可以產出新版的javascript

polo之前有用過sublime,atom 現在用到默司 推薦的好物 Vscode,用起來很舒服也推薦大家使用

明天繼續攻略reactjs jason 大大的 Todolist 其他章節了

在it鐵人賽中,線上讀書會12月也是天天都精彩歐 下面有連結這整個月的活動表,有空的話在家裡就可以參加了
也有很多朋友在問是否要費用,是不用的歐,參加方法可以到粉絲團https://www.facebook.com/readbook999/ 點選全系列連結選喜歡的線上讀書會加入並安裝zoom後就等精彩的活動超連結(活動前約30分鐘會公佈)
https://goo.gl/CK1ibc


上一篇
什麼是 reactjs 可以吃嗎 基本入門
下一篇
Yeah 開始Reactjs 元件拼拼裝裝單元
系列文
線上讀書會-2016 年學 JavaScript 是一種什麼樣的體驗30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
Ivan Wei
iT邦新手 5 級 ‧ 2016-12-07 01:30:20

幾個問題

  1. 建議貼文在看一次內容,因為有看到有錯字 bablerc 和少加 ' 的內容
  2. angular2 Typescript Snippets 應該是產生 angular2 的程式碼,而非 angular
  3. async/await 感覺少了在使用 await 的錯誤處理

補充一點

  1. async/await 屬於 ES7 標準,若有人寫 ES6+ 則表示含部分 ES7 的標準。Babel 載入 stage-0 plugin 後就支援這個標準

我要留言

立即登入留言