1. 默认已经安装了nodejs,并输入:npm init 根据提示输入内容并 创建 package.json
2. 创建项目 reactapp
~~~
reactapp
|--app
|--components
|--productBox.jsx
|--main.jsx
|--build
|--index.html
|--bundle.js (该文件是webpack打包后生成的)
|--webpack.config.js
~~~
安装以下依赖包:
~~~
npm install react --save-dev
npm install webpack webpack-dev-server --save-dev
npm install babel-loader babel-core --save-dev
npm install css-loader less-loader style-loader --save-dev
npm install url-loader --save-dev
npm install react-router --save-dev
npm install redux react-redux --save-dev // 可选
~~~
3. webpack.config.js文件内容如下:
~~~
var path = require('path');
module.exports = {
entry: ['webpack-dev-server/client?http://localhost:8080', path.resolve(__dirname, './app/main.jsx')],
output: {
path: path.resolve(__dirname, './build'),
filename: 'bundle.js',
},
module: {
loaders: [{
test: /\.jsx?$/,
loader: 'babel-loader',
exclude: /node_modules/,
query: {
presets: ['es2015','react']
}
}, {
test: /\.css$/,
loader: "style-loader!css-loader"
}, {
test: /\.less$/,
loader: 'style!css!less'
},{
test: /\.(png|jpg|gif)$/,
loader: 'url-loader?limit=8192' // 这里的 limit=8192 表示用 base64 编码 <= 8K 的图像
}]
},
};
~~~
4. package.json文件内容如下:
~~~
{
"name": "wp211_app",
"version": "1.0.0",
"description": "",
"main": "index.jsx",
"dependencies": {
"react": "^15.4.2",
"webpack-dev-server": "^2.3.0"
},
"devDependencies": {
"babel-core": "^6.23.1",
"babel-loader": "^6.2.10",
"babel-preset-es2015": "^6.22.0",
"babel-preset-react": "^6.23.0",
"css-loader": "^0.26.1",
"less-loader": "^2.2.3",
"react-dom": "^15.4.2",
"style-loader": "^0.13.1",
"url-loader": "^0.5.7",
"webpack": "^2.2.1",
"webpack-dev-server": "^2.3.0"
},
"scripts": {
"build": "webpack",
"dev": "webpack-dev-server --devtool eval --progress --colors --content-base build"
},
"author": "",
"license": "ISC"
}
~~~
5. main.jsx 、 productBox.jsx 、 index.html 三文件内容分别如下:
main.jsx:
~~~
import React from 'react'
import { render } from 'react-dom';
import AppComponent from './components/productBox.jsx';
render(<AppComponent />, document.getElementById('content'));
~~~
productBox.jsx:
~~~
var React = require('react');
import { render } from 'react-dom';
var ProductBox = React.createClass({
render: function () {
return (
<div className="productBox">
Hello World!
</div>
);
}
});
module.exports = ProductBox;
~~~
index.html:
~~~
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>React Test</title>
</head>
<body>
<div id="content"></div>
<script src="http://localhost:8080/webpack-dev-server.js"></script>
<script src="./bundle.js"></script>
</body>
</html>
~~~
6. 运行测试:
~~~
npm run dev
~~~
浏览器访问: http://localhost:8080
~~~
Hello World!
~~~
说明: 编辑器更新保存后,浏览器会自动刷新!