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 相关文章推荐
JS对URL字符串进行编码/解码分析
Oct 25 Javascript
javascript四舍五入函数代码分享(保留后几位)
Dec 10 Javascript
jquery复选框checkbox实现删除前判断
Apr 20 Javascript
Javascript实现简单二级下拉菜单实例
Jun 15 Javascript
JavaScript实现三阶幻方算法谜题解答
Dec 29 Javascript
jquery实现相册一下滑动两次的方法
Feb 09 Javascript
分析js闭包引起的事件注册问题
Mar 29 Javascript
jquery 动态增加,减少input表单的简单方法(必看)
Oct 12 Javascript
性能优化之代码优化页面加载速度
Mar 01 Javascript
vue实现登陆登出的实现示例
Sep 15 Javascript
在JavaScript中实现链式调用的实现
Dec 24 Javascript
vue使用map代替Aarry数组循环遍历的方法
Apr 30 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
php strlen mb_strlen计算中英文混排字符串长度
2009/07/10 PHP
PHP防CC攻击实现代码
2011/12/29 PHP
php实现水仙花数示例分享
2014/04/03 PHP
php生成xml时添加CDATA标签的方法
2014/10/17 PHP
ThinkPHP3.1.x修改成功与失败跳转页面的方法
2017/09/29 PHP
Swoole4.4协程抢占式调度器详解
2019/05/23 PHP
laravel 字段格式化 modle 字段类型转换方法
2019/09/30 PHP
关于laravel模板中生成URL的几种模式总结
2019/10/18 PHP
laravel框架实现后台登录、退出功能示例
2019/10/31 PHP
23个Javascript弹出窗口特效整理
2011/02/25 Javascript
JS 控件事件小结
2012/10/31 Javascript
jquery统计输入文字的个数并对其进行判断
2014/01/07 Javascript
jQuery dataTables与jQuery UI 对话框dialog的使用教程
2016/09/02 Javascript
js实现图片懒加载效果
2017/07/17 Javascript
详解使用angular的HttpClient搭配rxjs
2017/09/01 Javascript
JS监控关闭浏览器操作的实例详解
2017/09/12 Javascript
JS实现非首屏图片延迟加载的示例
2018/01/06 Javascript
vue 插件的方法代码详解
2019/06/06 Javascript
JS实现的字符串数组去重功能小结
2019/06/17 Javascript
iSlider手机端图片滑动切换插件使用详解
2019/12/24 Javascript
使用Python的判断语句模拟三目运算
2015/04/24 Python
Python Requests安装与简单运用
2016/04/07 Python
详解移动端HTML5音频与视频问题及解决方案
2018/08/22 HTML / CSS
div或img图片高度随宽度自适应的方法
2020/02/06 HTML / CSS
结构和类有什么异同
2012/07/16 面试题
英文版餐饮业求职信
2013/10/18 职场文书
建筑装饰学院室内设计专业个人自我评价
2013/12/07 职场文书
母婴店促销方案
2014/03/05 职场文书
班级学习计划书
2014/04/27 职场文书
环保建议书100字
2014/05/14 职场文书
预防传染病方案
2014/06/14 职场文书
2014年学习部工作总结
2014/11/12 职场文书
委托书格式范文
2015/01/28 职场文书
司机岗位职责范本
2015/04/10 职场文书
中学教师读书笔记
2015/07/01 职场文书
MySQL详细讲解变量variables的用法
2022/06/21 MySQL