详解如何用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 相关文章推荐
JavaScript Undefined,Null类型和NaN值区别
Oct 22 Javascript
js二级地域选择的实现方法
Jun 17 Javascript
JS跨域问题详解
Nov 25 Javascript
AngularJS入门知识之MVW类框架的编程思想探讨
Dec 08 Javascript
jQuery 常用代码集锦(必看篇)
May 16 Javascript
js改变透明度实现轮播图的算法
Aug 24 Javascript
jquery对象和DOM对象的相互转换详解
Oct 18 Javascript
jquery+css实现简单的图片轮播效果
Aug 07 jQuery
JS实现DOM删除节点操作示例
Apr 04 Javascript
浅谈vue引用静态资源需要注意的事项
Sep 28 Javascript
jQuery实现ajax的嵌套请求案例分析
Feb 16 jQuery
JavaScript原生数组函数实例汇总
Oct 14 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
PHP与已存在的Java应用程序集成
2006/10/09 PHP
php中随机显示图片的函数代码
2011/06/23 PHP
niceTitle 基于jquery的超链接提示插件
2010/05/31 Javascript
从零开始学习jQuery (六) jquery中的AJAX使用
2011/02/23 Javascript
基于jquery完美拖拽,可返回拖动轨迹
2012/03/29 Javascript
JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
2013/11/20 Javascript
JS+CSS实现Li列表隔行换色效果的方法
2015/02/16 Javascript
JavaScript实现广告的关闭与显示效果实例
2015/07/02 Javascript
JavaScript中将数组进行合并的基本方法讲解
2016/03/07 Javascript
js实现的简单图片浮动效果完整实例
2016/05/10 Javascript
基于bootstrap实现广告轮播带图片和文字效果
2016/07/22 Javascript
js实现简单的网页换肤效果
2017/01/18 Javascript
JS批量替换内容中关键词为超链接
2017/02/20 Javascript
在vue中使用css modules替代scroped的方法
2018/03/10 Javascript
webpack 如何解析代码模块路径的实现
2019/09/04 Javascript
mpvue实现左侧导航与右侧内容的联动
2019/10/21 Javascript
extjs图形绘制之饼图实现方法分析
2020/03/06 Javascript
angular中的post请求处理示例详解
2020/06/30 Javascript
Vue自定义多选组件使用详解
2020/09/08 Javascript
[06:01]刀塔次级联赛top10第一期
2014/11/07 DOTA
[01:59]翻天覆地,因你而变,7.20版本地图更新速览
2018/11/24 DOTA
python之yield表达式学习
2014/09/02 Python
在GitHub Pages上使用Pelican搭建博客的教程
2015/04/25 Python
浅析Python中的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
Python实现 多进程导入CSV数据到 MySQL
2017/02/26 Python
Python直接赋值、浅拷贝与深度拷贝实例分析
2019/06/18 Python
如何使用django的MTV开发模式返回一个网页
2019/07/22 Python
HTML5 script元素async、defer异步加载使用介绍
2013/08/23 HTML / CSS
前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)
2018/07/12 HTML / CSS
MAC Cosmetics巴西官方网站:M·A·C彩妆
2019/04/18 全球购物
庆国庆活动总结
2014/08/28 职场文书
群众路线个人对照检查材料2014
2014/09/26 职场文书
出生证明格式
2015/06/15 职场文书
2016年员工政治思想表现评语
2015/12/02 职场文书
青年教师听课心得体会
2016/01/15 职场文书
Elasticsearch6.2服务器升配后的bug(避坑指南)
2022/09/23 Servers