摆脱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配置

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

代码仓库在此。

MIT6.824-lab2D-2022(日志压缩详细讲解) 从paper中去讲解,并实现关于lab2D的代码。 阅读详情

相关推荐

Jetpack Compose Navigation实战:从基础到高级导航模式

本文全面解析Jetpack Compose Navigation在Android开发中的应用,从基础导航实现到高级模式(如单任务/单顶模式),涵盖参数传递、嵌套导航、深层链接等核心功能。通过实战代码示例展示如何优化导航性能,并与ViewModel、Hilt等架构组件整合,为开发者提供高效的Compose导航解决方案。

pz890123456的博客 373

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

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

YanHSama的博客 1125

Anthropic三件套重构AI工作流:Claude Code、Design与桌面宠物实战指南

AI协作已从单点工具迈入系统化工作流阶段。理解AI作为‘协作者’而非‘执行器’的本质,是提升工程效率的关键前提;其核心在于对任务调度、自适应推理与人机交互边界的重新定义。Claude Code的xhigh effort机制体现了分层推理的工程智慧,Claude Design以HTML为原生设计语言实现设计-代码一体化,而桌面宠物则将抽象的token消耗具象为可感知的硬件反馈。这些能力共同指向一个趋势:AI工作流正从prompt调参走向契约式委派、从界面割裂走向跨模态统一。本文结合Opus 4.7最新实践,解

a4512138的专栏 484

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

1.triton镜像使用

1)拉取镜像2)启动容器指定模型仓库时可以执行server下的./fetch_model.sh,见2.2部分GPU版本的启动CPU版本的启动区别只在于--gpus=1这个参数注意:docker19.03之前的版本使用gpu要指定显卡硬件名,docker19.03之后的需要安装nvidia-container-toolkit或nvidia-container-runtime安装之后要重启docker查看gpus参数是否安装成功重新执行我遇到了如下错误先使用非GPU版本的。

天启的博客 2077

【C#】控制设备管理器中设备的启用/禁用_20220506

通过C#代码实现设备管理器的启用/停止 引入Manamger程序集,查找到所需设备,控制启停

weixin_45475139的博客 4527

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

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

YanHSama的博客 462

基于IDEA与Mill构建Windows下的Chisel开发环境——香山处理器源码解析实战

本文详细指导如何在Windows系统下使用IDEA集成开发环境和Mill构建工具搭建Chisel开发环境,并以香山处理器源码为实战案例进行解析。内容涵盖环境准备、源码获取、工程构建、IDEA配置优化及代码阅读技巧,帮助开发者高效学习硬件设计语言。

a1b2c3d的博客 717

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

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

乐闻世界 734

专为AI打造的浏览器:内存占用仅为Chrome的1/9、比Chrome快11倍(Docker部署教程,支持飞牛nas等服务器部署)

🚀 专为AI打造的无头浏览器来了! 用Zig从零构建,内存仅Chrome的1/9,速度快11倍,原生CDP协议支持Docker部署,适合爬虫、自动化测试和AI代理应用。✨

XiaoqiangClub的博客 732

基于BERTopic模型的英文20新闻数据集主题聚类及可视化

BERTopic是基于深度学习的一种主题建模方法。BERT是一种用于NLP的预训练策略,它成功地利用了句子的深层语义信息。

Cachel Wood的博客 1460

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

改进yolov8|BackBone改进:PWConv、FasterNeXt替换yolov8主干网络

各位哥哥姐姐弟弟妹妹大家好,我是干饭王刘姐,主业干饭,主业2.0计算机研究生在读。和我一起来改进yolov8变身计算机大牛吧!本文中的论文笔记都是刘姐亲自整理,原创整理哦~

weixin_44379985的博客 749

初探react技术栈(一)

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

weixin_33713707的博客 177

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

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

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

weixin_33826609的博客 2770

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

前端脚手架的概要设计

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

高灯GFE 651

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

别再全局安装了!用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、付费专栏及课程。

余额充值