使用vite脚手架,体验formily踩坑

今天在看formily,于是想在本地启一个项目来体验一把。

考虑到cra太重了,下载下来得半天,于是乎考虑用vite的脚手架,比较轻量。踩了一些坑,记录一下

创建项目

yarn create vite vite-react-formily --template react-ts

创建这一步比较顺利,没什么问题,能正常启动项目

接入formily

按照formily v2官方文档,直接执行命令,一把嗦!

pnpm install --save @formily/core

pnpm install --save @formily/react

pnpm install --save antd moment @formily/antd

报错了

js 复制代码
[vite] error while updating dependencies:
Error: Build failed with 1 error:
node_modules/.pnpm/react-sticky-box@0.9.3_react@18.2.0/node_modules/react-sticky-box/dist/es/index.js:3:22: ERROR: Could not resolve "prop-types"
    at failureErrorWithLog (/Users/wenqiongweng/Documents/zaoren-projects/practice/vite-react-formily/node_modules/.pnpm/esbuild@0.18.20/node_modules/esbuild/lib/main.js:1649:15)
    at /Users/wenqiongweng/Documents/zaoren-projects/practice/vite-react-formily/node_modules/.pnpm/esbuild@0.18.20/node_modules/esbuild/lib/main.js:1058:25
    at /Users/wenqiongweng/Documents/zaoren-projects/practice/vite-react-formily/node_modules/.pnpm/esbuild@0.18.20/node_modules/esbuild/lib/main.js:1525:9
    at runMicrotasks (<anonymous>)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
error Command failed with exit code 1.

我乍一看,是esbuild在构建的时候失败了,prop-types是不是不兼容es6啊,后来发现事情远比想象的简单。就是没有安装prop-types,因为prop-types在peerDenpendencies里面。

pnpm install prop-types

这个问题是解决了,但是继续报错:

js 复制代码
[plugin:vite:css] [less] '~antd/es/style/themes/index.less' wasn't found. Tried - /Users/.../practice/vite-react-formily/node_modules/.pnpm/@formily+antd@2.3.0_0d18122412ae77aea4037356ef0094e8/node_modules/@formily/antd/esm/form-item/~antd/es/style/themes/index.less,node_modules/~antd/es/style/themes/index.less,npm://~antd/es/style/themes/index.less,~antd/es/style/themes/index.less

应该是在找 antd/es/style/themes/index.less 这个路径的时候,没解析对,我搜了一下,应该是vite的配置问题,没有配置该怎么解析

参考链接

js 复制代码
// 修改了 vite.config.js 的配置
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import path from 'path'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [react()],
  resolve: {
    alias: [
      {
        find: /^~/, 
        replacement: '',
      },
      {
        find: '@', 
        replacement: path.resolve(__dirname, './src')
      }
    ],
  }
})

路径的问题是解决了,但是继续报错!

这是个大坑。之前一把嗦,终于遭报应了,我发现antd里面根本没有这个文件!原因是 formily 仅支持antd版本 <4.22.8

issues讨论

其实从 @formily/antd 的 package.json 里面也能看出来,但是官方没说啊!强烈建议官方文档说明一下antd的支持版本!!!

于是,在package.json里把antd的版本限制一下,但是又出现了一个问题:

js 复制代码
[plugin:vite:css] [less] Inline JavaScript is not enabled. Is it set in your options?
/Users/wenqiongweng/Documents/zaoren-projects/practice/vite-react-formily/node_modules/.pnpm/antd@4.22.8_react-dom@18.2.0+react@18.2.0/node_modules/antd/es/style/color/bezierEasing.less:110:0
107|  // It is hacky way to make this function will be compiled preferentially by less
108|  // resolve error: `ReferenceError: colorPalette is not defined`
109|  // https://github.com/ant-design/ant-motion/issues/44
   |                                                        ^
110|  .bezierEasingMixin();
111|

看起来应该是vite里的less插件某个配置项没开启,我搜了一下,改一下vite.config.ts的配置就行

js 复制代码
css: {
    preprocessorOptions: {
      less: {
        javascriptEnabled: true,
      },
    },
  },

搞定了,跑起来了,可以愉快的体验formily了。

总结

虽然说,使用vite的脚手架确实需要自己配置一些东西,但是formily也有点坑啊,首先没有一个完整的最佳实践流程,现在antd5.0已经发行很久了,也没有在官方文档里面说明antd的限制版本,对小白有点不太友好。

相关推荐
定栓3 分钟前
Webpack迁到Vite第一节:模块系统迁移:require → import
运维·前端·webpack
小熊在忙fpga12 分钟前
N32G430芯片的flash表示
前端·javascript·html
Data analyse45618 分钟前
App埋点版本兼容的字段迁移校验
大数据·运维·服务器·前端·数据库·数据分析
todoitbo24 分钟前
本来只想给内网开个口子,Natapp 却多给了一道防护
前端·javascript·vue.js·内网穿透·网络防护·natapp
会灭火的程序员29 分钟前
SuperMap AgentX Server智能体接入WEB应用技术文档
前端·supermap·agentx·agentx server
CRMEB34 分钟前
商品 SKU 设计,从简单规格到多规格踩过什么
java·前端·数据库·开源
Chloe.Zz35 分钟前
一篇入门Agent
开发语言·前端·javascript
java1234_小锋1 小时前
【技术专题】HTML5 网页技术 - HTML5 表格标签
前端·html·html5
雪芽蓝域zzs1 小时前
JS 项目转 TS 项目(Vue3 + 若依这类后台项目)完整改造清单
前端·vue.js