webpack4+react+antd从零搭建React脚手架(一)

2023-05-16

本人是在windows环境下搭建的,ios自行摸索。
代码地址PreByter

项目初始化

首先就是项目初始化,一定确保安装node或者yarn二者均可,

npm init
//或者
yarn init

此时会生成package.json文件,这个文件包含的项目描述,版本号,作者,项目地址等等。当然这里是一直回车的。所以不用在意的。

安装webpack

yarn add webpack webpack-cli -D
// or
npm install --save-dev webpack  webpack-cli

这里解释一下(仅限个人理解)
--save-dev是将依赖安装到开发环境中,即在package.json中的devDependencies目录下。--save是安装到生产环境中也就是在package.json中的dependencies目录下。同理-D是安装到开发依赖。-S是安装到生产依赖。

建立webpack配置文件

  • 在根目录下建立build文件夹,分别新建三个名为的webpack.base.confwebpack.dev.confwebpack.prod.conf的js。分别是公共配置,开发配置,生产配置。
    webpack的文档地址webpack;里面有详细的解释。
// webpack.base.conf.js 文件
const path = require('path'); //node.js自带的路径参数
const DIST_PATH = path.resolve(__dirname, '../dist'); //生产目录
const APP_PATH = path.resolve(__dirname, '../src'); //源文件目录

module.exports = {
  entry: {
    app: './src/index.js',
  },
  output: {
    filename: 'js/[name].[hash].js', //使用hash进行标记
    path: DIST_PATH
  },
 },

这里因为分成3个配置文件所以需要webpack-merge来进行合并,当然也可以不使用同一放到一个配置里。

npm install --save-dev webpack-merge

在 ** webpack.prod.conf.js** 里面使用

// webpack.prod.conf.js 文件
const merge = require('webpack-merge'); //合并配置
const baseWebpackConfig = require('./webpack.base.conf');
module.exports = merge(baseWebpackConfig, {
    mode: 'production',  //mode是webpack4新增的模式
});

在根目录下创建src目录,然后创建index.js文件和index.html

const element =document.getElementById('root');
element.innerHTML = 'hello, world!';

在根目录创建一个public文件夹,然后新建一个index.html文件

<!-- index.html -->
// index.html
<!DOCTYPE html>
<html lang="en">
  <head>
      <meta charset="UTF-8">
      <title>webpack4+react+antd从零搭建React脚手架</title>
  </head>
  <body>
        <div id="root"></div>
        <script src="../dist/js/bundle.js"></script>
  </body>
</html>

当前的目录树

|- /src
    |- index.js
  |- /node_modules
  |- /public
    |- index.html
  |- /build
    |- webpack.base.conf.js
    |- webpack.prod.conf.js
  |- package.json
  |- package-lock.json

在package.json文件 scripts属性添加一个build命令

// package.json
"scripts": {
    "build": "webpack --config build/webpack.prod.conf.js",
    "test": "echo \"Error: no test specified\" && exit 1"
},

先不要运行,运行也会报错的。

安装React

yarn add react react-dom -S

同样官方文档也给了一些指导在一分钟内添加-react。
对index.js进行编辑

import React from "react";
import ReactDom from "react-dom";

ReactDom.render(
    <h1>hello, world!</h1>,
    document.getElementById("root")
);

注意,react使用的是es6,这里需要将代码转成es5,所以需要安装babel。
Babel的官方文档地址Babel。这里也有bable在webpack的配置的介绍babel in webpack。对react的介绍babel in react。

安装Babel

npm install --save-dev babel-loader babel-core babel-preset-env babel-preset-react

在根目录下创建.babelrc文件,配置presets.

{
  "presets": [
	 "env",
    "react"
  ]
}

然后修改webpack.base.conf.js文件

// webpack.base.conf.js
const path = require('path');
const APP_PATH = path.resolve(__dirname, '../src');
const DIST_PATH = path.resolve(__dirname, '../dist');
module.exports = {
    entry: {
        app: './app/index.js'
    },    
    output: {
        filename: 'js/bundle.js',
        path: DIST_PATH
    },
    module: {
        rules: [
            {
                test: /\.js?$/,
                use: "babel-loader",
                include: APP_PATH
            }
        ]
    }
};

