跳到主要內容

Sublime Text 3 - 建立 React 開發環境

Sublime Text 一直是我很喜歡的前端編輯器,兼具輕量及可攜帶性一直是我很喜歡的特色,然而最近在開發 React 的時候,發現開發沒有特別設定的開發體驗實在不佳,於是在參考許多網路上大大們的文章後完成以下的開發環境需求,下面內容會一步步說明各個需求的設定過程,或許各位有更好的 package 清單,歡迎留言建議。

本篇所建立的開發環境

  1. 支援 ES6、JSX 語法高亮 | Support JSX Syntax Highlight
  2. 錯誤提示 | ES-Linter
  3. Emmet 支援 JSX 語法 | Enable Emmet while writing in JSX
  4. 自動完成語法 | React-Snippet

基本需求

Sublime 已經安裝 Package ManagerEmmet,若已使用 SublimeLinter-jshint,請在使用者設定的地方將他關掉。此外,NodeJS 也需要安裝。

Sublime Package List

  • SublimeLinter
  • SublimeLinter-contrib-eslint
  • Babel
  • Babel Snippets

Node Package List

  • eslint
  • babel-eslint

1. 支援 ES6、JSX 語法高亮

使用 package manager 安裝 BabelBabel Snippets,再次開啟 .js 檔案時,點選 View -> Syntax -> Open all with current extension as... -> Babel -> JavaScript(Babel)。

