1.前言

前段时间突发一个想法,想尝试从零开始搭建一个React项目模板,发布到GitHub,再编写脚手架命令拉取模板以及编写脚本命令快速生成业务模块,然后再用这个模板结合之前的一套组件库,完成编译打包运行一些列操作,再就是另外一个大事,用基于这个项目模板与组件库构建的项目,搭建自动化构建与自动化部署整个流程,将连载文章记录整个这个流程,以便后期回溯。

2.初始化项目

新建项目文件然后执行命令,-y 需要选择的地方默认是yes,执行完后会生成个package.json文件

npm init -y

3.初始化typeScript配置

执行完命令后会生成tsconfig.json文件,文件中会有全属性的配置与描述,在结合自己的需求配置使用,因tsconfig.json篇幅太长只留了我的一些配置项

yarn add typescript -g
tsc init
{"compilerOptions": {/* Visit https://aka.ms/tsconfig.json to read more about this file *//* Basic Options */"target": "ES2016",                       /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */"module": "commonjs",                     /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */"jsx": "react",                           /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. *//* Strict Type-Checking Options */"strict": true,                           /* Enable all strict type-checking options. */"esModuleInterop": true,                  /* Enables emit interoperability between CommonJS and ES Modules via creation of /* Advanced Options */"skipLibCheck": true,                     /* Skip type checking of declaration files. */"forceConsistentCasingInFileNames": true  /* Disallow inconsistently-cased references to the same file. */}
}

4.配置react

4.1.安装依赖

yarn add react react-dom react-router-dom
yarn add @types/react @types/react-dom @types/react-router-dom --dev

4.2.新建html模板

新建public目录下新建index.html

<!--public/index.html-->
<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="utf-8" /><link rel="icon" href="favicon" /><meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /><title>React App</title></head><body><div id="root"></div></body>
</html>

4.3.新建工程入口文件

新建src目录下新建App.tsxindex.tsx

// App.tsx
import React from 'react';const App = () => {return <div>buildDemo</div>;
};export default App;// index.tsx
import App from './App';
import ReactDom from 'react-dom';
import React from 'react';ReactDom.render(<App />, document.querySelector('#root'));

5.配置webpack

5.1.安装webpack依赖(webpack版本5.x)

yarn add webpack webpack-cli webpack-merge html-webpack-plugin@next clean-webpack-plugin --dev

5.2.依赖包说明

html-webpack-plugin@next wepack 5需要安装5.x版本的html-webpack-plugin官网要求,具体启动会有说明

clean-webpack-plugin 清除打包目录的插件

5.3.新建webpack配置

新建config文件存放webpack的配置文件:

  • webpack.config.base.js webpack基本配置
  • webpack.config.dev.js webpack开发环境配置
  • webpack.config.prod.js webpack生产环境配置
// webpack.config.base.js
// 加上type在配置时会有提示
/*** @type {import('webpack').Configuration}*/module.exports = {entry: path.resolve(__dirname, '../src/index.tsx'),output: {filename: '[name].[hash].js',path: path.resolve(__dirname, '../dist'),},resolve: {extensions: ['.ts', '.tsx', '.js', '.jsx'],},plugins: [new HtmlWebpackPlugin({filename: 'index.html',template: path.resolve(__dirname, '../publich/index.html'),favicon: path.resolve(__dirname, '../publich/favicon.ico'),hash: true,}),new CleanWebpackPlugin({dry: false,cleanOnceBeforeBuildPatterns: [path.resolve(__dirname, 'dist')],}),],
};
// webpack.config.dev.js
/*** @type {import('webpack').WebpackOptionsNormalized}*/const devConfig = {mode: 'development',
};module.exports = webpackMerge.merge(baseConfig, devConfig);
// webpack.config.prod.js
/*** @type {import('webpack').Configuration}*/const prodConfig = {mode: 'production',
};module.exports = webpackMerge(baseConfig, prodConfig);

6.配置babel

6.1.安装依赖(babel版本7.x)

yarn add babel-loader babel-plugin-import @babel/cli @babel/core @babel/preset-env @babel/preset-react @babel/preset-typescript --dev

6.2.依赖包说明

babel-loader 官网解释是文件预处理器,其实就是webpack处理静态文件的时候,需要各种loader来加载文件

babel-plugin-import 可以针对antd,antd-mobile,lodash等库进行按需加载

@babel/cli 内置的CLI命令行工具

@babel/core 需要调用babel的api进行转码,就要使用该模块

@babel/preset-env 是一个灵活的预设,你可以无需管理目标环境需要的语法转换或浏览器polyfill,就可以使用最新的 JavaScript

@babel/preset-react react预设

@babel/preset-typescript typescript预设

6.3.创建babel.config.js文件

// type 编写时会有提示
/*** @type {import('@babel/core').TransformOptions}*/
module.exports = {presets: [['@babel/env',{useBuiltIns: 'usage',corejs: 3,},],'@babel/preset-react','@babel/preset-typescript',],
};

webpack.config.base.js中添加module配置

/*** @type {import('webpack').Configuration}*/module.exports = {...module: {rules: [{test: /\.(js|ts)x?$/,exclude: /(node_modules)/,use: {loader: 'babel-loader',},},],},
};

7.配置开发服务器

yarn add webpack-dev-server --dev

webpack.config.dev.js添加如下配置

/*** @type {import('webpack-dev-server').Configuration}*/const devServer = {port: 3000,host: 'localhost',contentBase: path.join(__dirname, '../publich'),watchContentBase: true,publicPath: '/',compress: true,historyApiFallback: true,hot: true,clientLogLevel: 'error',// open: true,watchOptions: {ignored: /node_modules/,},
};/*** @type {import('webpack').WebpackOptionsNormalized}*/const devConfig = {mode: 'development',devServer: devServer,
};module.exports = webpackMerge.merge(baseConfig, devConfig);

package.json中添加启动命令

"scripts": {"start": "webpack serve --config ./config/webpack.config.dev.js"
},

8.启动

8.1.Error: Cannot find module ‘webpack-cli/bin/config-yargs’

webpack-dev-server 启动过程中,如果webpack-cli版本是4,则会报该错误

解决方案有两种:

  1. 修改命令"start": "webpack serve --config ./config/webpack.config.dev.js"
  2. 降低webpack-cli的版本到3

再次启动抛出这个问题,排查是因为webpack.config.base.jsresolve中extensions未关联.js,.jsx

8.2.Error:Uglify SyntaxError: Unexpected token: punc ())

