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的树型插件(OrangeTree)使用介绍
May 03 Javascript
JavaScript基本编码模式小结
May 23 Javascript
javascript中new关键字详解
Dec 14 Javascript
轻松掌握jQuery中wrap()与unwrap()函数的用法
May 24 Javascript
angularjs 中$apply,$digest,$watch详解
Oct 13 Javascript
vue一个页面实现音乐播放器的示例
Feb 06 Javascript
基于Vue 服务端Cookies删除的问题
Sep 21 Javascript
Vue中多个元素、组件的过渡及列表过渡的方法示例
Feb 13 Javascript
layui实现下拉框三级联动
Jul 26 Javascript
Angular单元测试之事件触发的实现
Jan 20 Javascript
JS实现页面鼠标点击出现图片特效
Aug 19 Javascript
微信小程序用户授权最佳实践指南
May 08 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
让Json更懂中文(JSON_UNESCAPED_UNICODE)
2011/10/27 PHP
php时间戳格式化显示友好的时间函数分享
2014/10/21 PHP
js获取本机的外网/广域网ip地址完整源码
2013/08/12 Javascript
jquery如何实现锚点链接之间的平滑滚动
2013/12/02 Javascript
JavaScript中的Math.atan2()方法使用详解
2015/06/15 Javascript
js鼠标点击按钮切换图片-图片自动切换-点击左右按钮切换特效代码
2015/09/02 Javascript
JS获取月份最后天数、最大天数与某日周数的方法
2015/12/08 Javascript
理解Javascript文件动态加载
2016/01/29 Javascript
jQuery CSS3自定义美化Checkbox实现代码
2016/05/12 Javascript
JS获得多个同name 的input输入框的值的实现方法
2017/01/09 Javascript
史上最全JavaScript常用的简写技巧(推荐)
2017/08/17 Javascript
vue侧边栏动态生成下级菜单的方法
2018/09/07 Javascript
js实现每日签到功能
2018/11/29 Javascript
解决pycharm双击但是无法打开的情况
2020/10/31 Javascript
微信小程序实现锚点跳转
2020/11/23 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
Python中GeoJson和bokeh-1的使用讲解
2019/01/03 Python
python中列表的切片与修改知识点总结
2019/07/23 Python
Python动态声明变量赋值代码实例
2019/12/30 Python
Python数据结构dict常用操作代码实例
2020/03/12 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
2020/06/23 Python
keras用auc做metrics以及早停实例
2020/07/02 Python
CSS实现的一闪而过的图片闪光效果
2014/04/23 HTML / CSS
H5离线存储Manifest原理及使用
2020/04/28 HTML / CSS
台湾屈臣氏网路商店:Watsons台湾
2020/12/29 全球购物
一家外企的面试题目(C/C++面试题,C语言面试题)
2014/03/24 面试题
应届毕业生个人求职自荐信
2014/01/06 职场文书
给民警的表扬信
2014/01/08 职场文书
财务简历的自我评价
2014/03/05 职场文书
班级口号大全
2014/06/09 职场文书
上海世博会口号
2014/06/19 职场文书
银行竞聘报告范文
2014/11/06 职场文书
大学毕业论文致谢词
2015/05/14 职场文书
公司趣味运动会开幕词
2016/03/04 职场文书
Nginx缓存设置案例详解
2021/09/15 Servers
全网非常详细的pytest配置文件
2022/07/15 Python