rzpack v0.2.6
rzpack
介绍
Rzpack
是一款基于Webpack5
开发的React打包工具,通过Webpack5
的cache
、lazyCompilation
特性及esbuild
、swc
等工具的配合,大大提高开发环境的启动速度,热更速度及打包速度,内置了许多功能,无需复杂的配置即可快速开发。同时配套的create-rzpack
可以快速创建项目模板,省去项目框架搭建的时间。
环境配置
node 版本: >=16.0.0
。推荐使用nvm
进行 node 版本控制。
模板创建
# npm
npm create rzpack
# yarn
yarn create rzpack
# pnpm
pnpm create rzpack
然后按照提示操作即可! 你还可以通过附加的命令行选项直接指定项目名称和模板,例如:创建一个基础的Ts模板:
# npm
npm create rzpack rzpack-app --template react-ts
# yarn
yarn create rzpack rzpack-app --template react-ts
# pnpm
pnpm create rzpack rzpack-app --template react-ts
模板列表:
react-ts
- ts模板antd
- antd模版admin
- 基础后台管理平台(侧边菜单版)的模版admin-header-menu
- 基础后台管理平台(顶部菜单版)的模版
模板推荐使用admin-header-menu
,选择模板之后还有:JSX文件处理Loader
、cssScoped(类似Vue的style scoped)
、commitLint
功能可以选择。
项目结构
基于admin-header-menu
模板说明
|--src
| |--api
| | |--axios // 请求方法的封装
| | |--system.ts // 基础框架需要的请求
| |--assets // 静态资源
| | |--img
| | |--svg
| | | |--menu // 菜单图标
| |--components // 基础组件
| |--layout // 页面布局
| |--model // 数据模型(一般为后端返回数据的类型定义)
| |--pages // 业务页面
| |--routes // 路由
| | |--routes.ts // mock使用的数据
| | |--tools.tsx // 路由处理方法
| |--stores // 页面store
| |--theme // 主题变量
| | |--globalVars.ts // 全局变量
| | |--index.ts // 覆盖antd的全局变量
| | |--reset.less // 无法通过antd变量覆盖的样式,通过此文件样式覆盖
| |--utils // 公共方法和hooks
| | |--constants.ts // 常量
| | |--storage.ts // 本地缓存工具
| | |--tools.tsx // 常用方法
| | |--useModal.tsx // Modal组件hooks
| | |--useQuery.tsx // react router的query参数获取
| |--app.less // 全局样式
| |--App.tsx // App组件
| |--main.tsx // 入口组件
|--rzpack.config.ts // 脚手架配置文件
开发环境
通过配置packages.json
的脚本命令启动开发环境,并且可指定参数。
{
"scripts": "rzpack"
}
// 或者
{
"scripts": "rzpack dev"
}
// 或者
{
"scripts": "rzpack start"
}
参数
属性 | 说明 | 类型 | 默认 | 是否必填 |
---|---|---|---|---|
--c | 指定配置文件 | string | ./rzpack.config.ts | 非必填 |
--config | 指定配置文件 | string | ./rzpack.config.ts | 非必填 |
--m | 指定webpack启动模式 | string | development | 非必填 |
--mode | 指定webpack启动模式 | string | development | 非必填 |
--host | 开发服务的host | string | - | 非必填 |
--port | 开发服务的端口 | number | - | 非必填 |
--open | 是否启动后自动打开 | boolean | - | 非必填 |
--ui | 是否启动可视化配置页 | boolean | true | 非必填 |
打包
通过配置packages.json
的脚本命令打包,并且可指定参数。
{
"scripts": "rzpack build"
}
参数
属性 | 说明 | 类型 | 默认 | 是否必填 |
---|---|---|---|---|
--c | 指定配置文件 | string | ./rzpack.config.ts | 非必填 |
--config | 指定配置文件 | string | ./rzpack.config.ts | 非必填 |
--m | 指定webpack启动模式 | string | production | 非必填 |
--mode | 指定webpack启动模式 | string | production | 非必填 |
--outDir | 打包输出目录 | string | dist | 非必填 |
--bundleSize | 是否开启打包文件大小分析页 | boolean | - | 非必填 |
--bundleTime | 是否输出打包时间 | boolean | - | 非必填 |
配置
属性 | 说明 | 类型 | 默认 | 是否必填 |
---|---|---|---|---|
antdTheme | antd主题变量设置 | LessVars | - | 非必填 |
lessVars | less全局变量设置 | LessVars | - | 非必填 |
assets | 资源文件处理 | RzpackAssets | - | 非必填 |
buildInfo | 是否在控制台打印编译信息 | boolean\|BuildInfoWebpackPluginOptions | - | 非必填 |
cache | 是否使用webpack5缓存 | boolean | true | 非必填 |
entry | 打包入口 | string\|string[]\|Record<string, string> | ./src/main.tsx | 非必填 |
gzip | 是否启用gzip | boolean | - | 非必填 |
html | htmlPlugin插件设置(配置参考htmlWebpackPlugin插件) | HtmlWebpackPlugin.Options | - | 非必填 |
output | 输出目录 | Output | dist | 非必填 |
publicPath | 静态资源目录 | string | public | 非必填 |
server | 代理配置,当开启可视化配置时此处配置的接口代理无效 | WebpackDevServerConfiguration | - | 非必填 |
lazyCompilation | 实验性功能 | LazyCompilationOptions | - | 非必填 |
moduleFederation | 模块联邦 | ModuleFederationPluginOptions | - | 非必填 |
webpackChain | 使用webpackChain重写webpack配置 | RzpackWebpackChain | - | 非必填 |
proxyFile | 可视化配置的代理,仅在开启可视化配置时才生效 | string | - | 非必填 |
reactRefresh | 是否开启React代码热更新 | boolean | - | 非必填 |
million | 是否使用Million.js | boolean\|MillionOptions | - | 非必填 |
export interface LessVars {
// 全局变量(直接定义的变量优先级高于变量文件)
vars?: Record<string, string>
// 全局变量文件
file?: string
}
export interface RzpackAssets {
// jsx编译处理器
jsxTools?: JSX_TOOLS
// 是否使用cssScoped(类似Vue的scoped功能)
cssScoped?: boolean
// 是否压缩图片
imageMini?: boolean
}
export enum JSX_TOOLS {
ESBUILD = 'esbuild',
SWC = 'swc',
}
export interface ModuleFederationPluginOptions {
// 模块名称
name: string
// 模块导出名称
filename?: string
// 要共享的依赖
shared?: ModuleFederationShared[] | ModuleFederationSharedAuto
// 模块暴露的内容
exposes?: boolean | Record<string, string>
// 模块引入的内容
remotes?: Record<string, string>
}
export type RzpackWebpackChain = (w: WebpackChain) => WebpackChain
常见问题
1. 网站标题更改
推荐使用配置文件配置
import { defineConfig } from 'rzpack'
export default defineConfig({
html: {
title: 'rzpack-app',
},
})
2. 支持 css module 吗?
默认开启css module
,文件后缀为*.module.less
即可。
3. css Scoped怎么开启和使用
通过配置文件设置assets.cssScoped: true
,文件后缀为*.scoped.less
即可。
import { defineConfig } from 'rzpack'
export default defineConfig({
assets: {
cssScoped: true,
},
})
css Scoped
使用的库:@renzp/jsx-scoped-loader、@renzp/css-scoped-loader
原理:通过将css文件中的类名全部转化为xx[data-scoped-xxx]
,然后将每个有className的元素加上data-scoped-xxx
属性
css
/* 转化前 */
.test{
color: red;
}
/* 转化后 */
.test[data-scoped-729a2688]{
color:red;
}
tsx
// 转化前
<div className="test">test</div>
// 转化后
<div class="test" data-scoped-729a2688="true">test</div>
如果需要在css Scoped文件中写全局样式可以通过::global
::global .test {
color: red;
}
4. 如何快速定位需要修改哪个 antd 的变量?
变量地址参考: 定制主题
5. svg 怎么用?
脚手架引入svgr。
- 默认一个 svg 会被编译成 React 组件。
- 如果需要使用地址,不想被编译成组件,可以在 URL 后面加上?url
.content {
background-image: url('./some-svg.svg?url');
}
6.怎么配置接口代理
可视化配置
如果使用了可视化配置页面(推荐使用),则直接通过页面配置即可,会自动在根目录下生成proxy.config.json
文件。启动开发环境后,则会有http://127.0.0.1:8000/__RZPACK_UI__
为可视化配置的路径
Rzpack UI run at:
- Local: http://127.0.0.1:8000/__RZPACK_UI__
- Network: http://10.220.39.128:8000/__RZPACK_UI__
App run at:
- Local: http://127.0.0.1:8000
- Network: http://10.220.39.128:8000
Note that the development build is not optimized.
To create a production build, run yarn build.
webpack配置
如果想通过webpack参数配置,可通过配置文件的server
属性配置,配置方法参考devServer.proxy
import { defineConfig } from 'rzpack'
export default defineConfig({
server: {
proxy: {
'/api': 'http://127.0.0.0:3000',
},
},
})
Tips: 注意,可视化的优先级高于webpack配置,即:如果开启可视化配置,则webpack配置的代理无效
7.提速开发环境
默认使用esbuild
打包,同时默认开启了Webpack5
的cache
功能。如果还不满意的话,可以开启webpack5
的lazyCompilation(懒编译)
:lazyCompilation: { imports: true, entries: false }
。懒编译参考文档: experiments.lazyCompilation,特别注意:懒编译只能在开发环境中启用,生产环境即使配置了也是禁用的。
import { defineConfig, JSX_TOOLS } from 'rzpack'
export default defineConfig({
assets: {
jsxTools: JSX_TOOLS.ESBUILD,
},
lazyCompilation: {
imports: true,
entries: false,
},
})
4 months ago
5 months ago
6 months ago
8 months ago
11 months ago
11 months ago
11 months ago
10 months ago
10 months ago
10 months ago
8 months ago
10 months ago
8 months ago
10 months ago
9 months ago
11 months ago
9 months ago
11 months ago
8 months ago
8 months ago
10 months ago
11 months ago
8 months ago
10 months ago
12 months ago
9 months ago
11 months ago
10 months ago
11 months ago
1 year ago
1 year ago
1 year ago