当使用UglifyJs压缩时,出现这个错误,查阅相关资料是ES6语法压缩问题

*解决方案:*把UglifyJs移到webpack.optimization.minimizer

参考文献:https://stackoverflow.com/questions/42375468/uglify-syntaxerror-unexpected-token-punc

8.3.Error:Failed to decode param '/%PUBLIC_URL%/favicon.ico

出现这个问题的原因是我自己下载的依赖包没有关注版本

解决方案:

  1. 查阅html-webpack-pluginwebpack5要使用这个版本的plugin"html-webpack-plugin": "^5.0.0-alpha.14",
  2. 还一种解决方案就是回退webpack到4然后用InterpolateHtmlPlugin替换/%PUBLIC_URL%/

9.参考资料

https://juejin.cn/post/6844904192658636808

第一次记录写文章,文笔有限,多多包涵,ヾ(´ー`)ノ゛谢谢♪

前端项目搭建部署全流程(一):搭建React项目相关推荐

  1. 百度云轻量应用服务器LS从购买到web应用nginx搭建部署全流程--你值得拥有的入门级教程

    一直想走一遍搭建全流程 但总是拖延 最近 上海疫情 居家办公 每天没有通勤 时间很充裕 正好趁着这个时机 学习一下部署 整理一份笔记 以防自己忘记 也方便给有需要的人看.我会从购买服务器开始 写一个很 ...

  2. 百度云服务器nginx搭建部署全流程

    今天百度云界面变了 我前几天买的时候 几十块钱一年 我买的是LS轻量服务器 云服务器或者其他服务器流程基本也都一样 我感觉 买完服务器以后点击右上角管理控制台 进入如下页面 悬停蓝色折叠菜单块-> ...

  3. 开源项目: 揭秘10分钟如何搞定开发部署全流程!

    关注+星标公众号,不错过精彩内容 来源 | 百度飞桨 想要应用AI技术进行产业智能化升级,又担心缺乏计算机.数学等理论基础? AI算法训练完成,优化部署上线又是一个趟不过去的大坑? 别担心,今天就教大 ...

  4. 阿里云 — 服务器购买和部署全流程(适合新手小白)

    服务器购买和部署全流程 一:服务器 二:阿里云账户 三:账户登录 四:根据需要,选择方案并购买 1:根据情况,选择购买 2:选择购买的服务器类型 3:核对信息 2:最后再次确认 五:OK完成,返回控制 ...

  5. BERT模型从训练到部署全流程

    BERT模型从训练到部署全流程 Tag: BERT 训练 部署 缘起 在群里看到许多朋友在使用BERT模型,网上多数文章只提到了模型的训练方法,后面的生产部署及调用并没有说明. 这段时间使用BERT模 ...

  6. unreal ue4 PixelStreaming 局域网及公有云部署全流程记录

    PixelStreaming 局域网及公有云部署全流程记录 发表于 2020-04-10 |  更新于: 2020-04-20 |  分类于 Unreal Engine |  717 写在前面 本篇是 ...

  7. 离线数仓搭建_16_Azkaban全流程调度

    文章目录 17.0 全流程调度 17.1 Azkaban部署 17.2 创建MySQL数据库和表 17.3 Sqoop导出脚本 17.4 全调度流程 17.4.1 数据准备 17.4.2 编写Azka ...

  8. 若依前后端分离版本,Windows下使用Nginx代理的方式进行部署(全流程,图文教程)

    场景 若依官网: http://doc.ruoyi.vip/ 前提: 服务器上安装Mysql,并将数据库导入,在SpringBoot中的application-druid.yml配置mysql数据库连 ...

  9. 一个方案搞定从模型量化到端侧部署全流程

    量化的背景 得益于海量数据.超强算力和最新技术,深度学习在视觉.自然语言处理等领域都取得了巨大成功.然而,深度学习模型的网络结构越来越复杂.参数越来越多.计算量越来越大,给模型部署应用带来了不小挑战, ...

最新文章

  1. GitHub 热榜:来膜拜这个流弊的 AI 框架!
  2. 机器学习领域最新十篇论文,来自谷歌、Facebook、普林斯顿大学、斯坦福大学等团队的最新研究成果...
  3. flash程序员2012最大转变
  4. Python协方差矩阵处理脑电数据
  5. 《0 bug ---- C/C++商用工程之道》目录
  6. delphi面向对象(1)
  7. 内存中有两个4字节以压缩的bcd_卷积神经网络的压缩与加速 -- 剪枝(PRUNING)论文(二)...
  8. Linux主机系统加固
  9. 计算机硬件基础课设总结,计算机硬件基础课程设计报告.doc
  10. 历时3个月,我们是如何为一个开源项目集资300万美元的?
  11. 程序员必备的css工具,8个提高效率的CSS实用工具
  12. python 直播源地址_如何获取视频的直播源地址
  13. SIP协议及与Freeswitch的关系
  14. 使用Microsoft Network Monitor分析Wireshark无法解析的SSL流量包
  15. 二维数组传参(二维数组作为函数参数)
  16. 3分钟读懂RD与RT
  17. 超级计算机 弦理论,关于灵魂的六大猜想
  18. 网络安全高级工程师---站点安全
  19. 视频去水印免费软件有哪些?快来收藏这三款实用工具
  20. 我在网吧上网用的QQ给好友狂发病毒

热门文章

  1. Tomcat启动报错org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to sta
  2. uniapp按照官方《针对plus.runtime.install在安卓9.0+上无法执行的解决方案》处理后报错:安装包解析错误
  3. 数据分析及挖掘到底能带来什么价值?
  4. C# Dev GridView自定义底部统计单元格
  5. C语言实现模拟用户登录
  6. 黑马程序员----swift基础语法!
  7. C语言表达式是运算符和,C语言之运算符和表达式
  8. HaaS轻应用(JavaScript)低功耗蓝牙案例
  9. Navicat Premium 使用技巧
  10. postman传布尔类型的值传不进去