react+webpack环境搭建
首先安装nodejs,安装nodejs之后,可使用淘宝镜像:
(1)npm config set registry "http://registry.npm.taobao.org"
- 安装nodejs之后,安装webpack:
- npm install webpack -g 全局安装
- npm install webpack --save-dev 局部安装
- 目录结构如图:
- 创建项目:
- 创建一个项目的根目录:mkdir react-hello-world
- cd react-hello-world
- 使用npm init 初始化,生成package.json文件:
- npm init 自定义创建package.json
- npm init -yes 自动创建默认的package.json文件
- 项目创建好了,可以添加依赖以及插件
- 局部安装webpack :npm install webpack --save-dev
- npm install webpack-dev-server --save-dev
- 安装react,--save用于将包添加至package.json文件:npm install react react-dom --save-dev
- 安装babel,babel是webpack需要的加速器,没有的话,会使jsx和es5语法报错;npm intall babel-loader babel-preset-es2015 babel-preset-react --save-dev;其中有可能会报错,那么就将babel-loader 改为 babel-core;然后执行npm intall(这一步可能要重复多次);
- webpack.config.js配置:var path = require('path');
var webpack = require('webpack');module.exports = {entry: ['webpack/hot/dev-server', path.resolve(__dirname, './app/main.js')],output: {path: path.resolve(__dirname, './build'),filename: 'bundle.js'},devServer: {inline: true,port: 8181},module: {loaders: [{test: /\.js?$/,exclude: /(node_modules|bower_components)/,loader: 'babel',query: {presets: ['es2015', 'react']}}]},plugins: [new webpack.HotModuleReplacementPlugin()]};- 执行 npm install webpack-dev-server --save-dev
- package.json文件配置:{
"name": "react-app","version": "1.0.0","description": "react-webpack-stu","main": "index.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1","build": "webpack","dev": "webpack-dev-server --devtool eval --progress --colors --content-base build"},"author": "","license": "ISC","devDependencies": {"babel": "^6.5.2","babel-core": "^6.22.1","babel-loader": "^6.2.10","babel-preset-es2015": "^6.22.0","babel-preset-react": "^6.22.0","react": "^15.3.0","react-dom": "^15.3.0","webpack": "^1.13.1","webpack-dev-server": "^1.14.1"}} 这里有一点提醒大家,package.json中name不能跟我们的模块和项目文件目录同名- 项目代码编写:
- index.html======>:<!DOCTYPE html>
<html><head lang="en"><meta charset="UTF-8"><title>React Test</title></head><body><div id="content"></div><script src="./bundle.js"></script></body></html>- main.js=======> :import React from 'react';
import ReactDOM from 'react-dom';import AppComponent from './components/Tab1';ReactDOM.render(<AppComponent ><span>lalaal</span><span>hahh</span></AppComponent > , document.getElementById('content'));- Tab1.js ======>:import React,{Component} from 'react';
import ReactDOM from 'react-dom';class Tab1 extends React.Component{constructor(props) {super(props);this.state = {name:'true'};}btnClick() {this.setState({name:!this.state.name});console.log('es6语法中的点击事件触发了');}render() {return <ol>{React.Children.map(this.props.children, (child) => {return <li>{child}</li>})}</ol>;}}Tab1.propTypes={title: React.PropTypes.string,}Tab1.defaultProps={title:'133'};//设置默认属性export default Tab1;- bundle.js
- 编码结束:执行:npm run dev;直接访问http://loacalhost:8181/index.html
- 结果: