進階操作

近年來隨著 Node.js 的發展及 Open Source 社群的貢獻,有越來越多好用且方便的開發工具:

  • 套件工具:npm、bower...
  • 任務工具:gulp、grunt...
  • 打包工具:webpack、browserify...
  • 框架工具:yeoman...
  • 其他:express、browsersync...

善加使用這些工具可加速整體開發進度。

以下將以 webpack 為例,介紹如何使用打包工具來加速 React 的開發。

webpack

webpack 是個打包工具,並且支援各種類型的資源載入器(loader),可用來載入 javascript、css、html、image…等資源,並封裝成單一javascript檔,透過載入器結合預處理器 (preprocessor) 的輔助,一些特定類型資源可在封裝過程中預先被編譯及轉換。

babel

babel 是一個 Javascript 的編譯器,用來編譯新一代的 ECMAScript 語法及 JSX 語法。

使用方式

準備

透過 npm 指令安裝 react、webpack、webpack-dev-server、babel-loader

npm install webpack -g
npm install webpack webpack-dev-server babel-loader --save-dev
npm install react --save

資料夾目錄如下:

  • /app
    • main.js
    • HelloWorld.js
  • /build
    • index.html
  • package.json
  • webpack.config.js

main.js

import React from 'react';
import HelloWorld from './HelloWorld.js'

setInterval(() => {
    React.render(
        <HelloWorld date={new Date()} />,
        document.getElementById('example')
    );
}, 500);

HelloWorld.js

import React from 'react';

export default React.createClass({
    render: function() {
        return (
            <p>
                Hello, <input type="text" placeholder="Your name here" />!
                It is {this.props.date.toTimeString()}
            </p>
        );
    }
});

webpack.config.js

var path = require('path');

module.exports = {
    entry: [
        "webpack/hot/dev-server",
        path.resolve(__dirname, 'app/main.js')
    ],

    output: {
        path: path.resolve(__dirname, 'build'),
        filename: 'bundle.js'
    },

    module: {
        loaders: [{
            test: /\.js$/,
            loaders: ['babel']
        }]
    }
};

打包的進入點是 app/main.js,透過 webpack 打包後會產生 build.js。
webpack/hot/dev-server 是開發時用來執行 live-reload 功能。

index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8" />
    <title>Hello React</title>
</head>
<body>
<div id="example"></div>
<script src="http://localhost:8080/webpack-dev-server.js"></script>
<script src="bundle.js"></script>
</body>
</html>

package.json

{
  "name": "react-test",
  "version": "0.0.0",
  "description": "react test",
  "scripts": {
    "build": "webpack",
    "dev": "webpack-dev-server --content-base build/ --hot"
  },
  "devDependencies": {
    "babel-core": "^5.8.3",
    "babel-loader": "^5.3.2",
    "webpack": "^1.10.3",
    "webpack-dev-server": "^1.10.1"
  },
  "dependencies": {
    "react": "^0.13.3"
  }
}

npm run dev 可執行 scripts 中的 dev 指令。
npm run build 可執行 scripts 中的 build 指令

webacpk 還提供許許多多開發時需要的 loader 及 plugin,詳細請參閱官網文件。連結

其他:
react-starter-kit
es6features
es7features
建立react webpack 工具包
使用 Webpack 建立 React 專案開發環境