# blog_beginner-learn-react-webpack
**Repository Path**: ellipse/blog_beginner-learn-react-webpack
## Basic Information
- **Project Name**: blog_beginner-learn-react-webpack
- **Description**: 一步一脚印:新手学React-Webpack
http://misty.gitcafe.io/blog/beginner-learn-react-webpack/
- **Primary Language**: JavaScript
- **License**: EPL-1.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2015-12-06
- **Last Updated**: 2020-12-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 一步一脚印:新手学React
[Git repo](http://git.oschina.net/ellipse/blog_beginner-learn-react-webpack)
## 1. 安装nodejs
## 2. 安装webpack(全局)
> npm install webpack -g
这样就可以在任何位置执行`webpack`命令
## 3. 初始化项目
在项目根目录下打开终端
> npm init
此时会在根目录自动生成package.json文件
在项目中安装webpack
> npm install webpack --save-dev
## 4. 创建基础代码
目录结构为
```
root
/src
/main.js
/webpack.config.js
/package.json
```
```javascript
// main.js
console.log("Hello World");
```
```javascript
// webpack.config.js
var path = require('path')
module.exports = {
entry: {
app: path.resolve(__dirname, 'src/main.js')
},
output: {
path: path.resolve(__dirname, 'build'),
filename: '[name].js'
}
}
```
在终端运行`webpack`,自动生成`./build/app.js`。
## 5. 增加jsx支持
> npm install babel-core babel-loader babel-preset-es2015 babel-preset-react --save-dev
新建文件`./src/main.jsx`
```javascript
(function(){
Hello World
;
})();
```
修改`webpack.config.js`
```javascript
var path = require('path')
module.exports = {
entry: {
app: path.resolve(__dirname, 'src/main.js'),
jsx: path.resolve(__dirname, 'src/main.jsx') // New
},
output: {
path: path.resolve(__dirname, 'build'),
filename: '[name].js'
},
module: { // New
loaders: [{
test: /\.jsx$/,
loader: 'babel',
query: {
presets: ['react', 'es2015']
}
}]
}
}
```
## 6. 增加cjsx支持(使用coffeescript)
> npm install cjsx-loader coffee-loader coffee-script --save-dev
新建文件`./src/main.cjsx`
```coffeescript
do -> Hello cjsx
```
修改`webpack.config.js`
```javascript
var path = require('path')
module.exports = {
entry: {
app: path.resolve(__dirname, 'src/main.js'),
jsx: path.resolve(__dirname, 'src/main.jsx'),
cjsx: path.resolve(__dirname, 'src/main.cjsx')
},
output: {
path: path.resolve(__dirname, 'build'),
filename: '[name].js'
},
module: {
loaders: [{
test: /\.jsx$/,
loader: 'babel',
query: {
presets: ['react', 'es2015']
}
}, {
test: /\.cjsx$/,
loader: 'coffee!cjsx'
}]
}
}
```
执行webpack
## 7. 增加ReactJS
> npm install react react-dom --save
新建文件`./src/react.cjsx`
```coffeescript
React = require 'react'
ReactDOM = require 'react-dom'
Comp1 = React.createClass
render: -> Hello ReactJS
ReactDOM.render , document.body
```
修改`webpack.config.js`
```javascript
var path = require('path')
module.exports = {
entry: {
app: path.resolve(__dirname, 'src/main.js'),
jsx: path.resolve(__dirname, 'src/main.jsx'),
cjsx: path.resolve(__dirname, 'src/main.cjsx'),
react: path.resolve(__dirname, 'src/react.cjsx')
},
output: {
path: path.resolve(__dirname, 'build'),
filename: '[name].js'
},
module: {
loaders: [{
test: /\.jsx$/,
loader: 'babel',
query: {
presets: ['react', 'es2015']
}
}, {
test: /\.cjsx$/,
loader: 'coffee!cjsx'
}]
}
}
```
执行webpack
## 8. 增加material-ui
> npm install material-ui --save
> npm install react-tap-event-plugin --save
新建文件`src/mui.cjsx`
```coffeescript
# src/mui.cjsx
React = require 'react'
ReactDOM = require 'react-dom'
RaisedButton = require 'material-ui/lib/raised-button'
Comp = React.createClass
render: ->
ReactDOM.render , document.getElementById('root')
```
运行`webpack`编译生成`build/mui.js`
新建文件`build/mui.html`
```html
Material-ui Sample
```
用浏览器打开`build/mui.html`,一个漂亮的Material Design风格按钮展现在眼前,大功告成。
## 9. 常见问题
___
### 未找到 npm/webpack 命令
检查一下PATH路径下有没有这两个程序,将程序所在的目录加入PATH。
加入PATH地方法:
> Windows
推荐一个工具RapidEE,很好用
> Linux
```shell
$ sudo gedit /etc/profile
// 在打开文件的最后一行加入
export PATH="/path/to/node-linux/bin":$PATH
```
## 10. 注意事项
- 不要用jsx-loader
导入react-dom时使用jsx-loader编译会导致失败,原因不明。