若遇到想更換主題卻無法切換,可以在 ctrl + ` 的視窗中輸入 view.settings().erase("color_scheme")

2. 錯誤提示

npm 安裝 eslint babel-eslint npm install eslint babel-eslint -g

使用 package manager 安裝 SublimeLinterSublimeLinter-contrib-eslint
在專案 root folder 底下新增 .eslintrc.js,貼上以下內容

{
  // 使用 babel-eslint 解析
  "parser": "babel-eslint",
  "env": {
    // for browser
    "browser": true,
    // in CommonJS
    "node": true
  },
  // 可以自定義要覆寫的預設檢查內容:
  "rules": {

  }
}

Eslint 可以搭配 Sublime Linter,在存檔的時候自動檢查錯誤:

Preferences -> Package Settings -> SublimeLinter -> Settings-User
,設定 "show_errors_on_save": true

另外,全域安裝 eslint

$ npm install -g eslint
可以在專案根目錄使用
$ eslint --init 
指令,由提示選項自動產生 .eslintrc.[js|json] 檔案,做出更加客製化的錯誤提示。

自行定義 ESLint 檢查的規則設定請參考: ESLint-Rule

3. Emmet 支援 JSX 語法

不需要額外安裝 package ,只需要在 Prefrences > Key Bindings (User) 中加入下列設定:

 {
  "keys": ["tab"], 
  "command": "expand_abbreviation_by_tab", 
  "context": [
    {
      "operand": "source.js, text.html", 
      "operator": "equal", 
      "match_all": true, 
      "key": "selector"
    }, 
    {
      "match_all": true, 
      "key": "selection_empty"
    },
    {
      "operator": "equal", 
      "operand": false, 
      "match_all": true, 
      "key": "has_next_field"
    }, 
    {
      "operand": false, 
      "operator": "equal", 
      "match_all": true, 
      "key": "auto_complete_visible"
    }, 
    {
      "match_all": true, 
      "key": "is_abbreviation"
    }
  ]
}

現在只需要在鍵入 div.container 後按下 tab ,就會產生
<div className="container"></div>

詳細設定內容請參考:Emmet-Sublime

4. 自動完成語法

package manager 安裝 Babel Snippets,即可支援語法如:

鍵入rcc 後按下 tap 產生

import React, { Component } from 'react';

export class script extends Component {
    render() {
        return (
            
); } }

更多自動完成語法請參考: Babel-Sublime

若想要鍵入 rcc 時,產生的 class 之前加上 default,那麼需再在安裝 PackageResourceViewer,為 Babel Snippets 在 rcc 對應的語法修改。

首先在 sublime 中按下 command + shift + p,接者在輸入框選擇 PackageResourceViewer: Open Resource,打開 Babel Snippets 套件,輸入 rcc 應該可以對應到 react_component_class.sublime-snippet,打開該檔案後直接在 class 前加上 default,再輸入 rcc 一次就可以產生帶有 default 的語法囉!

留言

這個網誌中的熱門文章

使用 Gulp Babel Browserify 打造 React Redux ES6 開發環境 (第二篇)

編譯 SASS 語法 | JavaScript 語法偵錯 | 單元測試 本文目的為介紹以 Gulp 打造 React Redux Router ES6 的開發及產品環境,以下將會說明所需的套件及設定方式,依建制步驟拆成五個篇章,關於 React Redux ES6 Jest 等相關知識不在此篇筆記介紹範圍。 第一篇 - 編譯 ES6 JSX 語法 | CSS JS 自動載入 | 本地端伺服器 編譯 JSX 及 ES6 語法 | Babel Browserify HTML 自動載入 CSS JS | Bower Wiredep Gulp Inject 建立開發用伺服器及自動重新載入 | Gulp Connect 第二篇 - 編譯 SASS | 語法偵錯 | 單元測試 編譯 SASS 語法 | Gulp Sass JavaScript 語法偵錯 | ESLint 單元測試 | Jest 第三篇 - 環境變數 | 程式碼壓縮 | 檔案壓縮 | 輸出隨機檔名 轉換開發及產品環境變數 | Browerify Dotenv Envify JavaScript SASS 程式碼壓縮 | Gulp Sass Uglify 產品環境下打包所有 JS CSS 檔案 | Gulp Useref 輸出的 CSS JS 檔案附加不重複的檔名 | Gulp Rev 第四篇 - 彙整 Gulp task 彙整 Gulp task - development 彙整 Gulp task - production 第五篇 - 導入 Redux React-Router 架構 導入 Redux Router 架構 | React Redux Router 前三篇會依序介紹每個功能及建置方式,第四篇會將零碎的 task 打包成一連串的動作,做成開發及產品環境的指令集,第五篇會把 react-redux 和 react-router 基本架構導入。 基本需求:已安裝 NodeJS 及了解如何使用 npm ,並知道如何使用 Gul

在送出 Ajax 時,將 cooke 值一並送出

在送出 Ajax 時,將 cookie 值一並送出 若 Ajax 送出的網址為相同 domain Ajax 會將瀏覽器的 Cookie 放在 header 的 Cookie 欄位以字串 "key1=value1; key2=value2; key3=value3" 的形式送出 若 Ajax 送出的網址為相不同 domain 預設行為不送 Cooke 這個 header。 若這種情況還是要送 cookie,則需要瀏覽器和伺服器互相配合 瀏覽器: 送 Ajax 時需要加入 withCredentials: true ,以使用 Axios 為例: axios.get('/someCorssOriginUrlIWantToSendCookie', { headers:{ withCredentials: true } }); 伺服器: 回應瀏覽器的 preflight request 時需要特別在 header 注意兩個設定: Access-Control-Allow-Origin 'http://some.domainname' 這種 CORS 情境不能為 *(wildcard),需要指定特定的 domain,且需要和 preflight request 相同。 Access-Control-Allow-Credentials true 註:這邊只針對送出 cookie 時要特別調整的兩個 header 的設定方式,由於 CROS 時,瀏覽器送出 Ajax 的 request 將格式依情況而定。例如 Ajax content-type 為 application/json,伺服器在回應 preflight request 時需要在 header 中加入 Access-Control-Allow-Headers Content-Type,表示伺服器接受這種 content-type 的 request,這部分不在這裡討論。 做完上面的設定,瀏覽器送出 Ajax 時,即會在 header 中加入 Cookie 欄位,值如同同 domain 的形式一樣。 參考網址: MDN