运行 npm run build

然后就会出现各种奇葩的错误。我是正好处于babel从6.x版本升级到7.x版本的时候,所以导致有些插件npm库里是没有升级的,谷歌好久,是一个外国的小哥说,babel的各版本不兼容导致的。
所以在这里进行了版本降级,pack.json中的代码

	"babel-cli": "^6.26.0",
    "babel-core": "^6.26.3",
    "babel-loader": "^7.0.2",
    "babel-plugin-import": "^1.9.1",
    "babel-plugin-transform-runtime": "^6.23.0",
    "babel-preset-env": "^1.6.1",
    "babel-preset-react": "^6.24.1",
    "babel-preset-stage-0": "^6.24.1",

这样就奇迹般的好了。

webpack的插件

HtmlWebpackPlugin

自动生产出html 的文件。

安装HtmlWebpackPlugin

npm install --save-dev html-webpack-plugin

修改public中的html的文件

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>
    <%= htmlWebpackPlugin.options.title %>
  </title>
</head>
<body>
</body>
</html>

webpack.prod.conf.js中配置plugins属性

const merge = require('webpack-merge');
const baseWebpackConfig = require('./webpack.base.conf.js');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = merge(baseWebpackConfig, {
    mode: 'production',
    plugins: [
        new HtmlWebpackPlugin({
		      template: 'public/index.html',
		      title: 'PresByter', //更改HTML的title的内容
		      minify: {
		        removeComments: true,
		        collapseWhitespace: true,
		        removeAttributeQuotes: true
		      },
   		 }),
    ]
});

index.js

import React from "react";
import ReactDom from "react-dom";

const Div = document.createElement("div");
Div.setAttribute("id", "root")
document.body.appendChild(Div)

ReactDom.render(
  <div>
    <h1>hello, world!333</h1>
  </div>,
  document.getElementById("root")
);

这样就可以自动加载js文件了。
可以 yarn run build

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

webpack4+react+antd从零搭建React脚手架(一) 的相关文章

  • 阿里云ubuntu18.04搭建图形界面的介绍

    经过几天的奋战 xff0c 在综合别人的宝贵经验之后 xff0c 终于把阿里云的ubuntu18 04的图形界面搭配出来了 xff0c 在此把我个人的经历分享给大家参考一下 首先声明 我是参考原博主的经验搭建出来的 xff0c 具体链接可以

