webpack手动配置React开发环境的步骤


Posted in Javascript onJuly 02, 2018

React提供了create-react-app的快速构建工具, 但作为一个专业的程序员(老司机), 面对复杂的项目, 入门级的构建工具, 是远远不够的, 我们这里从零开始, 用webpack, 手动配置一个独立的React开发环境, 开发环境完成后, 支持自动构建, 自动刷新, sass语法 等功能...

1. 首先用npm初始化环境

mkdir react-webpack-demo
cd react-webpack-demo
npm init -y

webpack手动配置React开发环境的步骤

安装相关软件包

npm install react react-dom webpack webpack-cli webpack-dev-server html-webpack-plugin -D
npm install babel-core babel-loader babel-plugin-transform-runtime -D
npm install babel-preset-env babel-preset-stage-0 babel-preset-react -D
# 识别html转换为jsx语法
npm install babel-preset-react -D

2.添加对html静态文件的支持

  1. 在根目录下新建文件夹src, 在src内加入index.html  index.js
  2. 在根目录下新建webpack.config.js
  3. 在webpack.config.js中加入如下配置
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');

// 负责将html文档虚拟到根目录下
let htmlWebpackPlugin = new HtmlWebpackPlugin({
  // 虚拟的html文件名 index.html
  filename: 'index.html',
  // 虚拟html的模板为 src下的index.html
  template: path.resolve(__dirname, './src/index.html')
})

module.exports = {
  // 开发模式
  mode: 'development',
  // 配置入口文件
  entry: './src/index.js',
  // 出口文件目录为根目录下dist, 输出的文件名为main
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'main.js'
  },
  // 配置开发服务器, 并配置自动刷新
  devServer: {
    // 根目录下dist为基本目录
    contentBase: path.join(__dirname, 'dist'),
    // 自动压缩代码
    compress: true,
    // 服务端口为1208
    port: 1208,
    // 自动打开浏览器
    open: true
  },
  // 装载虚拟目录插件
  plugins: [htmlWebpackPlugin],
}

在package.json内scripts中添加"dev": "webpack-dev-server"

webpack手动配置React开发环境的步骤

在src/index.html中添加内容

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>react-webpack-demo</title>
</head>
<body>
  react-webpack-demo
  <hr>
  高堂明镜悲白发, 朝如青丝暮成雪
</body>
</html>

在命令行内运行npm run dev, 即可看到刚添加的index.html内容

webpack手动配置React开发环境的步骤

接下来我们配置babel对es6语法的支持, 以及对jsx语法的支持

3. 添加对js高级语法的支持

在项目根目录, 添加.babelrc配置文件 presets为语法配置,plugins为插件配置

{
  "presets": ["env", "stage-0", "react"],
  "plugins": ["transform-runtime"]
}

在webpack.config.js中添加module字段, 进行插件loader配置

// webpack.config.js
module.exports = {
  ...
  // 配置loader
  module: {
    // 根据文件后缀匹配规则
    rules: [
      // 配置js/jsx语法解析
      { test: /\.js|jsx$/, use: 'babel-loader', exclude: /node_modules/ }
    ]
  }
};

在src/index.html中加入id为root的div节点

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>react-webpack-demo</title>
</head>
<body>

  react-webpack-demo
  <hr>
  高堂明镜悲白发, 朝如青丝暮成雪
  <hr>
  <div id="root"></div>
</body>
</html>

在src/index.js中加入包含jsx语法的react组件

import React from 'react';
import ReactDOM from 'react-dom';


class Counter extends React.Component {
  constructor(props) {
    super(props);
    this.state = { number: 0 };
    this.decrease = this.decrease.bind(this);
    this.increase = this.increase.bind(this);
  }
  // 加1
  increase() {
    let self = this;
    self.setState({ number: self.state.number + 1 })
  }
  // 减一
  decrease() {
    let self = this;
    self.setState({ number: self.state.number - 1 })

  }


  render() {
    return ( 
      <div>
        <input type = "button" value = "减1"onClick = { this.decrease }/> 
        <span> { this.state.number } </span>
        <input type = "button" value = "加1" onClick = { this.increase }/> 
      </div> )
  }
}

ReactDOM.render(<Counter /> , document.getElementById('root'))

附录: 添加对sass语法的支持(没兴趣可以跳过)

安装sass相关的loader

npm install style-loader css-loader node-sass sass-loader -D

在webpack.config.js内新增规则

// webpack.config.js
module.exports = {
  ...
  module: {
    rules: [{
      test: /\.scss$/,
      use: [
        "style-loader", // creates style nodes from JS strings
        "css-loader", // translates CSS into CommonJS
        "sass-loader" // compiles Sass to CSS
      ]
    }]
  }
};

