開發工具、環境

# Visual Studio Code

推薦設定、Plugin

# ESLint Rules

(with Airbnb)

# JSDoc

comment style

# DevTools tip

# Visual Studio Code

Plugin

# TODO Highlight

# TODO Highlight

# TODO Tree

 

# Code Spell Checker

 

# Bookmarks

 

# Bookmarks

 

# Bracket Pair Colorizer

 

# Eslint

 

# Eslint

 

// settings.json

{
  "eslint.autoFixOnSave": true,
}

# Eslint

 

# Syncing

 

synchronize all of your VSCode settings across multiple devices with your GitHub Gist
也可以套用他人 Gist 上的設定檔

# Visual Studio Code

Theme

# workbench color

// settings.json
{
    // workbench IDE 本身的顏色相關
    "workbench.colorCustomizations": {
        // 背景
        "editor.background": "#000",
        
        // 左邊程式碼行號
        "editorGutter.background": "#1c1c1c",

        // 右邊 minimap 預覽
        "editorOverviewRuler.errorForeground",
    },
}

# workbench color

設定值都有 autocomplete

# tokenColorCustomizations

// settings.json
{
    // syntax highlight
    "workbench.colorCustomizations": {
        // 註解
        "comments": "#7fb785",

        // 套用指定結構
        "textMateRules": [
            {
                "scope": "storage.type.function",
                "settings":{
                     "foreground": "#f00"
                }
            }, 
        ],
    },
}

# tokenColorCustomizations

  • Simple icons
  • vscode-icons
  • Kary Pro colors
  • Color Highlight
  • One Dark Pro
  • High Contrast

# Visual Studio Code

建議設定

{
  // 關閉顯示已開啟的檔案
  "explorer.openEditors.visible": 0,

  "editor.minimap.enabled": true,

  // 如果開啟 MiniMap 的話
  // 預設會顯示實際字元 (字超小),根本看不清楚
  // 將這個設定關閉,就會改顯示彩色區塊而已
  // 這會讓 VSCode 反應速度更快
  "editor.minimap.renderCharacters": false,

  // 切 tab 時左邊的檔案會跳來跳去
  "explorer.autoReveal": false,
}

# ESLint Rules

(with Airbnb)

# Install

npm i eslint-config-airbnb-base eslint-plugin-import eslint -D

# .eslintrc.js

module.exports = {
    //lint 環境
    'env': {
        'browser': true,
        'commonjs': true,
        'es6': true,
        'node': true
    },
    'extends': 'airbnb-base',
    'parserOptions': {
        'sourceType': 'module'
    },
    'rules': {
        /*
          'off' 或 0 - 关闭规则
          'warn' 或 1 - 开启规则,使用警告级别的错误:warn
          'error' 或 2 - 开启规则,使用错误级别的错误:error
        */
        'indent': [2, 4, { 'SwitchCase': 1 }],
        // 強制使用單引號
        'quotes': [2, 'single'],
        // airbnb 不允許使用 console ,這邊打開
        'no-console': 0,
        'class-methods-use-this': 0,
        // allow underscore
        'no-underscore-dangle': 0,
        'no-plusplus': 0,
        'strict': 0,
        'max-len': [1, { "code": 140, "tabWidth": 4 }],
        'camelcase': 1,
        'no-unused-vars': 1,
        'no-unused-expressions': [2, {
            'allowShortCircuit': false,
            'allowTernary': true
        }],
        'brace-style': [2, 'stroustrup'],
        'import/no-unresolved': 0,
        'import/extensions': [2, 'always'],
        'no-param-reassign': 1,
    },
    // 告知 lint 有這些 global variable
    'globals': {
        'wz3': false,
        'cc': false,
        'Editor': false,
        'jsb': false,
        'CC_EDITOR': false,
        'CC_PREVIEW': false,
        'CC_DEV': false,
        'CC_DEBUG': false,
        'CC_BUILD': false,
        'CC_JSB': false,
        'CC_TEST': false,
    }
};

建立 .eslintrc.js 在專案根目錄下 

# linter 沒過

# JSDoc

comment style

/**
 * @enum {number}
 */
const EnumTag = {
    DOG: 1,
    CAT: 2,
};

# enum

/**
 * demo
 *
 * @param {number} number
 * @param {string} string
 * @param {{}} obj
 * @param {[]} ary
 */
function demoFunc(number, string, obj, ary) {

}

# number, string, object, array

/**
 * obj was {id1:123, id2: 456}
 * @param {Object} obj
 * @param {Object.<string, number>} idObj 
 */
function objDemo(obj, idObj) {

}

# object

/**
 *
 * @param {Array.<{
 *           name:string,
 *           age: number,
 *           detail:{city:string}}>} userData
 */
function complexAry(userData) {

}

# array

/**
 *
 * @param {number} [code=1]
 */
function defaultVal(code = 1) {

}

# default value

/**
 * @returns {{name:string, age: number}}
 */
function returnAnObj() {
    
}

# returns object (1/2)

/**
 * @returns {number}
 */
function returnAValue() {
    
}

# returns object (2/2)

# jsPerf.com

JavaScript performance playground

# 事前準備

一個 github 帳號

# 你可以

- 寫性能測試

- 看別人的測試案例

- FORK 測試案例

- 瀏覽器速度收集數據

# DEMO

# DevTools tips

chrome develop tools

# $_

返回最後一次執行運算的結果

# copy

複製變數內容到剪貼簿

# console.table

# debugger

# edit break point

# edit break point

# console.trace

# console.time

# End

devenv

By mangogan

devenv

  • 862