From 06cfa982262318f541703ce81a602c62f5d50380 Mon Sep 17 00:00:00 2001 From: xingying Date: Wed, 21 Jun 2023 18:01:40 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=A7=A3=E5=86=B3=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E6=94=B9=E5=8A=A8=E5=AE=9E=E6=97=B6=E9=A2=84=E8=A7=88=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo/web/docs/display/index.tsx | 8 +++--- demo/web/docs/input/demo/desktop.tsx | 15 ++++++++--- demo/web/docs/input/demo/mobile.tsx | 17 ++++++++++--- demo/web/docs/server/demo/judge/index.tsx | 20 +++++++-------- demo/web/docs/server/demo/recommend/index.tsx | 20 +++++++-------- demo/web/docs/server/demo/same/index.tsx | 24 +++++++++--------- demo/web/docs/server/demo/transfer/index.tsx | 24 +++++++++--------- demo/web/package.json | 20 +++++++-------- demo/web/public/fonts/RareWordsFonts.ttf | Bin 0 -> 104724 bytes frontend/input/h5-react/package.json | 5 +--- frontend/input/h5-react/src/index.tsx | 5 ++-- frontend/input/pc-react/package.json | 2 +- frontend/input/pc-react/src/index.tsx | 4 +-- frontend/utils/README.md | 2 +- frontend/utils/package.json | 6 ++--- frontend/utils/src/contants/index.ts | 2 +- frontend/utils/src/contants/zdata-local.ts | 15 ++++++++++- frontend/utils/src/font-loader.ts | 4 +++ frontend/utils/src/get-words-data.ts | 4 ++- frontend/utils/tsconfig.json | 3 +-- 20 files changed, 116 insertions(+), 84 deletions(-) create mode 100644 demo/web/public/fonts/RareWordsFonts.ttf diff --git a/demo/web/docs/display/index.tsx b/demo/web/docs/display/index.tsx index 63accdd..5d42a99 100644 --- a/demo/web/docs/display/index.tsx +++ b/demo/web/docs/display/index.tsx @@ -1,10 +1,10 @@ import React from 'react'; -import { FontLoader } from 'ant-rare-words-utils'; +import { FontLoader } from '../../../../frontend/utils/src/index'; import './index.less'; export default () => { - const [logs, setLogs] = React.useState<{ msg: string; time: number }[]>([]); - const [loaded, setLoaded] = React.useState(false); + const [logs, setLogs] = React.useState([]); + const [loaded, setLoaded] = React.useState(false); let startTime = Date.now(); // 记录日志 @@ -19,6 +19,8 @@ export default () => { startTime = Date.now(); printLog('开始加载字体', false); new FontLoader({ + // 字体文件放置在demo/web/public/fonts下,可以改成自定义的在线字体地址 + fontSrc: window.location.origin + '/fonts/RareWordsFonts.ttf', fontName: 'rare-words-font', onSuccess: () => { setLoaded(true); diff --git a/demo/web/docs/input/demo/desktop.tsx b/demo/web/docs/input/demo/desktop.tsx index 6ea2868..2c7b0ae 100644 --- a/demo/web/docs/input/demo/desktop.tsx +++ b/demo/web/docs/input/demo/desktop.tsx @@ -1,10 +1,11 @@ import React from 'react'; -import RareWordsInput from 'ant-rare-words-input-react-pc'; +import RareWordsInput from '../../../../../frontend/input/pc-react/src/index'; +import { FontLoader } from '../../../../../frontend/utils'; import './desktop.less'; export default () => { - const [logs, setLogs] = React.useState<{ msg: string; time: number }[]>([]); - const [value, setValue] = React.useState(''); + const [logs, setLogs] = React.useState([]); + const [value, setValue] = React.useState(''); let startTime = Date.now(); // 记录日志 @@ -31,6 +32,14 @@ export default () => { // 开始加载字体 React.useEffect(() => { printLog('开始加载组件'); + new FontLoader({ + // 字体文件放置在demo/web/public/fonts下,可以改成自定义的在线字体地址 + fontSrc: window.location.origin + '/fonts/RareWordsFonts.ttf', + fontName: 'RareWordsFont', + onError: (err) => { + printLog('字体加载失败 - ' + err.message); + }, + }); }, []); return ( diff --git a/demo/web/docs/input/demo/mobile.tsx b/demo/web/docs/input/demo/mobile.tsx index c786731..14888e4 100644 --- a/demo/web/docs/input/demo/mobile.tsx +++ b/demo/web/docs/input/demo/mobile.tsx @@ -1,11 +1,12 @@ import React from 'react'; -import RareWordsInput from 'ant-rare-words-input-react'; +import RareWordsInput from '../../../../../frontend/input/h5-react/src/index'; +import { FontLoader } from '../../../../../frontend/utils'; import './mobile.less'; export default () => { - const [logs, setLogs] = React.useState<{ msg: string; time: number }[]>([]); - const [value, setValue] = React.useState(''); - const [visible, setvisible] = React.useState(false); + const [logs, setLogs] = React.useState([]); + const [value, setValue] = React.useState(''); + const [visible, setvisible] = React.useState(false); const startTime = Date.now(); // 记录日志 @@ -31,6 +32,14 @@ export default () => { // 开始加载字体 React.useEffect(() => { printLog('开始加载组件'); + new FontLoader({ + // 字体文件放置在demo/web/public/fonts下,可以改成自定义的在线字体地址 + fontSrc: window.location.origin + '/fonts/RareWordsFonts.ttf', + fontName: 'RareWordsFont', + onError: (err) => { + printLog('字体加载失败 - ' + err.message); + }, + }); }, []); return ( diff --git a/demo/web/docs/server/demo/judge/index.tsx b/demo/web/docs/server/demo/judge/index.tsx index 045cb6c..1281ffb 100644 --- a/demo/web/docs/server/demo/judge/index.tsx +++ b/demo/web/docs/server/demo/judge/index.tsx @@ -1,20 +1,20 @@ import React from 'react'; import { Input, Button, Card, Alert } from 'antd'; -import RareWordsInput from 'ant-rare-words-input-react-pc'; import Icon from '@ant-design/icons'; +import RareWordsInput from '../../../../../../frontend/input/pc-react/src/index'; import { isRareNameService } from '../../../../service'; import { KeyBoardIcon } from '../../../../components/icons'; import './index.less'; export default () => { - const [logs, setLogs] = React.useState<{ msg: string; time: number }[]>([]); - const [name, setName] = React.useState(''); - const [loading, setLoading] = React.useState(false); - const [inputError, setInputError] = React.useState(false); - const [showSuccess, setShowSuccess] = React.useState(false); - const [result, setResult] = React.useState(''); - const [showError, setShowError] = React.useState(false); - const [errorMsg, setErrorMsg] = React.useState(''); + const [logs, setLogs] = React.useState([]); + const [name, setName] = React.useState(''); + const [loading, setLoading] = React.useState(false); + const [inputError, setInputError] = React.useState(false); + const [showSuccess, setShowSuccess] = React.useState(false); + const [result, setResult] = React.useState(''); + const [showError, setShowError] = React.useState(false); + const [errorMsg, setErrorMsg] = React.useState(''); let startTime = Date.now(); // 记录日志 @@ -33,7 +33,7 @@ export default () => { /** * 姓名发生变化 */ - const handleNameChange = (e: React.ChangeEvent) => { + const handleNameChange = (e) => { const { value: inputValue } = e.target; if (inputValue) { if (showError) setShowError(false); diff --git a/demo/web/docs/server/demo/recommend/index.tsx b/demo/web/docs/server/demo/recommend/index.tsx index 72fc842..107c656 100644 --- a/demo/web/docs/server/demo/recommend/index.tsx +++ b/demo/web/docs/server/demo/recommend/index.tsx @@ -1,22 +1,22 @@ import React from 'react'; import { Input, Button, Card, Alert, Tag, Empty, Tooltip } from 'antd'; -import RareWordsInput from 'ant-rare-words-input-react-pc'; import Icon, { CopyOutlined } from '@ant-design/icons'; import { CopyToClipboard } from 'react-copy-to-clipboard'; import { associateRareNameService } from '../../../../service'; import { WORD_TYPE_TO_COLOR } from '../../../../constants'; import { KeyBoardIcon } from '../../../../components/icons'; +import RareWordsInput from '../../../../../../frontend/input/pc-react/src/index'; import './index.less'; export default () => { - const [logs, setLogs] = React.useState<{ msg: string; time: number }[]>([]); - const [name, setName] = React.useState(''); - const [loading, setLoading] = React.useState(false); - const [inputError, setInputError] = React.useState(false); - const [showSuccess, setShowSuccess] = React.useState(false); - const [result, setResult] = React.useState<{ name: string; remarks: string }[]>([]); - const [showError, setShowError] = React.useState(false); - const [errorMsg, setErrorMsg] = React.useState(''); + const [logs, setLogs] = React.useState([]); + const [name, setName] = React.useState(''); + const [loading, setLoading] = React.useState(false); + const [inputError, setInputError] = React.useState(false); + const [showSuccess, setShowSuccess] = React.useState(false); + const [result, setResult] = React.useState([]); + const [showError, setShowError] = React.useState(false); + const [errorMsg, setErrorMsg] = React.useState(''); let startTime = Date.now(); // 记录日志 @@ -35,7 +35,7 @@ export default () => { /** * 姓名发生变化 */ - const handleNameChange = (e: React.ChangeEvent) => { + const handleNameChange = (e) => { const { value: inputValue } = e.target; if (inputValue) { if (showError) setShowError(false); diff --git a/demo/web/docs/server/demo/same/index.tsx b/demo/web/docs/server/demo/same/index.tsx index 87c3757..2dd777c 100644 --- a/demo/web/docs/server/demo/same/index.tsx +++ b/demo/web/docs/server/demo/same/index.tsx @@ -1,6 +1,5 @@ import React from 'react'; import { Input, Button, Card, Alert } from 'antd'; -import RareWordsInput from 'ant-rare-words-input-react-pc'; import Icon from '@ant-design/icons'; import { isSameRareNameService } from '../../../../service'; import { @@ -9,18 +8,19 @@ import { ErrorIcon, QuestionIcon, } from '../../../../components/icons'; +import RareWordsInput from '../../../../../../frontend/input/pc-react/src/index'; import './index.less'; export default () => { - const [logs, setLogs] = React.useState<{ msg: string; time: number }[]>([]); - const [nameOne, setNameOne] = React.useState(''); - const [nameTwo, setNameTwo] = React.useState(''); - const [loading, setLoading] = React.useState(false); - const [inputError, setInputError] = React.useState(false); - const [showSuccess, setShowSuccess] = React.useState(false); - const [result, setResult] = React.useState(''); - const [showError, setShowError] = React.useState(false); - const [errorMsg, setErrorMsg] = React.useState(''); + const [logs, setLogs] = React.useState([]); + const [nameOne, setNameOne] = React.useState(''); + const [nameTwo, setNameTwo] = React.useState(''); + const [loading, setLoading] = React.useState(false); + const [inputError, setInputError] = React.useState(false); + const [showSuccess, setShowSuccess] = React.useState(false); + const [result, setResult] = React.useState(''); + const [showError, setShowError] = React.useState(false); + const [errorMsg, setErrorMsg] = React.useState(''); let startTime = Date.now(); // 记录日志 @@ -39,7 +39,7 @@ export default () => { /** * 姓名发生变化 */ - const handleNameOneChange = (e: React.ChangeEvent) => { + const handleNameOneChange = (e) => { const { value: inputValue } = e.target; if (inputValue) { if (showError) setShowError(false); @@ -60,7 +60,7 @@ export default () => { /** * 姓名发生变化 */ - const handleNameTwoChange = (e: React.ChangeEvent) => { + const handleNameTwoChange = (e) => { const { value: inputValue } = e.target; if (inputValue) { if (showError) setShowError(false); diff --git a/demo/web/docs/server/demo/transfer/index.tsx b/demo/web/docs/server/demo/transfer/index.tsx index db3991a..752cad0 100644 --- a/demo/web/docs/server/demo/transfer/index.tsx +++ b/demo/web/docs/server/demo/transfer/index.tsx @@ -9,24 +9,24 @@ import { Empty, Tooltip, } from 'antd'; -import RareWordsInput from 'ant-rare-words-input-react-pc'; import Icon, { CopyOutlined } from '@ant-design/icons'; import { CopyToClipboard } from 'react-copy-to-clipboard'; import { transferRareNameService, transferUniAndPuaRareNameService } from '../../../../service'; import { KeyBoardIcon } from '../../../../components/icons'; +import RareWordsInput from '../../../../../../frontend/input/pc-react/src/index'; import './index.less'; export default () => { - const [logs, setLogs] = React.useState<{ msg: string; time: number }[]>([]); - const [name, setName] = React.useState(''); - const [transType, setTransType] = React.useState('unicodeAndPua'); - const [codeType, setCodeType] = React.useState(''); - const [loading, setLoading] = React.useState(false); - const [inputError, setInputError] = React.useState(false); - const [showSuccess, setShowSuccess] = React.useState(false); - const [result, setResult] = React.useState([]); - const [showError, setShowError] = React.useState(false); - const [errorMsg, setErrorMsg] = React.useState(''); + const [logs, setLogs] = React.useState([]); + const [name, setName] = React.useState(''); + const [transType, setTransType] = React.useState('unicodeAndPua'); + const [codeType, setCodeType] = React.useState(''); + const [loading, setLoading] = React.useState(false); + const [inputError, setInputError] = React.useState(false); + const [showSuccess, setShowSuccess] = React.useState(false); + const [result, setResult] = React.useState([]); + const [showError, setShowError] = React.useState(false); + const [errorMsg, setErrorMsg] = React.useState(''); let startTime = Date.now(); /** @@ -53,7 +53,7 @@ export default () => { /** * 姓名发生变化事件 */ - const handleNameChange = (e: React.ChangeEvent) => { + const handleNameChange = (e) => { const { value: inputValue } = e.target; if (inputValue) { if (showError) setShowError(false); diff --git a/demo/web/package.json b/demo/web/package.json index 15acdc0..2a0bb28 100644 --- a/demo/web/package.json +++ b/demo/web/package.json @@ -20,22 +20,22 @@ ] }, "dependencies": { - "@ant-design/icons": "^5.0.1", + "@ant-design/icons": "^5.1.4", "ant-rare-words-input-react": "^0.0.3", "ant-rare-words-input-react-pc": "^0.0.3", - "ant-rare-words-utils": "^0.0.4", - "antd": "^5.3.0", - "axios": "^1.3.4", + "ant-rare-words-utils": "^0.0.6", + "antd": "^5.6.2", + "axios": "^1.4.0", "classnames": "^2.3.2", "react-copy-to-clipboard": "^5.1.0" }, "devDependencies": { - "@commitlint/cli": "^17.1.2", - "@commitlint/config-conventional": "^17.1.0", - "dumi": "^2.0.2", - "dumi-theme-mobile": "^2.0.4", - "lint-staged": "^13.0.3", - "prettier": "^2.7.1", + "@commitlint/cli": "^17.6.5", + "@commitlint/config-conventional": "^17.6.5", + "dumi": "^2.2.1", + "dumi-theme-mobile": "^2.1.1", + "lint-staged": "^13.2.2", + "prettier": "^2.8.8", "react": "^18.2.0", "react-dom": "^18.2.0" } diff --git a/demo/web/public/fonts/RareWordsFonts.ttf b/demo/web/public/fonts/RareWordsFonts.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9bccf5f1807044ef7ff4742f79e6c45ea06d41dd GIT binary patch literal 104724 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 literal 0 HcmV?d00001 diff --git a/frontend/input/h5-react/package.json b/frontend/input/h5-react/package.json index b1b5436..69b9db4 100644 --- a/frontend/input/h5-react/package.json +++ b/frontend/input/h5-react/package.json @@ -52,6 +52,7 @@ "devDependencies": { "@commitlint/cli": "^17.1.2", "@commitlint/config-conventional": "^17.1.0", + "@types/react": "^18.2.13", "@umijs/lint": "^4.0.0", "dumi": "^2.0.2", "dumi-theme-mobile": "^2.0.4", @@ -66,10 +67,6 @@ "react-dom": "^18.0.0", "stylelint": "^14.9.1" }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - }, "publishConfig": { "access": "public" } diff --git a/frontend/input/h5-react/src/index.tsx b/frontend/input/h5-react/src/index.tsx index 9b09998..d8dc79b 100644 --- a/frontend/input/h5-react/src/index.tsx +++ b/frontend/input/h5-react/src/index.tsx @@ -1,4 +1,3 @@ -import { getWordsData, matchWordsRecommend } from 'ant-rare-words-utils'; import React, { Fragment, useEffect, useRef, useState } from 'react'; import { ErrorPage, InputValueDisplay, MatchWords, Popup } from './components'; import AppContext from './context'; @@ -6,6 +5,7 @@ import useInputValue from './hooks/InputValue'; import PinYinKeybord from './keyboard/pinyin'; import StrokeKeybord from './keyboard/stroke'; import { ICommonError, InputTypes, IWordsData } from './typings'; +import { getWordsData, matchWordsRecommend } from '../../../utils/src/index'; import { mergeProps } from './utils'; import './index.less'; @@ -84,7 +84,7 @@ const defaultProps = { onReady: () => {}, }; -const RareWordsInput = React.forwardRef((p, ref) => { +const RareWordsInput = React.forwardRef((p: IProps) => { const props = mergeProps(defaultProps, p); const { visible, type, onClose, onShow, destroyOnClose, forceRender } = props; @@ -204,7 +204,6 @@ const RareWordsInput = React.forwardRef((p, ref) => { }} >

e.preventDefault()} > diff --git a/frontend/input/pc-react/package.json b/frontend/input/pc-react/package.json index ea77949..a43bb5d 100644 --- a/frontend/input/pc-react/package.json +++ b/frontend/input/pc-react/package.json @@ -43,7 +43,7 @@ ] }, "dependencies": { - "ant-rare-words-utils": "^0.0.4", + "ant-rare-words-utils": "^0.0.6", "antd": "^5.2.2", "classnames": "^2.3.2" }, diff --git a/frontend/input/pc-react/src/index.tsx b/frontend/input/pc-react/src/index.tsx index 656403f..b978596 100644 --- a/frontend/input/pc-react/src/index.tsx +++ b/frontend/input/pc-react/src/index.tsx @@ -1,10 +1,10 @@ -import { getWordsData, matchWordsRecommend } from 'ant-rare-words-utils'; import { Button, Input, Modal, Result } from 'antd'; import cls from 'classnames'; import React, { useEffect, useState } from 'react'; import { ICON_DOWN } from './contants'; -import './index.less'; import { FontLibrary, FontLibraryArray } from './types/font'; +import { getWordsData, matchWordsRecommend } from '../../../utils/src/index'; +import './index.less'; export interface RareWordsInputProps { children?: React.ReactNode; diff --git a/frontend/utils/README.md b/frontend/utils/README.md index 4b0f31c..8360224 100644 --- a/frontend/utils/README.md +++ b/frontend/utils/README.md @@ -60,7 +60,7 @@ css 直接覆写 ```css .xxx { - font-familay: 原有字体, 'rare-words-font'; + font-family: 原有字体, 'rare-words-font'; } ``` diff --git a/frontend/utils/package.json b/frontend/utils/package.json index 76b8a40..b9286de 100644 --- a/frontend/utils/package.json +++ b/frontend/utils/package.json @@ -24,7 +24,6 @@ "tsc": "tsc -b ./tsconfig.json", "tsc:w": "npm run tsc -- -w" }, - "dependencies": {}, "devDependencies": { "@babel/cli": "^7.18.10", "@babel/core": "^7.19.1", @@ -32,8 +31,6 @@ "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.18.6", "@eggjs/tsconfig": "^1.0.0", - "@types/mocha": "^9", - "@types/node": "^16", "@types/power-assert": "^1", "@types/css-font-loading-module": "^0.0.7", "babel-loader": "^8.2.5", @@ -47,7 +44,8 @@ "webpack": "^5.74.0", "webpack-cli": "^4.10.0", "webpack-dev-server": "^4.11.1", - "webpack-merge": "^5.8.0" + "webpack-merge": "^5.8.0", + "@jest/globals": "^29.5.0" }, "engines": { "node": ">=14.0.0" diff --git a/frontend/utils/src/contants/index.ts b/frontend/utils/src/contants/index.ts index 57657c2..0e25ece 100644 --- a/frontend/utils/src/contants/index.ts +++ b/frontend/utils/src/contants/index.ts @@ -1,7 +1,7 @@ /** * 默认字体下载地址 */ -export const DEFAULT_FONT_URL = 'https://mdn.alipayobjects.com/huamei_2fq7mt/afts/file/A*kPXwSqFoRTQAAAAAAAAAAAAADh58AQ/contains-pua-v1.0.2.ttf'; +export const DEFAULT_FONT_URL = 'https://mdn.alipayobjects.com/huamei_2fq7mt/afts/file/A*N-FpRpJEmZgAAAAAAAAAAAAADh58AQ/RareWordsFonts-v1.0.12.ttf'; /** * 字库缓存key值 diff --git a/frontend/utils/src/contants/zdata-local.ts b/frontend/utils/src/contants/zdata-local.ts index 771e764..605481b 100644 --- a/frontend/utils/src/contants/zdata-local.ts +++ b/frontend/utils/src/contants/zdata-local.ts @@ -1,7 +1,7 @@ export const ZDATAS = { version: '1.0.5', fontUrl: - 'https://mdn.alipayobjects.com/huamei_2fq7mt/afts/file/A*g__cRomck1EAAAAAAAAAAAAADh58AQ/RareWordsFonts-v1.0.11.ttf', + 'https://mdn.alipayobjects.com/huamei_2fq7mt/afts/file/A*N-FpRpJEmZgAAAAAAAAAAAAADh58AQ/RareWordsFonts-v1.0.12.ttf', datas: [ { charId: 'fa95d0', @@ -2535,5 +2535,18 @@ export const ZDATAS = { weight: 8, extInfo: '', }, + { + charId: '531db3', + unicodeChar: '𮀎', + unicodeFont: '', + unicodeCodePoint: '2E00E', + puaChar: '', + puaFont: '', + puaCodePoint: '', + pinYinChars: [{ char: 'LA4' }], + splitChars: [{ char: '分石' }], + weight: 8, + extInfo: '', + }, ], }; diff --git a/frontend/utils/src/font-loader.ts b/frontend/utils/src/font-loader.ts index 2e690fa..43af0b7 100644 --- a/frontend/utils/src/font-loader.ts +++ b/frontend/utils/src/font-loader.ts @@ -39,6 +39,7 @@ export class FontLoader { try { this.status = IFontLoaderStatus.loading; + console.log('[Z-RareCharacterSolution] [utils] --> 开始加载字体: ' + this.options.fontSrc); const fontFace = new window.FontFace( this.options.fontName as string, `url(${this.options.fontSrc})`, @@ -47,12 +48,14 @@ export class FontLoader { fontFace .load() .then(() => { + console.log('[Z-RareCharacterSolution] [utils] --> 加载字体成功'); this.status = IFontLoaderStatus.completed; if (this.options.autoSetFont) { // 将字体设置的到body根节点 const curBodyFontAttr = getComputedStyle(document.body).fontFamily; const newBodyFontAttr = `${curBodyFontAttr}, '${fontFace.family}'`; document.body.style.fontFamily = newBodyFontAttr; + console.log('[Z-RareCharacterSolution] [utils] --> 已设置字体到body上'); } if (this.options?.onSuccess) this.options.onSuccess(fontFace); }) @@ -65,6 +68,7 @@ export class FontLoader { } handleError(err) { + console.log('[Z-RareCharacterSolution] [utils] --> 加载字体失败', err); this.status = IFontLoaderStatus.failed; if (this.options?.onError) this.options.onError(err); } diff --git a/frontend/utils/src/get-words-data.ts b/frontend/utils/src/get-words-data.ts index 6d4556b..4f13c45 100644 --- a/frontend/utils/src/get-words-data.ts +++ b/frontend/utils/src/get-words-data.ts @@ -15,10 +15,12 @@ export function getWordsData(): Promise { // 加载字体 loadFont(fontUrl) .then(font => { + const data = formatZDatas(datas); + console.log('[Z-RareCharacterSolution] [utils] --> 字库读取成功', data); resolve({ fontFace: font, fontUrl, - data: formatZDatas(datas), + data, }); }) .catch(error => { diff --git a/frontend/utils/tsconfig.json b/frontend/utils/tsconfig.json index d2862b4..7b28520 100644 --- a/frontend/utils/tsconfig.json +++ b/frontend/utils/tsconfig.json @@ -10,8 +10,7 @@ "baseUrl": "./", "outDir": "dist", "plugins": [], - "typeRoots": ["./types"], - "types": ["mocha", "node"] + "typeRoots": ["./types"] }, "include": ["./src", "./types"], "exclude": ["config/webpack.config.js"] -- Gitee