最近项目用到react,其实前年我就开始接触react,时光匆匆,一直没有时间整理下来(太懒啦)!现在再次用到,称工做间隙,对全家桶作一次总结,项目源码地址。废话很少说,上码。javascript
mkdir react-Buckets npm init
npm install --save-dev webpack
touch webpack.dev.config.js
var path=require('path'); module.exports={ // 入口文件指向src/index.js entry:path.join(__dirname,'src/index.js'), //打包后的文件到当前目录下的dist文件夹,名为bundle.js output:{ path:path.join(__dirname,'./dist'), filename:'bundle.js' } };
mkdir src && cd src touch index.js
document.getElementById('app').innerHTML='This is my React!';
webpack --config webpack.dev.config.js
效果如图
html
touch ./dist/index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <div id="app"></div> <script type="text/javascript" src="./bundle.js"></script> </body> </html>
"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "build":"webpack --config webpack.dev.config.js" },
npm run build
平时你们在项目中无论用的vue仍是react,应该大多都开始用ES6或ES7的语法了吧。想必都了解若是想让浏览器能够直接识别,基本都会选用babel插件进行编译转换。下面为你们一一介绍:vue
npm install --save-dev babel-core babel-loader babel-preset-es2015 babel-preset-react babel-preset-stage-0
安装好后,添加配置文件java
touch .babelrc
打开文件,对babel进行配置,注:此处stage-0是包含stage-1,stage-2,stage-3react
{ "presets":[ "es2015", "react", "stage-0" ], "plugins":[] }
modle:{ rules:[{ test:/\.js$/, use:['babel-loader?cacheDirectory=true'], include:path.join(__dirname,'src') }] }
//使用ES6的箭头函数 var babeltest=()=> console.log('This is Babel Test!'); babeltest();
npm install --save react react-dom
import React from 'react'; import ReactDom from 'react-dom'; ReactDom.render( <div>First React!</div>, document.getElementById('app') )
cd src mkdir components && cd components mkdir Hello && cd Hello touch Hello.js
import React, {Component} from 'react'; export default class Hello extends Component{ render(){ return( <div>Hello React!</div> ) } }
import React from 'react'; import ReactDom from 'react-dom'; import Hello from './components/Hello/Hello'; ReactDom.render( <Hello/>, document.getElementById('app'); )
npm install --save react-router-dom cd src mkdir router && touch router/router.js
import React from 'react'; import {BrowserRoter as Router,Route,Swith,Link} from 'react-router-dom'; import Home from '../pages/Home/Home'; import Page1 from '../pages/About/About'; const getRouter=()=>( <Router> <div> <ul> <li><Link to="/">首页</Link></li> <li><Link to="/about">About</Link></li> </ul> <Switch> <Route exact path="/" componen={Home} /> <Route path="/about" component={About}/> </Switch> </div> </Router> ); export default getRouter;
cd src mkdir pages && cd pages mkdir Home && touch Home/Home.js mkdet About && touch About/About.js
import React,{Component} from 'react'; export default class Home extends Component{ render(){ return( <div> <h1>欢迎来到个人网站</h1> <p>这是一个首页</p> </div> ) } }
import React,{Component} from 'react'; export default class About extends Component{ render(){ return( <div> <h2>关于咱们</h2> <p>自定义react全家桶</p> </div> ) } }
import React from 'react'; import ReactDom from 'react-dom'; import getRouter from './router/router'; ReactDom.render( getRouter(), document.getElementById('app') )
npm run build
咱们发现页面是出来了,可是点击切换不了路由,缘由是由于咱们须要配置一个web服务器来指向index.html,在这里咱们来配置一个webpack-dev-server。webpack
webpack-dev-server是咱们作先后端分离时,常会用到的依赖,它是一个小型的静态文件服务器,能够为webpack打包后生成的文件提供web服务器功能。git
npm install webpack-dev-server@2 --save-dev
devServer:{ //将服务器根目录指向打包后的dist文件,默认是指向项目的根目录 contentBase:path.join(__dirname,'./dist'); }
webpack-dev-server --config webpack.dev.config.js
打开http://localhost:8080
github
8080是默认端口,可更改配置。一样,咱们把编译命令优化下:web
"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "build": "webpack --config webpack.dev.config.js", "start": "webpack-dev-server --config webpack.dev.config.js --color --progress" },
proxy:{ "/api":"htpp://localhost:9000" }