搭建react项目
1.打开新建的项目空文件夹,终端输入命令:npm init,文件夹生成package.json文件;
2.安装webpack、webpack-cli和cross-env:npm install webpack webpack-cli cross-env --save-dev;
3.在根目录下新建src文件夹,文件夹下新建index.js文件,作为被编译文件webpack及webpack的入口文件;
4.在根目录下新建webpack.config.js文件作为webpack核心配置文件;
5.在webpack.config.js文件添加如下代码:
const path = require('path')
const isLocal = process.env.LOCAL === 'true'
module.exports = {
mode: isLocal ? 'production' : 'development', // 表示webpack打包环境是开发环境还是生产环境
entry: './src/index.js', // 项目的入口文件,路径相对于项目的根路径
// 配置输出信息
output: {
filename: 'bundle.js', // 打包输出文件名,后期可改成按规则动态生成
path: path.resolve(__dirname, './dist'), // 输出的路径,路径是当前目录
}
}
6.在index.js文件添加如下代码:
function sum (a, b) {
return a + b;
}
var result = sum (12, 23);
console.log(result);
7.在package.json的script属性下添加如下行:
"build": "cross-env LOCAL=false webpack"
8.终端输入命令:npm run build,运行成功且根目录出现dist文件夹并且有打包出的bundle.js文件,说明打包配置成功;
9.开始做高级语法转换为ES5的配置,先安装相关插件:npm install babel-loader @babel/core @babel/preset-env @babel/preset-react @babel/polyfill @babel/runtime @babel/plugin-transform-runtime @babel/plugin-syntax-dynamic-import --save-dev;
10.根目录下新建babel.config.js文件,添加如下配置,或者直接写在webpack.config.js文件内:
const babelConfig = {
// 相当于plugins的一个集合,即插件集,就不需要在plugins中一个个插件的配置了
presets: [
[
'@babel/preset-env',
{
useBuiltIns: 'entry', // 如果引入了@babel/polyfill,这个属性可以使@babel/polyfill按需引入
corejs: 2,
},
],
'@babel/preset-react',
],
plugins: ["@babel/plugin-syntax-dynamic-import", ["@babel/plugin-transform-runtime"]], // @babel/runtime中的插件
}
module.exports = babelConfig
11.回到webpack.config.js内添加日下babel配置,如下:
const path = require('path')
const isLocal = process.env.LOCAL === 'true'
module.exports = {
mode: isLocal ? 'production' : 'development', // 表示webpack打包环境是开发环境还是生产环境
entry: './src/index.js', // 项目的入口文件,路径相对于项目的根路径
// 配置输出信息
output: {
filename: 'bundle.js', // 打包输出文件名,后期可改成按规则动态生成
path: path.resolve(__dirname, './dist'), // 输出的路径,路径是当前目录
},
module: {
rules: [
{
// 配置babel-loader
test: /\.js/,
use: ['babel-loader?cacheDirectory=true'],
include: path.join(__dirname, './src'),
}
]
}
}
12.将index.js文件内函数改为箭头函数并添加Promise,保存后再次打包,能够正常打包并将转换后代码保存到bundle.js,代表babel配置成功;
13.css预处理器转换配置,先安装相关插件:npm install stylus stylus-loader less less-loader sass-loader node-sass css-loader style-loader --save-dev,并添加如下配置:
const path = require('path')
const isLocal = process.env.LOCAL === 'true'
module.exports = {
mode: isLocal ? 'production' : 'development', // 表示webpack打包环境是开发环境还是生产环境
entry: './src/index.js', // 项目的入口文件,路径相对于项目的根路径
// 配置输出信息
output: {
filename: 'bundle.js', // 打包输出文件名,后期可改成按规则动态生成
path: path.resolve(__dirname, './dist'), // 输出的路径,路径是当前目录
},
module: {
rules: [
{
// 配置babel-loader
test: /\.js/,
use: ['babel-loader?cacheDirectory=true'],
include: path.join(__dirname, './src'),
},
// 版本不同,写法也不同
{
test: /\.(less)$/,
use: [
{
loader: 'style-loader',
},
{
loader: 'css-loader',
},
{
loader: 'postcss-loader',
options: {
postcssOptions: {
ident: 'postcss',
plugins: [require('autoprefixer')],
},
},
},
{
loader: 'less-loader',
options: {
lessOptions: {
javascriptEnabled: true,
},
},
},
],
}
]
}
}
14.src目录新增index.less文件,写入如下代码:
@color: green;
h {
color: @color;
}
15.index.js文件引入样式文件,重新打包,可以看到新写的样式文件被打包进bundle.js文件;
16.配置处理静态资源文件,安装相关插件:npm install file-loader url-loader --save-dev,并添加如下配置:
const path = require('path')
const isLocal = process.env.LOCAL === 'true'
module.exports = {
mode: isLocal ? 'production' : 'development', // 表示webpack打包环境是开发环境还是生产环境
entry: './src/index.js', // 项目的入口文件,路径相对于项目的根路径
// 配置输出信息
output: {
filename: 'bundle.js', // 打包输出文件名,后期可改成按规则动态生成
path: path.resolve(__dirname, './dist'), // 输出的路径,路径是当前目录
},
module: {
rules: [
{
// 配置babel-loader
test: /\.js/,
use: ['babel-loader?cacheDirectory=true'],
include: path.join(__dirname, './src'),
},
// 版本不同,写法也不同
{
test: /\.(less)$/,
use: [
{
loader: 'style-loader',
},
{
loader: 'css-loader',
},
{
loader: 'postcss-loader',
options: {
postcssOptions: {
ident: 'postcss',
plugins: [require('autoprefixer')],
},
},
},
{
loader: 'less-loader',
options: {
lessOptions: {
javascriptEnabled: true,
},
},
},
],
},
{
test: /\.(jpg|png|jpeg|gif)$/,
use: [
// file-loader打包的图片或文件会生成一个随机的hash值作为图片名字,url-loader封装了file-loader,文件大小小于limit,url-loader会把文件转为base64,大于limit则调用file-loader进行处理,参数也会直接传给file-loader
{
loader: 'url-loader',
options: {
limit: 4096,
fallback: {
loader: 'file-loader',
options: {
name: 'img/[name].[hash:8].[ext]',
},
},
},
},
],
},
{
test: /\.(mp4|webm|ogg|mp3|wav)$/,
use: [
{
loader: 'url-loader',
options: {
limit: 4096,
fallback: {
loader: 'file-loader',
options: {
name: 'media/[name].[hash:8].[ext]',
},
},
},
},
],
}
]
}
}
17.src文件夹内新建asset文件夹并添加两张图片,在index.js引入两张图片,保存后重新打包,可以看到图片也被打包到dist文件夹的img文件夹内,文件名为上述options属性配置的name;
18.抽离公共代码,在webpack.config.js内添加如下配置:
optimization: {
splitChunks: {
cacheGroups: {
// 打包公共模块
commons: {
chunks: 'initial', // initial表示提取入口文件的公共部分
minChunks: 2, // 表示提取公共部分最少的文件数
minSize: 0, // 表示提取公共部分最小的大小
name: 'commons', // 提取出来的文件命名
},
},
},
}
19.添加文件别名、文件扩展名配置,在webpack.config.js内添加如下配置:
resolve: {
extensions: ['.js', '.jsx', '.json'],
alias: {
pages: path.join(__dirname, './src/pages'),
components: path.join(__dirname, './src/components'),
actions: path.join(__dirname, './src/redux/actions'),
reducers: path.join(__dirname, './src/redux/reducers'),
images: path.join(__dirname, './src/images'),
},
}
20.配置文件热更新,安装相关插件:npm install webpack-dev-server html-webpack-plugin --save-dev,并在webpack.config.js内添加如下配置:
引入插件:
const HtmlWebpackPlugin = require('html-webpack-plugin')
devServer: {
hot: true,
open: true,
port: 8080,
static: './dist',
historyApiFallback: true, // 解决启动后刷新404
}
21.在package.json文件添加如下行:
"dev": "cross-env LOCAL=true webpack-dev-server"
终端运行命令:npm run dev,浏览器自动打开http://localhost:8080页面,修改index.js文件页面会跟着改动,热更新配置成功;
22.清理上一次打包记录和结果,安装插件:npm install clean-webpack-plugin --save-dev,并进行如下配置:
引入插件:
const { CleanWebpackPlugin } = require('clean-webpack-plugin')
plugins: [
new CleanWebpackPlugin(), //实例化clean-webpack-plugin插件
new HtmlWebpackPlugin({
template: path.resolve(__dirname, '../index.html')
})
]
23.集成react,安装相关插件:npm install react react-dom --save-dev,npm install react-router-dom --save-dev;
24.引入antd design,安装相关插件:npm install antd --save-dev;
25.添加express和axios,打通前后端,安装插件:npm install express axios --save-dev,根目录新增server.js文件,添加如下代码:
const express = require('express')
const app = express()
app.get('/api/xxx', (req, res) => {
res.header('Access-Control-Allow-Origin', '*')
res.send({
name: 'xxxxxx',
comurl: 'baidu.com',
})
})
app.listen(3000, () => {
console.log('app listen 3000 port')
})
26.终端输入命令:node server.js运行文件,在浏览器打开链接:http://localhost:3000/api/xxx,可以看见server文件里面写的测试数据;
27.以下命令可以调用这个接口获取到返回的数据:
axios.get('http://localhost:3000/api/xxx').then(res => {
console.log(res)
})
28.请求接口遇到跨域问题需要添加跨域配置,在webpack.config.js内添加如下配置:
devServer: {
hot: true,
open: true,
port: 8080,
static: './dist',
historyApiFallback: true, // 解决启动后刷新404
proxy: {
'/api': {
target: 'http://localhost:3000',
pathRewrite: {
'^/api': '/api',
},
changeOrigin: true, // 让target参数是域名
secure: false,// 设置支持https协议代理
},
}
}
完
搭建react项目的更多相关文章
- 手把手教你用webpack3搭建react项目(开发环境和生产环境)(一)
开发环境和生产环境整个配置源码在github上,源码地址:github-webpack-react 如果觉得有帮助,点个Star谢谢!! (一)是开发环境,(二)是生产环境. 一.首先创建packag ...
- [Web 前端] webstorm 快速搭建react项目
cp from : https://blog.csdn.net/qq_39207948/article/details/79467144 前端新手如何安装webstorm ,初步搭建react项目 下 ...
- 使用webpack搭建react项目 webpack-react-project
webpack-react-project 使用webpack搭建react项目 webpack搭建react项目 github源码 具体配置信息参照package.json和webpack.conf ...
- 使用 webpack 搭建 React 项目
简评:相信很多开发者在入门 react 的时候都是使用 create-react-app 或 react-slingshot 这些脚手架来快速创建应用,当有特殊需求,需要修改 eject 出来的 we ...
- 从零开始使用 webpack5 搭建 react 项目
本文的示例项目源码可以点击 这里 获取 一.前言 webpack5 也已经发布一段时间了,其模块联邦.bundle 缓存等新特性值得在项目中进行使用.经过笔者在公司实际项目中的升级结果来看,其提升效果 ...
- 前端新手如何安装webstorm ,初步搭建react项目
下载安装webstorm:配置成功: 配置成功后就可以开启webstorm项目了.(存微信收藏..) 1:在webstorm下配置node环境: 2:完成之后: React官方脚手架地址: https ...
- 🌅 使用 Dawn 快速搭建 React 项目!
开发一个 React 项目,通常避免不了要去配置 Webpack 和 babel 之类,以支持 commonjs 或 es 模块及各种 es 新语法,及进行 jsx 语法的转义.当然也可以用 crea ...
- 搭建React项目环境【1】
1.安装NodeJS6.0以上自带npm依赖包管理工具 2.webstrom 2019.2 工具 1.在cmd输入node -v就可以看到node的当前版本 2.在输入node进入node环境 3.查 ...
- 快速搭建react项目骨架(按需加载、redux、axios、项目级目录等等)
一.前言 最近整理了一下项目骨架,顺便自定义了一个脚手架,方便日后使用.我会从头开始,步骤一步步写明白,如果还有不清楚的可以评论区留言.先大致介绍一下这个骨架,我们采用 create-react-ap ...
- 使用脚手架快速搭建React项目
create-react-app是Facebook官方推出的脚手架,基本可以零配置搭建基于webpack的React开发环境步骤: 打开控制台 进入你想要创建项目的目录文件下面 依次执行以下命令 np ...
随机推荐
- 快速上手springboot(2)
简介 Spring程序的缺点: 1.依赖设置繁琐 2.配置繁琐 SpringBoot程序优点 1.起步以来(简化依赖配置) 2.自动配置(简化常用工程相关配置) 3.辅助功能(内置服务器,...) S ...
- API对象--Ingress(chrono《kubernetes入门实战课》笔记整理)
[概念说明] Service 的功能和运行机制,主要由 kube-proxy 控制的四层负载均衡,即根据IP.PORT来做负载均衡.而很多应用都是在7层做均衡更为合理,比如根据主机名.URI.请求头. ...
- jmeter分布式配置及问题记录
环境配置: 假设有2台电脑,主机(10.1.5.219),从机(10.1.5.212) 主机:jdk.jmeter.脚本.脚本所需的文件(需配置jdk和jmeter的环境变量) 从机:jdk.jm ...
- eFuse技术
1. 基本概况及介绍 不同于大多数FPGA使用的SRAM阵列,eFuse一次只有一根熔丝能够被编程,这是该方法的配置能力存在限制范围的原因.但当与日益成熟的内置自测试(BIST)引擎组合使用时,这 ...
- C#消息泵探索(二)
引言: 上篇文章里简单的解释了C#的消息泵原理,这里我们以winform为例详细地了解一下实现代码. 底层实现 [DllImport(ExternDll.User32, ExactSpelling ...
- make vscode portable together with its extensions
0. the goal make vscode poratable together with its extensions, so that the offline pc could make us ...
- Qt多线程编程之QThreadPool 和 QRunnable使用
说到线程通常会想到QThread,但其实Qt中创建线程的方式有多种,这里主要介绍其中一种QRunnable,QRunnable和QThread用法有些不同,并且使用场景也有区别.要介绍QRunnabl ...
- 详解 C++ 左值、右值、左值引用以及右值引用
一.左值和右值 1.左值 [可以取地址的对象就是左值] 左值是一个表示数据的表达式,比如:变量名.解引用的指针变量.一般地,我们可以获取它的地址和对它赋值,但被 const 修饰后的左值,不能给它赋值 ...
- ADC多通道采样DMA传输模板
void MyADC_Init(void){ ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; DMA_I ...
- Java8函数式编程(A)
将行为作为数据传递 函数编程的最直接的表现,莫过于将函数作为数据自由传递,结合泛型推导能力,使代码表达能力获得飞一般的提升. Java8怎么支持函数式编程? 主要有三个核心概念: 函数接口(Funct ...