出码类型选择
在实际生产中,我们会根据不同的业务场景,选择不同的出码类型:
出码类型 | 业务场景 | 说明 |
---|---|---|
完整开发环境 | 适合新业务从零搭建 | 输出一套完整的专题类项目工程文件,采用 Vite 作为构建工具,内部集成了 Typescript、React、Prettier 等常用工具快速上手。 |
组件形式 | 在已有项目持续集成 | 输出与组件相关的代码文件,可按照 使用教程 灵活的集成到已有的项目中使用。 |
完整开发环境
适合新业务从零搭建。提供一套完整的专题类项目工程文件,采用 Vite
作为构建工具,内部集成了 Typescript、React、Prettier 等常用工具,开发者可在此基础上进行二次开发。
系统要求
Node.js 16.14 或更高版本。
支持 macOS、Windows(包括 WSL)和 Linux。
安装依赖
- npm
- Yarn
- pnpm
# 安装依赖
npm install
# 启动开发环境
npm run dev
# 安装依赖
yarn install
# 启动开发环境
yarn dev
# 安装依赖
pnpm install
# 启动开发环境
pnpm run dev
目录结构
这是 cube-vite-template
生成的默认目录结构。
├── README.md
├── index.html
├── package.json
├── src
│ ├── App.tsx
│ ├── components
│ ├── cube // 魔方主要目录
│ │ ├── card // 卡片目录
│ │ │ ├── components // 卡片级组件目录
│ │ │ ├── context // 卡片共享 Context
│ │ │ ├── hooks // 卡片自定义 Hooks
│ │ │ └── view // 卡片源码
│ │ │ └── Card
│ │ ├── index.tsx
│ │ ├── styles // 卡片公共样式
│ │ ├── types // 魔方 TS 类型定义目录
│ │ └── utils // 工具方法目录
│ ├── data.tsx
│ ├── main.tsx
│ └── styles
├── tsconfig.json
├── tsconfig.node.json
├── vite.config.ts
├── vite.md
└── yarn.lock
组件形式
在已有项目持续集成。提供与组件相关的代码文件,可灵活的集成到已有的项目中使用。
使用方式
1. 解压输出包,将 cube
目录完整拷贝到项目根目录下的 src
文件夹内。
压缩包文件结构
.
├── README.md // 使用文档
└── cube // 组件目录
├── Demo.tsx // 调用示例文件
├── card // 卡片目录
│ ├── components
│ ├── context
│ ├── hooks
│ └── view
├── data.tsx // 专题数据
├── index.tsx
├── mergePackage.mjs // 自动合并 package.json 脚本
├── package.json
├── styles // 卡片公共样式
├── types
└── utils
2. 合并 package 依赖,在根目录运行下列命令,并重新安装依赖。
- npm
- Yarn
- pnpm
# 合并 package 依赖
node ./src/cube/mergePackage.mjs
# 重新安装依赖
npm install
# 合并 package 依赖
node ./src/cube/mergePackage.mjs
# 重新安装依赖
yarn install
# 合并 package 依赖
node ./src/cube/mergePackage.mjs
# 重新安装依赖
pnpm install
提示
合并操作前会备份 package.json
文件到 bak
目录下备用,并会提示当前项目与 cube 组件依赖之间的版本依赖冲突(需按需解决),默认采用 cube 依赖版本。
3. 脚手架配置,这里以 vite 为例,其他脚手架请参考对应文档。
增加
styled-jsx/babel
插件,用于支持 styled-jsx 语法。增加
alias
配置,用于支持 cube 组件内部的引用。增加
define
配置,cube 组件依赖的环境变量。
vite.config.js
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import path from 'path';
export default defineConfig({
plugins: [
react({
babel: {
plugins: ['styled-jsx/babel'],
},
}),
],
resolve: {
alias: {
'@cube': path.resolve(__dirname, 'src/cube'),
'~@cube': path.resolve(__dirname, 'src/cube'),
},
},
define: {
'process.env.IS_FRONT_ENV': JSON.stringify(true),
'process.env.APP_ENV': JSON.stringify('production'),
},
});
调整 tsconfig 配置,增加 baseUrl
配置,用于支持 cube 组件内部的引用。
tsconfig.json
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@cube/*": [
"src/cube/*"
]
},
"moduleResolution": "Node",
"allowSyntheticDefaultImports": true,
},
}
4. 在项目中引入 cube 组件。
src/App.tsx
import Demo from './cube/Demo';
function App() {
return <Demo />;
}
export default App;
常见问题
- 关于
REM
默认配置16px
,如需调整查看./src/cube/styles/_mixin.scss
中px2rem
方法。 - 卡片中并未包含样式重置功能
reset.css
,如需重置参考完整框架中的配置。 - 关于
build
阶段 ts 类型报错问题,举例swiper@^8.0.0
在typescript@^5.0.0
下类型错误,可通过调整tsconfig.json
中moduleResolution: "node"
解决。 - 当模块没有默认导出时允许导出模块,
tsconfig.json
中定义allowSyntheticDefaultImports: true
。