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')

  plugins: [
    // 实例化Html模板
    new HtmlWebpackPlugin({
      template: path.resolve(__dirname, './index.html'),
    }),
  ],
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项目的更多相关文章

  1. 手把手教你用webpack3搭建react项目(开发环境和生产环境)(一)

    开发环境和生产环境整个配置源码在github上,源码地址:github-webpack-react 如果觉得有帮助,点个Star谢谢!! (一)是开发环境,(二)是生产环境. 一.首先创建packag ...

  2. [Web 前端] webstorm 快速搭建react项目

    cp from : https://blog.csdn.net/qq_39207948/article/details/79467144 前端新手如何安装webstorm ,初步搭建react项目 下 ...

  3. 使用webpack搭建react项目 webpack-react-project

    webpack-react-project 使用webpack搭建react项目 webpack搭建react项目 github源码 具体配置信息参照package.json和webpack.conf ...

  4. 使用 webpack 搭建 React 项目

    简评:相信很多开发者在入门 react 的时候都是使用 create-react-app 或 react-slingshot 这些脚手架来快速创建应用,当有特殊需求,需要修改 eject 出来的 we ...

  5. 从零开始使用 webpack5 搭建 react 项目

    本文的示例项目源码可以点击 这里 获取 一.前言 webpack5 也已经发布一段时间了,其模块联邦.bundle 缓存等新特性值得在项目中进行使用.经过笔者在公司实际项目中的升级结果来看,其提升效果 ...

  6. 前端新手如何安装webstorm ,初步搭建react项目

    下载安装webstorm:配置成功: 配置成功后就可以开启webstorm项目了.(存微信收藏..) 1:在webstorm下配置node环境: 2:完成之后: React官方脚手架地址: https ...

  7. 🌅 使用 Dawn 快速搭建 React 项目!

    开发一个 React 项目,通常避免不了要去配置 Webpack 和 babel 之类,以支持 commonjs 或 es 模块及各种 es 新语法,及进行 jsx 语法的转义.当然也可以用 crea ...

  8. 搭建React项目环境【1】

    1.安装NodeJS6.0以上自带npm依赖包管理工具 2.webstrom 2019.2 工具 1.在cmd输入node -v就可以看到node的当前版本 2.在输入node进入node环境 3.查 ...

  9. 快速搭建react项目骨架(按需加载、redux、axios、项目级目录等等)

    一.前言 最近整理了一下项目骨架,顺便自定义了一个脚手架,方便日后使用.我会从头开始,步骤一步步写明白,如果还有不清楚的可以评论区留言.先大致介绍一下这个骨架,我们采用 create-react-ap ...

  10. 使用脚手架快速搭建React项目

    create-react-app是Facebook官方推出的脚手架,基本可以零配置搭建基于webpack的React开发环境步骤: 打开控制台 进入你想要创建项目的目录文件下面 依次执行以下命令 np ...

随机推荐

  1. 快速上手springboot(2)

    简介 Spring程序的缺点: 1.依赖设置繁琐 2.配置繁琐 SpringBoot程序优点 1.起步以来(简化依赖配置) 2.自动配置(简化常用工程相关配置) 3.辅助功能(内置服务器,...) S ...

  2. API对象--Ingress(chrono《kubernetes入门实战课》笔记整理)

    [概念说明] Service 的功能和运行机制,主要由 kube-proxy 控制的四层负载均衡,即根据IP.PORT来做负载均衡.而很多应用都是在7层做均衡更为合理,比如根据主机名.URI.请求头. ...

  3. jmeter分布式配置及问题记录

    环境配置:   假设有2台电脑,主机(10.1.5.219),从机(10.1.5.212) 主机:jdk.jmeter.脚本.脚本所需的文件(需配置jdk和jmeter的环境变量) 从机:jdk.jm ...

  4. eFuse技术

    1. 基本概况及介绍   不同于大多数FPGA使用的SRAM阵列,eFuse一次只有一根熔丝能够被编程,这是该方法的配置能力存在限制范围的原因.但当与日益成熟的内置自测试(BIST)引擎组合使用时,这 ...

  5. C#消息泵探索(二)

    ​ 引言: 上篇文章里简单的解释了C#的消息泵原理,这里我们以winform为例详细地了解一下实现代码. 底层实现 [DllImport(ExternDll.User32, ExactSpelling ...

  6. 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 ...

  7. Qt多线程编程之QThreadPool 和 QRunnable使用

    说到线程通常会想到QThread,但其实Qt中创建线程的方式有多种,这里主要介绍其中一种QRunnable,QRunnable和QThread用法有些不同,并且使用场景也有区别.要介绍QRunnabl ...

  8. 详解 C++ 左值、右值、左值引用以及右值引用

    一.左值和右值 1.左值 [可以取地址的对象就是左值] 左值是一个表示数据的表达式,比如:变量名.解引用的指针变量.一般地,我们可以获取它的地址和对它赋值,但被 const 修饰后的左值,不能给它赋值 ...

  9. ADC多通道采样DMA传输模板

    void MyADC_Init(void){ ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; DMA_I ...

  10. Java8函数式编程(A)

    将行为作为数据传递 函数编程的最直接的表现,莫过于将函数作为数据自由传递,结合泛型推导能力,使代码表达能力获得飞一般的提升. Java8怎么支持函数式编程? 主要有三个核心概念: 函数接口(Funct ...