React + Typescript + Webpack 開發環境配置

Heleth發表於2016-12-04

對於複雜或多人開發的 React 專案來說,管理和使用每個元件的 propsstate 或許會成為一件讓人頭痛的事情,而為每一個元件寫文件,成本也會比較大,對專案的開發效率也不是最理想的。

TypescriptReact 帶來很多好處:

  • 在元件頭部定義 interface,讓每個人在拿到元件的第一時間就可以很明確知道該元件需要使用的 propsstate
  • 在編譯中發現問題,減少執行時的報錯;
  • 可以在編輯器中實現實時型別校驗、引用查詢;
  • 約束型別,在混合多語言環境中降低風險,等。

且配置也是非常簡單,步驟如下。

檔案目錄

.
├── build # 前端配置檔案
│   ├── index.html
│   ├── webpack.config.js
├── app # 前端目錄
├── .gitignore
├── package.json
├── tsconfig.json
└── tslint.json

配置流程

建立專案

mkdir my-project && cd my-project
npm init

安裝依賴

npm i -g webpack webpack-dev-server
npm i --save react react-dom @types/react @types/react-dom
npm i --save-dev ts-loader source-map-loader
npm link webpack webpack-dev-server typescript

配置 webpack

/* build/webpack.config.js */
const config = {
  entry: './app/index.tsx',
  output: {
    filename: 'app.bundle.js',
    path: './public',
    publicPath: '/assets'
  },
  devtool: 'source-map',
  resolve: {
    extensions: ['', '.webpack.js', '.web.js', '.ts', '.tsx', '.js']
  },
  module: {
    loaders: [
      {
        test: /\.tsx?$/,
        loader: 'ts-loader'
      }
    ],
    preLoaders: [
      {
        test: /\.js$/,
        loader: 'source-map-loader'
      }
    ]
  },
  devtool: 'eval'
}

module.exports = config

配置 tsconfig

/* tsconfig.json */
{
    "compilerOptions": {
        "outDir": "./public/",
        "sourceMap": true,
        "noImplicitAny": true,
        "module": "commonjs",
        "target": "es5",
        "jsx": "react"
    },
    "files": [
        "./app/index.tsx"
    ]
}

至此,基本配置已經完成,後面建立好一個入口頁面和entry檔案就可以跑起來了:

<!-- build/index.html -->
<!doctype html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no">
    <title>Hello world</title>
    <script src="http://localhost:8080/webpack-dev-server.js"></script>
  </head>
  <body>
    <div id="app"></div>
    <script src="assets/app.bundle.js"></script>
  </body>

/* app/index.tsx */
import * as React from 'react'
import { render } from 'react-dom'

interface IAppProps {}
interface IAppState {}

class App extends React.Component<IAppProps, IAppState> {
  public render(): JSX.Element {
    return (
      <div>
        Hello world
      </div>
    )
  }
}

render(<App />, document.getElementById('app'))

啟動專案

webpack-dev-server --inline --config build/webpack.config.js --content-base build --open

:smirk: :smirk: :smirk: 出來吧神龍

簡單的說明

Webpack 配置

Webpack配置其實是一件很簡單的事情,這也是他具備強大競爭力的重要因素。
從配置檔案中可以看出,裡面無非就是entryoutputloader,如果需要編譯CSS,在loader裡面加一個即可:

npm i --save-dev style-loader css-loader

/* build/webpack.config.js */
const config = {
  // ...
  module: {
    loaders: [
      {
        test: /\.css/,
        loader: 'style-loader!css-loader'
      }
    ],
    // ...
  },
  // ...
}

專案啟動

專案啟動的命令過長,放進 package.jsonscripts 就好了:

/* package.json */

{
  "scripts": {
    "dev": "webpack-dev-server --inline --config build/webpack.config.js --content-base build --open",
  },
}

再執行以下命令試試:

npm run dev

tslint

在開發中如果有個約束程式碼的工具能夠讓程式碼更加優雅,以前用的是 eslint,如果用 .tsx 就不能生效了,這裡推薦使用 tslint

npm i -g tslint
cd my-project
tslint --init

這樣會在專案檔案中建立一個現成的 tslint 配置檔案: tslint.json ,個性化方案可以自行設定。

參考

webpack 新官網
webpack dev server
tsconfig.json 配置文件
style-loader
tslint

原文

原文地址:React + Typescript + Webpack 開發環境配置
文章作者:Heleth
版權宣告:自由轉載-非商用-非衍生-保持署名(創意共享3.0許可證) 轉載請註明出處

相關文章