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 相关文章推荐
JavaScript判断两种格式的输入日期的正确性的代码
Mar 25 Javascript
JavaScript中继承的一些示例方法与属性参考
Aug 07 Javascript
jQuery 1.5.1 发布,全面支持IE9 修复大量bug
Feb 26 Javascript
当前流行的JavaScript代码风格指南
Sep 10 Javascript
百度地图自定义控件分享
Mar 04 Javascript
JS简单实现动画弹出层效果
May 05 Javascript
JavaScript实现同一个页面打开多张图片
Dec 29 Javascript
深究AngularJS之ui-router详解
Jun 13 Javascript
vue移动端UI框架实现QQ侧边菜单组件
Mar 09 Javascript
mpvue开发音频类小程序踩坑和建议详解
Mar 12 Javascript
详解小程序设置缓存并且不覆盖原有数据
Apr 15 Javascript
Vue实现下拉加载更多
May 09 Vue.js
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
CodeIgniter php mvc框架 中国网站
2008/05/26 PHP
PHP下一个非常全面获取图象信息的函数
2008/11/20 PHP
PHP简单操作MongoDB的方法(安装及增删改查)
2016/05/26 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
2017/08/18 PHP
PHP的mysqli_select_db()函数讲解
2019/01/23 PHP
PHP的PDO错误与错误处理
2019/01/27 PHP
关于laravel模板中生成URL的几种模式总结
2019/10/18 PHP
jquery 事件执行检测代码
2009/12/09 Javascript
在JavaScript中如何解决用execCommand(
2015/10/19 Javascript
基于Jquery实现万圣节快乐特效
2015/11/01 Javascript
使用nodejs下载风景壁纸
2017/02/05 NodeJs
Vue2递归组件实现树形菜单
2017/04/10 Javascript
JavaScript实现计数器基础方法
2017/10/10 Javascript
JavaScript模块详解
2017/12/18 Javascript
微信小程序 腾讯地图显示偏差问题解决
2019/07/27 Javascript
[53:49]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python中断言Assertion的一些改进方案
2016/10/27 Python
python利用有道翻译实现&quot;语言翻译器&quot;的功能实例
2017/11/14 Python
Python GUI编程学习笔记之tkinter事件绑定操作详解
2020/03/30 Python
在keras下实现多个模型的融合方式
2020/05/23 Python
调用HTML5的Canvas API绘制图形的快速入门指南
2016/06/17 HTML / CSS
德国网上花店:Valentins
2018/08/15 全球购物
联想法国官方网站:Lenovo法国
2018/10/18 全球购物
MAC彩妆澳洲官网:M·A·C AU
2021/01/17 全球购物
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
弘扬雷锋精神活动演讲稿
2014/03/04 职场文书
租房协议书范本
2014/04/09 职场文书
股东协议书范本
2014/04/14 职场文书
消防安全责任书
2014/04/14 职场文书
桥梁工程专业求职信
2014/04/21 职场文书
新书发布会策划方案
2014/06/09 职场文书
安全生产培训心得体会
2016/01/18 职场文书
高三数学教学反思
2016/02/18 职场文书
接收函
2019/04/22 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书
CentOS安装Nginx并部署vue
2022/04/12 Servers