摆脱create-react-app,来让我们自己搭建一个react脚手架

React--》超详细教程——React脚手架的搭建与使用 React脚手架是开发现代Web应用的必备,其充分利用Webpack、Babel、ESlint等工具辅助项目的开发,当然这些工具也无需手动配置即可使用,脚手架的意义更多的是关注的是业务而不是工具的配置;项目的整体技术架构为:react + webpack + es6 + eslint。使用脚手架开发项目的特点:模块化、组件化、工程化。 阅读详情
一. 初始化npm、安装webpack和react
  1. 创建一个文件夹REACT-CNODE-TEACH
    mkdir REACT-CNODE-TEACH
  2. 在文件夹中npm init(我们使用npm来管理依赖包)
    在这里插入图片描述
    一路点回车就行,当然你也可以去详细配置下工程信息。
  3. 装一个webpack
    在这里插入图片描述
  4. 一个react工程,怎么能不安装react?
    在这里插入图片描述
二. 客户端webpack配置文件
  1. 这个时候我们要配置一下webpack,我们先在工程根目录创建一个文件夹build,然后创建一个webpack配置文件webpack.config.js。这时,我们可以简单配置一下webpack:
const path = require('path')
const HTMLPlugin = require('html-webpack-plugin')

module.exports = {
    //应用入口
    entry: {
        app: path.join(__dirname, '../client/app.js')
    },

    //打包的文件路径
    output: {
        filename: '[name].[hash].js',
        path: path.join(__dirname, '../dist'),
        //静态资源输出路径
        publicPath: ''
    },

    //用于识别jsx
    module: {
        rules: [
            {
                test: /.jsx$/,//正则表达式
                loader: 'babel-loader'
            },
            {
                test: /.js$/,//正则表达式
                exclude: path.join(__dirname, '../node_modules'),
                loader: 'babel-loader'
            }
        ]
    },

    plugins: [
        //生成一个html文件,同时注入entry
        new HTMLPlugin()
    ]
}
  1. 这个时候我们就可以用webpack来编译工程了。为了操作方便,我们自定义一个npm命令:
    在这里插入图片描述
三. 安装和配置babel
  1. 安装babel
    在这里插入图片描述
  2. babel要想正常使用,还需要在工程根目录添加babel配置文件.babelrc.js
 {
    //babel默认编译es6 es7 es8 不认识jsx 需要配置
    "presets": [
        ["es2015", {"loose": true}],
        "react"
  ]
}
  1. babel中用到的包也要安装一下
    在这里插入图片描述
  2. 此时一个react工程最初的样子已经出来了
    在这里插入图片描述
四. 服务端webpack配置文件

还记得我们在client端是通过把<App/>渲染到document.body中,

//应用入口
import React from 'react'
import ReactDom from 'react-dom'//把react渲染成dom
import App from './App.jsx'

ReactDom.render(<App/>, document.getElementById('root'))

可是服务端是没有document.body的,这里暂且放一下,我们先来配置一下服务端webpack

const path = require('path')

module.exports = {
    target: 'node',//表示webpack打包出来的js是使用在哪个平台的
    //应用入口
    entry: {
        app: path.join(__dirname, '../client/server-entry.js')
    },

    //打包的文件路径
    output: {
        filename: 'server-entry.js',
        path: path.join(__dirname, '../dist'),
        //静态资源输出路径
        publicPath: '',
        libraryTarget: 'commonjs2'
    },

    //用于识别jsx
    module: {
        rules: [
            {
                test: /.jsx$/,//正则表达式
                loader: 'babel-loader'
            },
            {
                test: /.js$/,//正则表达式
                exclude: path.join(__dirname, '../node_modules'),
                loader: 'babel-loader'
            }
        ]
    },
}

接着来写服务端代码,这里用到了node的express框架

const express = require('express')

const ReactSSR = require('react-dom/server')

const fs = require('fs')

const path = require('path')

const template = fs.readFileSync(path.join(__dirname, '../dist/index.html'), 'utf8')

const serverEntry = require('../dist/server-entry').default

const app = express()

app.get('*', function(req, res) {
    const appString = ReactSSR.renderToString(serverEntry)
    res.send(template.replace('<app></app>', appString))
})

app.listen(3333, function() {
    console.log('listening on 3333')
})

服务端渲染的内容会替换前端模板html中的标签


<html>
    <head>
        <title>Document</title>
    </head>

    <body>
        <div id="root"><app></app></div>
    </body>
