前端项目搭建部署全流程(一):搭建React项目
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.tsx
与index.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,则会报该错误
解决方案有两种:
- 修改命令
"start": "webpack serve --config ./config/webpack.config.dev.js"
- 降低
webpack-cli
的版本到3
再次启动抛出这个问题,排查是因为webpack.config.base.js
中resolve中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
出现这个问题的原因是我自己下载的依赖包没有关注版本
解决方案:
- 查阅
html-webpack-plugin
是webpack5
要使用这个版本的plugin"html-webpack-plugin": "^5.0.0-alpha.14",
- 还一种解决方案就是回退
webpack
到4然后用InterpolateHtmlPlugin
替换/%PUBLIC_URL%/
9.参考资料
https://juejin.cn/post/6844904192658636808
第一次记录写文章,文笔有限,多多包涵,ヾ(´ー`)ノ゛谢谢♪
前端项目搭建部署全流程(一):搭建React项目相关推荐
- 百度云轻量应用服务器LS从购买到web应用nginx搭建部署全流程--你值得拥有的入门级教程
一直想走一遍搭建全流程 但总是拖延 最近 上海疫情 居家办公 每天没有通勤 时间很充裕 正好趁着这个时机 学习一下部署 整理一份笔记 以防自己忘记 也方便给有需要的人看.我会从购买服务器开始 写一个很 ...
- 百度云服务器nginx搭建部署全流程
今天百度云界面变了 我前几天买的时候 几十块钱一年 我买的是LS轻量服务器 云服务器或者其他服务器流程基本也都一样 我感觉 买完服务器以后点击右上角管理控制台 进入如下页面 悬停蓝色折叠菜单块-> ...
- 开源项目: 揭秘10分钟如何搞定开发部署全流程!
关注+星标公众号,不错过精彩内容 来源 | 百度飞桨 想要应用AI技术进行产业智能化升级,又担心缺乏计算机.数学等理论基础? AI算法训练完成,优化部署上线又是一个趟不过去的大坑? 别担心,今天就教大 ...
- 阿里云 — 服务器购买和部署全流程(适合新手小白)
服务器购买和部署全流程 一:服务器 二:阿里云账户 三:账户登录 四:根据需要,选择方案并购买 1:根据情况,选择购买 2:选择购买的服务器类型 3:核对信息 2:最后再次确认 五:OK完成,返回控制 ...
- BERT模型从训练到部署全流程
BERT模型从训练到部署全流程 Tag: BERT 训练 部署 缘起 在群里看到许多朋友在使用BERT模型,网上多数文章只提到了模型的训练方法,后面的生产部署及调用并没有说明. 这段时间使用BERT模 ...
- unreal ue4 PixelStreaming 局域网及公有云部署全流程记录
PixelStreaming 局域网及公有云部署全流程记录 发表于 2020-04-10 | 更新于: 2020-04-20 | 分类于 Unreal Engine | 717 写在前面 本篇是 ...
- 离线数仓搭建_16_Azkaban全流程调度
文章目录 17.0 全流程调度 17.1 Azkaban部署 17.2 创建MySQL数据库和表 17.3 Sqoop导出脚本 17.4 全调度流程 17.4.1 数据准备 17.4.2 编写Azka ...
- 若依前后端分离版本,Windows下使用Nginx代理的方式进行部署(全流程,图文教程)
场景 若依官网: http://doc.ruoyi.vip/ 前提: 服务器上安装Mysql,并将数据库导入,在SpringBoot中的application-druid.yml配置mysql数据库连 ...
- 一个方案搞定从模型量化到端侧部署全流程
量化的背景 得益于海量数据.超强算力和最新技术,深度学习在视觉.自然语言处理等领域都取得了巨大成功.然而,深度学习模型的网络结构越来越复杂.参数越来越多.计算量越来越大,给模型部署应用带来了不小挑战, ...
最新文章
- GitHub 热榜:来膜拜这个流弊的 AI 框架!
- 机器学习领域最新十篇论文,来自谷歌、Facebook、普林斯顿大学、斯坦福大学等团队的最新研究成果...
- flash程序员2012最大转变
- Python协方差矩阵处理脑电数据
- 《0 bug ---- C/C++商用工程之道》目录
- delphi面向对象(1)
- 内存中有两个4字节以压缩的bcd_卷积神经网络的压缩与加速 -- 剪枝(PRUNING)论文(二)...
- Linux主机系统加固
- 计算机硬件基础课设总结,计算机硬件基础课程设计报告.doc
- 历时3个月,我们是如何为一个开源项目集资300万美元的?
- 程序员必备的css工具,8个提高效率的CSS实用工具
- python 直播源地址_如何获取视频的直播源地址
- SIP协议及与Freeswitch的关系
- 使用Microsoft Network Monitor分析Wireshark无法解析的SSL流量包
- 二维数组传参(二维数组作为函数参数)
- 3分钟读懂RD与RT
- 超级计算机 弦理论,关于灵魂的六大猜想
- 网络安全高级工程师---站点安全
- 视频去水印免费软件有哪些?快来收藏这三款实用工具
- 我在网吧上网用的QQ给好友狂发病毒
热门文章
- Tomcat启动报错org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to sta
- uniapp按照官方《针对plus.runtime.install在安卓9.0+上无法执行的解决方案》处理后报错:安装包解析错误
- 数据分析及挖掘到底能带来什么价值?
- C# Dev GridView自定义底部统计单元格
- C语言实现模拟用户登录
- 黑马程序员----swift基础语法!
- C语言表达式是运算符和,C语言之运算符和表达式
- HaaS轻应用(JavaScript)低功耗蓝牙案例
- Navicat Premium 使用技巧
- postman传布尔类型的值传不进去