随机推荐

  • 嵌入式开发Verilog教程(一)——数字信号处理、计算、程序、 算法和硬线逻辑的基本概念

    嵌入式开发Verilog教程 xff08 一 xff09 数字信号处理 计算 程序 算法和硬线逻辑的基本概念 一 引言二 数字信号处理三 计算四 算法与数据结构五 编程语言和程序六 系统结构与硬线逻辑七 设计方法学八 专用硬线逻辑与微处理器
  • IntelliJ IDEA 2020.1 正式发布,15 项重大特性、官方支持中文了! | 原力计划

    头图 amp 作者 YourBatman xff0c CSDN博客专家 责编 唐小引 出品 CSDN xff08 ID xff1a CSDNnews xff09 前言 千呼万唤始出来 xff01 自从官方在 2020 01 20 发布了其
  • 状态观测器

    干扰 xff0c 输出 xff0c 系统内状态都是一种状态 xff0c 状态观测器可以扩展干扰观测器 定义系统实际输出和理论输出的误差d xff0c 对d求导得到一个公式 xff0c 系统理论输出求导得到一个公式 xff0c 组建成二元方程
  • python更新pip失败-解决Python pip 自动更新升级失败的问题

    在使用python pip的时候 xff0c 经常会发生pip版本过低导致失败的情况 xff0c 这时候 xff0c 系统会提示让你使用如下命令对pip进行升级更新 xff1a python m pip install upgrade pi
  • es6小记

    const let关键字 let xff1a 声明 使js存在块级作用域 const xff1a 定义常亮 xff0c 定义以后不可以更改 若是引用的类型 xff0c 那可以更改他的属性 const a 61 b 789 br a b 61
  • js检测浏览器内核、版本号

    js检测浏览器内核 版本号 span class hljs function span class hljs keyword function span span class hljs title isBroswer span span c
  • 点击地图获取经纬度(基于腾旭地图api)

    废话不多说上图 接着代码段 xff08 注意 xff1a 这里的key要换成自己的key xff09 span class hljs doctype lt DOCTYPE html gt span span class hljs tag l
  • dataTable使用

    官网 DataTable英文网址 DataTables中文网址 DataTables一些例子 本文主要是围绕下面的例子进行讲解的 xff0c 请看效果图 说明 xff1a 全选功能 xff0c 点击删除 xff0c 批量删除 xff0c 批
  • 判断checkbox 是否选中

    checkbox 选中事件 首先input的标签设置checkbox lt input name 61 span class hljs string 34 operaMode 34 span span class hljs class sp
  • jQuery添加新元素/内容

    整理了一下jq添加元素 HTML的一些操作 xff0c 效果图见下 结构插入 内部插入 append 在被选元素的结尾插入内容 appendTo 方法在被选元素的结尾 xff08 仍然在内部 xff09 插入指定内容 prepend 在被选
  • 高德地图开发bug

    第一次使用的时候报错 INVALID USER DOMAIN 然后百度了一下 xff0c 官方文档上是这么说的 xff1a xff0c 请先检查一下您在申请Key的时候 xff0c 是否设置了域名白名单 xff0c 如果设定了 xff0c
  • 新 iPhone SE 卖 3299 元起,香不香?

    作者 吴波 来源 网易科技 xff08 ID xff1a tech 163 xff09 4 月 15 日 xff0c 等待了 1485 天之后 xff0c 当年的 4 英寸 性能小钢炮 iPhone SE 终于迎来全新升级款 The New
  • 图片剪裁并预览上传

    预览效果 详细代码讲解 现在有点忙 xff0c 稍后便会讲解 demo下载地址图片剪裁并预览上传
  • js实现下载功能

    js实现下载功能 最近需要做一个下载功能 xff0c 然后到网上查了查 xff0c 顺便写了个小demo xff1b 在h5新特性里面 xff1b a标签有个download的属性 xff1b span class hljs tag lt
  • 前端js免费的CDN网站

    1 BootCDN http www bootcdn cn 目前前端开源的项目几乎都涵盖了 xff0c 支持http和https 2 百度静态资源公共库 http cdn code baidu com 一个是稳定 xff0c 快速 xff0
  • js区号插件(全国电话区号)

    最近由于要和美团和饿了么外卖对接 xff0c 地址要输入区号 xff1b 网上百度没有找到插件 xff1b 于是自己就动手撸了一个 xff1b 效果图见下 xff1b 为什么第一个是浙江呢 xff0c 因为我在杭州啊 xff01 xff01
  • 那些看过的好文章

    我总结的js性能优化的小知识http www cnblogs com liyunhua p 4529086 html19 个 JavaScript 有用的简写技术https segmentfault com a 11900000126738
  • java小白成长记02

    位运算符 左移 lt lt 就是乘以2的次幂运算 xff0c 移几位就是几次幂 xff1b 3 lt lt 3即为3 2 2 2 61 24 xff1b 6 lt lt 2即为6 2 2 61 24 xff1b 右移 gt gt 就是除以2
  • web前端开发-谷歌浏览器插件

    搜集了一些web前端开发所需要的谷歌浏览器插件 xff1b 具体内容见下图 xff1b 下载地址 使用方法 xff1a 点击谷歌浏览器右上角 gt 更多工具 gt 扩展程序 xff1b 直接将 crx文件拖进去即可安装 xff1b
  • webpack4+react+antd从零搭建React脚手架(一)

    本人是在windows环境下搭建的 xff0c ios自行摸索 代码地址PreByter 项目初始化 首先就是项目初始化 xff0c 一定确保安装node或者yarn二者均可 xff0c npm init 或者 yarn init 此时会生