</html>
五. webpack dev server配置

它可以帮我们通过webpack启动一个服务,它的文件是存在在内存中的,每次有文件变化,它都会自动执行编译,这样就不需手动执行了。

六. hot module replacement配置

有了它,只要文件有变化,页面就会自动刷新

代码仓库在此。

RK3568(buildroot)利用squashfs+overlay实现嵌入式系统高可靠存储方案 本文详细介绍了在RK3568嵌入式平台上,基于Buildroot系统,利用squashfs只读根文件系统与overlayfs可写层相结合的高可靠存储方案。该方案能有效防止设备意外断电导致的系统文件损坏,通过内核配置、启动脚本编写及镜像制作,实现系统核心的只读保护与用户数据的持久化分离,显著提升嵌入式设备的现场稳定性。 阅读详情

相关推荐

逻辑漏洞:水平越权、垂直越权靶场练习

水平越权和垂直越权是组织中常见的管理问题,指的是员工在组织中所拥有的权力和责任超出其职位所应具备的范围。 水平越权是指员工在同一级别的职位上超越了其同事的权力和责任范围,通常表现为某个员工在团队中承担了过多的任务或权力,导致其他同事感到不公平或不满。 垂直越权则是指员工在组织中超越了其职位等级的权力和责任范围,通常表现为员工在没有得到上级批准的情况下做出决策或行动,可能会导致组织内部的混乱和冲突。

qq_68163788的博客 2470

react-demo项目:纯零搭建react项目(不用create-react-app脚手架)

详细见babel:https://babeljs.io/docs/en/babel-preset-react.html。webpack.config.js文件配置。安装webpack相关依赖。终端初始化,执行命令。

YanHSama的博客 1125

069、PCIE属性字段:缓存、顺序与安全

上个月调试一块自研的PCIE采集卡,遇到了一个诡异的问题:主机通过DMA从设备读取图像数据,大部分帧正常,但偶尔会出现局部数据错位,像是缓存没刷干净。用逻辑分析仪抓链路层报文,发现TLP(事务层包)本身完好,但内存中的数据就是不对。排查三天后,终于锁定在设备端TLP的**属性字段(Attribute Field)**配置上——那几位看似不起眼的缓存、顺序控制位,差点让项目延期。今天我们就拆解PCIE事务头中的这个关键区域,看看它如何影响系统性能与数据安全。

z534437748的博客 50

webpack+react环境搭建,不必要再使用create-react-app来创建,随意配置更方便

