详解如何用webpack4从零开始构建react开发环境


Posted in Javascript onJanuary 27, 2019

项目文件准备:

执行npm init,然后创建如下图所示的文件。

详解如何用webpack4从零开始构建react开发环境

在index.html里面添加

<!DOCTYPE html>
<html>
 <head>
  <title>The Minimal React Webpack Babel Setup</title>
 </head>
 <body>
  <div id="app"></div>
  <script src="./bundle.js"></script>
 </body>
</html>

在webpack.config.js里面添加

module.exports = {
 entry: './src/index.js',
 output: {
  path: __dirname + '/dist',
  publicPath: '/',
  filename: 'bundle.js'
 },
 devServer: {
  contentBase: './dist'
 }
};

在package.json里面添加

"scripts": {
  "start": "webpack-dev-server --config ./webpack.config.js --mode development"
 },

这样,当执行npm start的时候,就会使用webpack-dev-server把index.js相关文件打包,生成bundle.js,这时候浏览器会打开一个窗口,执行index.html(contentBase里面定义了),又因为index.html里面引入了bundle.js,就可以把压缩后的js文件执行起来。当然引入bundle.js这一步可以由我们强大的html-webpack-plugin完成。

安装依赖

npm install --save-dev webpack webpack-dev-server webpack-cli
npm install --save-dev @babel/core @babel/preset-env
npm install --save-dev babel-loader
npm install --save-dev @babel/preset-react

配置babel

在根目录下新建.babelrc文件,然后添加

{
 "presets": [
  "@babel/preset-env",
  "@babel/preset-react"
 ]
}

在webpack.config.js里面添加babel-loader配置

module.exports = {
 ...
 module: {
  rules: [
   {
    test: /\.(js|jsx)$/,
    exclude: /node_modules/,
    use: ['babel-loader']
   }
  ]
 },
 resolve: {
  extensions: ['*', '.js', '.jsx']
 }
 ...
};

引入react

npm install --save react react-dom

修改index.js: 这个ReactDOM.render就是把元素渲染到index.html里面id为'app'的元素厦门。在实际开发中,我们会把app.js渲染到这里,然后在app.js里面写redux,react-router构成的页面的起点。

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

const title = 'My Minimal React Webpack Babel Setup';

ReactDOM.render(
 <div>{title}</div>,
 document.getElementById('app')
);

配置react热加载

npm install --save-dev react-hot-loader

webpack.config.js

const webpack = require('webpack');

module.exports = {
 ...
 plugins: [
  new webpack.HotModuleReplacementPlugin()
 ],
 devServer: {
  contentBase: './dist',
  hot: true
 }
 ...
};

修改index.js

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

const title = 'My Minimal React Webpack Babel Setup';

ReactDOM.render(
 <div>{title}</div>,
 document.getElementById('app')
);

+ module.hot.accept();

这个时候执行npm start,就可以在浏览器访问http://localhost:8080看到Index.html里面的内容啦啦。参考链接:
https://www.robinwieruch.de/minimal-react-webpack-babel-setup/#babel-react-setup

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

Javascript 相关文章推荐
jQuery 通过事件委派一次绑定多种事件,以减少事件冗余
Jun 30 Javascript
JS继承 笔记
Jul 13 Javascript
网页编辑器ckeditor和ckfinder配置步骤分享
May 24 Javascript
jQuery简单tab切换效果实现方法
Apr 08 Javascript
jQuery $.each遍历对象、数组用法实例
Apr 16 Javascript
BootStrapTable 单选及取值的实现方法
Jan 10 Javascript
使用javascript做在线算法编程
May 25 Javascript
angular4中引入echarts的方法示例
Jan 29 Javascript
webpack4之如何编写loader的方法步骤
Jun 06 Javascript
深入解析koa之异步回调处理
Jun 17 Javascript
亲自动手实现vue日历控件
Jun 26 Javascript
JS addEventListener()和attachEvent()方法实现注册事件
Jan 11 Javascript
vue中轮训器的使用
Jan 27 #Javascript
Vue组件教程之Toast(Vue.extend 方式)详解
Jan 27 #Javascript
JavaScript变量提升和严格模式实例分析
Jan 27 #Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
Jan 27 #Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
Jan 27 #Javascript
原生JS检测CSS3动画是否结束的方法详解
Jan 27 #Javascript
原生JS实现的跳一跳小游戏完整实例
Jan 27 #Javascript
You might like
eWebEditor v3.8 商业完整版 (PHP)
2006/12/06 PHP
php设计模式 State (状态模式)
2011/06/26 PHP
php foreach正序倒序输出示例代码
2014/07/01 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
2019/08/09 PHP
对象的类型:本地对象(1)
2006/12/29 Javascript
[原创]js获取数组任意个不重复的随机数组元素
2010/03/15 Javascript
instanceof和typeof运算符的区别详解
2014/01/06 Javascript
控制input输入框中提示信息的显示和隐藏的方法
2014/02/12 Javascript
浅谈setTimeout 与 setInterval
2015/06/23 Javascript
js实现温度计时间样式代码分享
2015/08/21 Javascript
jQuery滚动加载图片实现原理
2015/12/14 Javascript
jquery仿京东侧边栏导航效果
2017/03/02 Javascript
微信小程序 下拉菜单的实现
2017/04/06 Javascript
ES6新特性七:数组的扩充详解
2017/04/21 Javascript
Bootstrap实现基于carousel.js框架的轮播图效果
2017/05/02 Javascript
JS中cookie的使用及缺点讲解
2017/05/13 Javascript
vue-cli构建项目使用 less的方法
2017/10/04 Javascript
使用vue实现简单键盘的示例(支持移动端和pc端)
2017/12/25 Javascript
JavaScript轮播停留效果的实现思路
2018/05/24 Javascript
Vue 中使用富文本编译器wangEditor3的方法
2019/09/26 Javascript
electron+vue实现div contenteditable截图功能
2020/01/07 Javascript
python下os模块强大的重命名方法renames详解
2017/03/07 Python
使用python进行广告点击率的预测的实现
2019/07/04 Python
OpenCV 模板匹配
2019/07/10 Python
Python企业编码生成系统总体系统设计概述
2019/07/26 Python
python3实现带多张图片、附件的邮件发送
2019/08/10 Python
python创建n行m列数组示例
2019/12/02 Python
OpenCV Python实现图像指定区域裁剪
2021/03/12 Python
css3动画事件—webkitAnimationEnd与计时器time事件
2013/01/31 HTML / CSS
HTML5图片层叠的实现示例
2020/07/07 HTML / CSS
精通CAD能手自荐书
2014/01/31 职场文书
爱心活动计划书
2014/04/26 职场文书
国际贸易专业自荐信
2014/06/10 职场文书
2015年控辍保学工作总结
2015/05/18 职场文书
南京大屠杀观后感
2015/06/02 职场文书
青年联谊会致辞
2015/07/31 职场文书