React 项目迁移 Webpack Babel7的实现


Posted in Javascript onSeptember 12, 2018

不久前写了一篇webpack 4 升级迁移 这里简单说下 React 项目的一些配置;

首先我们新建项目 react-web ,然后进入项目初始化 package.json ;

cd react-web && npm init

接下来我们安装 webpack ,这里需要注意一点,是命令行已经单独提取出来了,我们不仅需要安装 webpack 还需要安装 webpack-cli 。

npm i webpack webpack-cli --save-dev

接下来我们开始安装和 react 相关的依赖包;

npm i @babel/core babel-loader @babel/preset-env @babel/preset-react --save-dev

接下来我们初始化 babel 的配置文件。

touch .babelrc

然后把下面内容粘贴进去;

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

实际上 webpack 4 是可以支持无配置构建的,但是我们还是按照传统的方式写一下配置文件;我们新建 webpack.config.js

module.exports = { 
 module: {
 rules: [
  {
  test: /\.js$/,
  exclude: /node_modules/,
  use: {
   loader: "babel-loader"
  }
  }
 ]
 }
};

接下来我们开始 做点和 React 组件相关的东西;

npm i react-dom react prop-types --save-dev

我们在 src 下新建目录 components ;

我们建立一个 Header.js 和 Footer.js .

Footer.js

import React, { Component } from "react";

class Footer extends Component { 
 constructor() {
 super();
 this.state = {
  year: "2018"
 };
 }
 render() {
 return (
  <footer class="ft">
   copyright © {this.state.year}
  </footer>
 );
 }
}
export default Footer;

Header.js

import React, { Component } from "react"; 
import ReactDOM from "react-dom"; 
class Header extends Component { 
 constructor() {
 super();
 this.state = {
  year: "2018"
 };
 }
 render() {
 return (
  <header class="hd">
   <a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >Logo</a>
   <ul class="pull-right">
   <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >Home</a></li>
   <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >Link1</a></li>
   <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >Link2</a></li>
   </ul>
  </header>
 );
 }
}
export default Header;

然后我们新增文件 src/index.js

import React, { Component } from "react"; 
import ReactDOM from "react-dom"; 
import Header from "../src/components/Header"; 
import Footer from "../src/components/Footer";

class ReactApp extends Component { 
 constructor() {
 super();
 }


 render() {
 return (
  <div class="main">
   <Header></Header>
   <Footer></Footer>
  </div>
 );
 }
}

ReactDOM.render(<ReactApp />, document.getElementById('react-app'));

export default ReactApp;

接下来我们需要预览页面,我们引入下 html-loader

npm i html-webpack-plugin html-loader --save-dev

修改我们的 webpack 配置:

const HtmlWebPackPlugin = require("html-webpack-plugin"); 
module.exports = { 
 module: {
 rules: [
  {
  test: /\.js$/,
  exclude: /node_modules/,
  use: {
   loader: "babel-loader"
  }
  },
  {
  test: /\.html$/,
  use: [
   {
   loader: "html-loader"
   }
  ]
  }
 ]
 },
 plugins: [
 new HtmlWebPackPlugin({
  template: "./src/index.html",
  filename: "./index.html"
 })
 ]
};

我们在 src 下新建 index.html 然后添加下面的内容:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
 <meta charset="utf-8">
 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" rel="external nofollow" >
 <title>React & Webpack4</title>
</head> 
<body> 
 <div class="container">
  <div class="row mt-5">
   <div class="col-md-4 offset-md-1">
    <p>Create a new article</p>
    <div id="react-app">
    </div>
   </div>
  </div>
 </div>
</body> 
</html>

接下来我们安装 webpack-dev-server 在开发时用于起一个服务器预览;

npm i webpack-dev-server --save-dev

接下来修改 npm scripts:

"scripts": {
 "start": "webpack-dev-server --open --mode development",
 "build": "webpack"
}

差不多已经完成一部分了,后面你就可以再安装其他 react 套件了;

当然如果觉得麻烦你也可以使用 yarn-react-webpack-seed 。

扩展阅读

https://www.valentinog.com/blog/react-webpack-babel/
https://reacttraining.com/react-router/web/api/HashRouter
https://github.com/JackPu/yarn-react-webpack-seed

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