首先是配置文件package.json,里边包括所用到的babel以及关于react的一些依赖包。 { "name": "service", "version": "0.1.0", "private": true, "dependencies": { "@antv/g6": "^1.2.1", "@babel/core": "^7.2.0...

weixin_30632899的博客 430

【LIN总线测试】——LIN主节点数据链路层测试

LIN总线是基于UART/SCI(通用异步收发器/串行接口)的低成本串行通讯协议。其目标定位于车身网络模块节点间的低端通信,主要用于智能传感器和执行器的串行通信,而这正是CAN总线的带宽和功能所不要求的部分。本章节主要介绍LIN主节点数据链路层如何测试?

测试领域技术分享 2613

华为OD机试2025C卷-双十一最大花费金额[100分](Java_Python3_C++_C语言_JsNode_Go)实现100%通过率

双十一最大花费金额 - 动态规划解法 摘要:本文介绍了华为OD机试中"双十一最大花费金额"问题的动态规划解法。该问题要求在给定N件商品价格和优惠券面额X的情况下,选择若干商品使总花费不超过X且尽可能大。核心解法采用布尔型动态规划数组,记录每个金额是否可被拼出。算法时间复杂度为O(N*X),空间复杂度为O(X)。通过倒序遍历避免重复选择同一商品,最后从X向下查找第一个可达金额作为答案。文中提供了C++和Java的实现代码,并解释了与经典0-1背包问题的关系。 关键点: 问题本质是0-1背包/子集和问题的变体

2503_91057718的博客 46

react-demo项目:使用路由react-router-dom(不使用create-react-app脚手架)

项目使用的react-router-dom版本为v6.4.3。

YanHSama的博客 462

cadence17.4和16.6同时安装无法使用的问题

经过对报错的问题分析,发现还是17.4的lic文件和16.6的不一样,16.6的版本总是无法找到自己对应的lic文件。卸载了,重新单独安装16.6,这里就是正确的。包括使用这些工具去修复这些问题,都无法接近。已经放弃了,使用哪个版本就安装 哪个版本。这个也无法解决问题。

D_Katter的博客 2324

「自己动手丰衣足食」搭建React脚手架

很多朋友学习React都是从Facebook官方提供create-react-app脚手架开始的,脚手架开箱即用固然爽,可是如果想更进一步学习React,甚至更进一步学习流行的SPA应用,我们还是很有必要追根溯源。 接下来我会记录我是如何从零一步步搭建一个react脚手架。 一、梦开始的地方 初始化空项目 npm init -y webpack yarn add webpack w...

乐闻世界 734

【毕设护航】从0构建YOLOv8犬类识别系统,120种犬类精准检测+可视化界面全流程指南

本文介绍了一个基于YOLOv8的120种犬类目标检测与可视化系统毕业设计项目。该项目使用Stanford Dogs数据集,将图像分类任务转化为目标检测任务。主要内容包括:数据预处理(XML标注转换为YOLO格式)、YOLOv8模型训练与测试(包含训练脚本编写和推理实现),以及基于Tkinter的图形界面开发。该项目技术链条完整,涵盖检测、分割等多任务支持,适合作为计算机视觉方向的毕业设计选题,兼具技术深度和展示效果。

LXY_LOVE36的博客 96

cdk&java | 分子sdf文件生成

sdf

ASKCOS博客 1089

3.前端脚手架

一般来说,脚手架是帮你减少「为减少重复性工作而做的重复性工作」的工具. gulp和gulp-cli的区别可以看这个task - what does gulp-"cli" stands for? . 它跟前端常说的脚手架(scaffold)不是一个东西. CLI只是Command Line Interface的缩写. ==== 举个例子 你要写一个项目0,源语言为ES6,用了sass, 后端是node. 你每次完成一部分功能,你都要用把ES6编译到ES5、编译sass、压缩html文件. 每次修改代码都要做

全栈修炼之路 3788

UCIE Specification详解(三)

Protocol Layer(协议层)以及Die-to-Die Adapter

Crazzy_M的博客 1762

初探react技术栈(一)

react 最近已经开始使用react技术栈了,从头开始搭建项目,有必要的记录一下配置的过程以及项目分层的思路,这次后台项目采用的主要采用react-create-app脚手架以及Ant DesignUI 以及多语言react-intl create-react-app 这是官方维护的脚手架应用 我们一般也采用这个 $ npm or cnpm $ npm install create-rea...

weixin_33713707的博客 177

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

前端脚手架,听起来玄乎,实际呢?

开篇 第一次听说脚手架, 是我刚接触Vue,跟着网上大佬的文章,用Vue-cli从0搭建了一个Vue项目,一步一步配置,然后npm i, npm run dev,打开链接,一个网页就这么写好了,当时对于npm,webpack这些前端工程化一无所知,嘴里不自觉的吐出了两个字:'NB'。一年以后,一位新猿在Segmentfault上发出了这样...

weixin_33826609的博客 2770

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

前端脚手架的概要设计

随着前端工程化的理念不断深入,脚手架的出现就是为减少重复性工作而引入的命令行工具,众所周知, 新建项目是很繁琐的一项工作, 要考虑项目目录结构,基础库的配置, 各种规范等等. 在此过程中如何摆脱ctrl + c, ctrl + v,而通过脚手架从零到一搭建项目的方式变得更加有必要.另外,对于很多系统,他们的页面相似度非常高,所以就可以基于一套模板来搭建,虽然是不同的人开发,但用脚手架来搭建,相同的项目结构与代码书写规范,是很利于项目的后期维护的;

高灯GFE 651

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

别再全局安装了!用npx临时调用脚手架(create-react-app/vite)的保姆级教程

本文详细介绍了如何利用npx工具高效调用前端脚手架(如create-react-app和vite),避免全局安装带来的版本锁定和环境污染问题。通过实战示例和高级技巧,帮助开发者实现即用即走的脚手架调用方式,提升开发效率和项目可维护性。

weixin_42523670的博客 191

384专家Top-6路由架构剖析:noaux_tc与sqrtsoftplus如何成就DeepSeek-V4-Pro-w4a8-mtp的MoE核心?

本文深度剖析 **DeepSeek-V4-Pro-w4a8-mtp** 的 MoE 核心架构:384 个路由专家、Top-6 路由机制,以及 **noaux_tc** 与 **sqrtsoftplus** 两大关键设计如何协同工作,让这款 W4A8 量化模型在保持大模型能力的前提下,大幅降低激活开销与部署成本。 ## 📦 仓库里装的是什么? 与常见的"源码仓库"不同,本仓库是一个**完整的量

gitblog_00037的博客 430

【工程化】1191- 结合代码实践,全面学习前端工程化

前言前端工程化,简而言之就是软件工程 + 前端,以自动化的形式呈现。就个人理解而言:前端工程化,从开发阶段到代码发布生产环境,包含了以下几个内容:开发构建测试部署性能规范 下面我们根据上述...

pingan8787 452

结合代码实践,全面学习前端工程化

大厂技术高级前端Node进阶点击上方程序员成长指北,关注公众号回复1,加入高级Node交流群前言前端工程化,简而言之就是软件工程 + 前端,以自动化的形式呈现。就个人理解而言:前...

程序员成长指北 283

ReactN类组件实战:一行import替换react,this.global全局状态即插即用

ReactN 是一个把全局状态管理直接内置进 React 的开源扩展,让 ReactN 全局状态管理像 React 本地 state 一样原生可用。对于习惯类组件的开发者来说,它最杀手锏的能力是:只需把 `import React from "react"` 改成 `import React from "reactn"`,你的每个 React 类组件就自动拥有 `this.global`、`thi

gitblog_00090的博客 759

为ruby-opencv扩展编写可靠测试:单元测试实践与样本图像管理技巧

`ruby-opencv` 是 Ruby 语言的 OpenCV 封装,它的测试体系是一份典型的“C 扩展 + 图像数据”单元测试范本:基于 `test/unit`,配合统一的 `OpenCVTestCase` 基类与 `test/samples/` 下成套的样本图像,通过尺寸断言、MD5 指纹比对和错误分支验证来保证每个接口行为的确定性。本文带你读懂这套 ruby-opencv 单元测试的组织方式

gitblog_00818的博客 990

PhotoGIMP:Photoshop式界面补丁

换到GIMP的第一天:工具栏对不上、快捷键全乱、图层面板找不到。PhotoGIMP 是个免费界面补丁,专门把这些摆回 Photoshop 的老位置。它不改动GIMP本体,只替换配置文件——工具排布、快捷键、窗口布局一次归位。对从Adobe过来的用户,这意味着不用重学一套操作逻辑,打开就能上手。 ## 📦 跑起来:备份30秒,对照三平台表格装好界面补丁 前提只有一个:GIMP 3.0及以上版本

gitblog_00716的博客 1031

RedwoodJS 入门实战指南:从脚手架到全栈 CRUD、Storybook 与部署的完整工作流

> **导读**:本文基于 RedwoodJS 官方 test-project 脚手架(即 `yarn create redwood-app` 后生成的默认项目)整理而成,完整覆盖"安装依赖 → 启动开发服务器 → 用 Prisma 定义数据模型并迁移 → 用 Scaffold 生成全栈 CRUD → 用 Storybook 做前端优先开发 → 用 Jest 做全栈测试 → 配置部署与认证"这一条

gitblog_00138的博客 607

claude-code-templates:纯本地代码模板工具解析

代码模板工具是现代前端工程化中用于快速初始化项目结构的基础能力,其核心原理在于声明式定义目录骨架与样板文件的静态映射关系,通过文件系统操作实现零运行时依赖的结构预置。相比传统脚手架如 Create React App,它不涉及构建、编译或网络调用,技术价值体现在可组合性、增量更新和跨环境一致性上,广泛应用于 TypeScript 项目初始化、微前端目录分层、ESLint/Prettier 配置复用等场景。本文聚焦 claude-code-templates 这一典型代表,厘清其与 Anthropic 官方

weixin_32228501的博客 185

easy-vibe 跨平台开发技术全景:React Native / Flutter / Electron / Tauri 架构流派与选型实战指南

"Write once, run anywhere"(一次编写,处处运行)一直是软件工程领域的终极愿景之一。本指南以 easy-vibe 项目 Stage 3 跨平台实战模块为背景,系统梳理跨平台开发(Cross-Platform Development)的起源、四大核心技术流派(WebView 容器、Bridge 桥接、自绘引擎、系统 WebView 复用)的架构原理与工程取舍,并结合仓库中的

gitblog_00888的博客 391
上一篇: 封装一个在react上更易用的redux框架
下一篇: 不妨这样去理解JavaScript中的dom和bom
Colin_Mindset
博客等级 码龄12年 159粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值