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 最近浏览过的商品的功能实现代码
May 14 Javascript
JavaScript的类型简单说明
Sep 03 Javascript
Jquery的hover方法让鼠标经过li时背景变色
Sep 06 Javascript
javascript屏蔽右键代码
May 15 Javascript
JavaScript获取URL汇总
Jun 08 Javascript
两种JS实现屏蔽鼠标右键的方法
Aug 20 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
Jan 22 Javascript
原生JS实现轮播效果+学前端的感受(防止走火入魔)
Aug 21 Javascript
jquery注册文本框获取焦点清空,失去焦点赋值的简单实例
Sep 08 Javascript
Node+Express+MongoDB实现登录注册功能实例
Apr 23 Javascript
jQuery为某个div加入行样式
Jun 09 jQuery
koa上传excel文件并解析的实现方法
Aug 09 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
PHP实现网站应用微信登录功能详解
2019/04/11 PHP
PHP设计模式(五)适配器模式Adapter实例详解【结构型】
2020/05/02 PHP
JavaScript 继承详解(三)
2009/07/13 Javascript
js 模拟气泡屏保效果代码
2010/07/10 Javascript
jQuery源码分析-04 选择器-Sizzle-工作原理分析
2011/11/14 Javascript
Node.js 的异步 IO 性能探讨
2014/10/08 Javascript
JS函数多个参数默认值指定方法分析
2016/11/28 Javascript
Vue 2.x教程之基础API
2017/03/06 Javascript
Nodejs--post的公式详解
2017/04/29 NodeJs
Jquery EasyUI $.Parser
2017/06/02 jQuery
详解VUE单页应用骨架屏方案
2019/01/17 Javascript
微信小程序云开发详细教程
2019/05/16 Javascript
微信小程序自定义弹出模态框禁止底部滚动功能
2020/03/09 Javascript
用Angular实现一个扫雷的游戏示例
2020/05/15 Javascript
vue el-tree 默认展开第一个节点的实现代码
2020/05/15 Javascript
TypeScript 引用资源文件后提示找不到的异常处理技巧
2020/07/15 Javascript
VUE : vue-cli中去掉路由中的井号#操作
2020/09/04 Javascript
JavaScript实现简易计算器小功能
2020/10/22 Javascript
JS数据类型分类及常用判断方法
2020/11/19 Javascript
python操作MySQL 模拟简单银行转账操作
2017/09/27 Python
selenium+python实现1688网站验证码图片的截取功能
2018/08/14 Python
python顺序执行多个py文件的方法
2019/06/29 Python
Python-copy()与deepcopy()区别详解
2019/07/12 Python
django 使用全局搜索功能的实例详解
2019/07/18 Python
使用Python实现画一个中国地图
2019/11/23 Python
Python unittest 自动识别并执行测试用例方式
2020/03/09 Python
python如何查看网页代码
2020/06/07 Python
Pytorch mask-rcnn 实现细节分享
2020/06/24 Python
乐高西班牙官方商店:LEGO Shop ES
2019/12/01 全球购物
高中毕业自我评价
2014/02/08 职场文书
文明风采获奖感言
2014/02/18 职场文书
《飞向蓝天的恐龙》教学反思
2014/04/09 职场文书
演讲稿格式范文
2014/05/19 职场文书
道路交通事故赔偿协议书
2014/10/24 职场文书
城南旧事电影观后感
2015/06/16 职场文书
nginx lua 操作 mysql
2022/05/15 Servers