Javascript 相关文章推荐
jquery 弹出层注册页面等(asp.net后台)
Jun 17 Javascript
iframe 父窗口和子窗口相互的调用方法集锦
Dec 15 Javascript
通过下拉框的值来确定输入框是否可以为空的代码
Oct 18 Javascript
js DOM 元素ID就是全局变量
Sep 20 Javascript
jquery 缓存问题的几个解决方法
Nov 11 Javascript
常见的jQuery选择器汇总
Nov 24 Javascript
深入理解JavaScript系列(35):设计模式之迭代器模式详解
Mar 03 Javascript
jQuery实现在列表的首行添加数据
May 19 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
Apr 01 jQuery
vue+springmvc导出excel数据的实现代码
Jun 27 Javascript
JQuery实现ajax请求的示例和注意事项
Dec 10 jQuery
Vue.js自定义指令学习使用详解
Oct 19 Javascript
使用vue点击li,获取当前点击li父辈元素的属性值方法
Sep 12 #Javascript
在Vue中获取组件声明时的name属性方法
Sep 12 #Javascript
浅谈webpack4 图片处理汇总
Sep 12 #Javascript
vue二级菜单导航点击选中事件的方法
Sep 12 #Javascript
vue this.reload 方法 配置
Sep 12 #Javascript
jquery 动态遍历select 赋值的实例
Sep 12 #jQuery
JS中判断字符串存在和非空的方法
Sep 12 #Javascript
You might like
《Re:从零开始的异世界生活》剧情体验,手游新作定名
2020/04/09 日漫
[转帖]PHP世纪万年历
2006/12/06 PHP
php的正则处理函数总结分析
2008/06/20 PHP
php学习之 数组声明
2011/06/09 PHP
php中批量删除Mysql中相同前缀的数据表的代码
2011/07/01 PHP
php获取今日开始时间和结束时间的方法
2017/02/27 PHP
JS setCapture 区域外事件捕捉
2010/03/18 Javascript
关于js遍历表格的实例
2013/07/10 Javascript
JS通过分析userAgent属性来判断浏览器的类型及版本
2014/03/28 Javascript
jQuery 3.0 的变化及使用方法
2016/02/01 Javascript
JavaScript 继承详解(六)
2016/10/11 Javascript
使用npm安装最新版本nodejs
2018/01/18 NodeJs
Bootstrap 实现表格样式、表单布局的实例代码
2018/12/09 Javascript
微信小程序使用map组件实现检索(定位位置)周边的POI功能示例
2019/01/23 Javascript
Vue使用watch监听一个对象中的属性的实现方法
2019/05/10 Javascript
NodeJS有难度的面试题(能答对几个)
2019/10/09 NodeJs
vue移动端使用canvas签名的实现
2020/01/15 Javascript
通过mod_python配置运行在Apache上的Django框架
2015/07/22 Python
基于python(urlparse)模板的使用方法总结
2017/10/13 Python
通过python的matplotlib包将Tensorflow数据进行可视化的方法
2019/01/09 Python
使用浏览器访问python写的服务器程序
2019/10/10 Python
python 中的[:-1]和[::-1]的具体使用
2020/02/13 Python
Python3 hashlib密码散列算法原理详解
2020/03/30 Python
keras 模型参数,模型保存,中间结果输出操作
2020/07/06 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
2020/11/28 Python
Python实现疫情地图可视化
2021/02/05 Python
Kickers鞋英国官网:男士、女士和儿童鞋
2021/03/08 全球购物
枚举与#define宏的区别
2014/04/30 面试题
Java程序员综合测试题
2014/04/25 面试题
经典的毕业生自荐信范文
2014/04/14 职场文书
人身损害赔偿协议书格式
2014/11/01 职场文书
离婚律师函范本
2015/05/27 职场文书
Python基础之操作MySQL数据库
2021/05/06 Python
十大最强火系宝可梦,喷火龙上榜,第一名有双火属性
2022/03/18 日漫
vue中的可拖拽宽度div的实现示例
2022/04/08 Vue.js
Spring Data JPA框架的核心概念和Repository接口
2022/04/28 Java/Android