在src内新增index.scss

$designWidth: 750;
@function px2rem($px) {
 @return $px*10/$designWidth + rem;
}

#root {
  div {
    font-size: px2rem(500);
    display: flex;
    color: #64B587;
    input {
      flex: 1 1 auto;
    }
    span {
      flex: 1 1 auto;
      text-align: center;
    }
  }
}

在index.js中新增import index.scss

最终效果:

webpack手动配置React开发环境的步骤

文中相关资源链接:链接: https://pan.baidu.com/s/10PYXo_WoIScn-IFRdtuc5w 密码: td78

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
node.js中的dns.getServers方法使用说明
Dec 08 Javascript
JavaScript人脸识别技术及脸部识别JavaScript类库Tracking.js
Sep 14 Javascript
jQuery通过写入cookie实现更换网页背景的方法
Apr 15 Javascript
jQuery实现产品对比功能附源码下载
Aug 09 Javascript
weUI应用之JS常用信息提示弹层的封装
Nov 21 Javascript
javascript实现秒表计时器的制作方法
Feb 16 Javascript
vue动态生成dom并且自动绑定事件
Apr 19 Javascript
微信小程序实现多个按钮toggle功能的实例
Jun 13 Javascript
你可能不知道的JSON.stringify()详解
Aug 17 Javascript
ReactJs实现树形结构的数据显示的组件的示例
Aug 18 Javascript
jQuery实现input输入框获取焦点与失去焦点时提示的消失与显示功能示例
May 27 jQuery
vue 路由meta 设置导航隐藏与显示功能的示例代码
Sep 04 Javascript
Angularjs中的$apply及优化使用详解
Jul 02 #Javascript
angularjs 的数据绑定实现原理
Jul 02 #Javascript
vue 解决addRoutes动态添加路由后刷新失效问题
Jul 02 #Javascript
vue中的数据绑定原理的实现
Jul 02 #Javascript
Vue实现双向绑定的原理以及响应式数据的方法
Jul 02 #Javascript
jsonp跨域获取数据的基础教程
Jul 01 #Javascript
vue + webpack如何绕过QQ音乐接口对host的验证详解
Jul 01 #Javascript
You might like
第二节--PHP5 的对象模型
2006/11/16 PHP
php修改指定文件后缀的方法
2014/09/11 PHP
php简单判断两个字符串是否相等的方法
2015/07/13 PHP
Thinkphp批量更新数据的方法汇总
2016/06/29 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
2016/09/11 PHP
Laravel解决nesting level错误和隐藏index.php的问题
2019/10/12 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
jquery form表单提交插件asp.net后台中文解码
2010/06/12 Javascript
jquery之empty()与remove()区别说明
2010/09/10 Javascript
jQuery AjaxUpload 上传图片代码
2016/02/02 Javascript
javascript动态获取登录时间和在线时长
2016/02/25 Javascript
JavaScript数组的定义及数字操作技巧
2016/06/06 Javascript
前端js实现文件的断点续传 后端PHP文件接收
2016/10/14 Javascript
js querySelector() 使用方法
2016/12/21 Javascript
深入解析ES6中的promise
2018/11/08 Javascript
微信小程序实现上拉加载功能
2019/11/20 Javascript
python快速排序代码实例
2013/11/21 Python
Python处理文本换行符实例代码
2018/02/03 Python
Python 读写文件的操作代码
2018/09/20 Python
python中的tcp示例详解
2018/12/09 Python
python 循环数据赋值实例
2019/12/02 Python
.dcm格式文件软件读取及python处理详解
2020/01/16 Python
苹果Mac升级:MacSales.com
2017/11/20 全球购物
adidas官方旗舰店:德国运动用品制造商
2017/11/25 全球购物
Under Armour安德玛德国官网:美国高端运动科技品牌
2019/03/09 全球购物
英国排名第一的宠物店:PetPlanet
2020/02/02 全球购物
创业计划书怎样才能打动风投
2014/01/01 职场文书
英语教学随笔感言
2014/02/20 职场文书
护理专业自荐信范文
2014/02/26 职场文书
小学生寒假家长评语
2014/04/16 职场文书
祖国在我心中演讲稿450字
2014/09/05 职场文书
2014年督导工作总结
2014/11/19 职场文书
房产分割协议书范文
2014/11/21 职场文书
党员干部廉洁自律承诺书
2015/04/28 职场文书
大学生青年志愿者活动总结
2015/05/06 职场文书
超详细教你怎么升级Mysql的版本
2021/05/19 MySQL