From d48ede221f6d3f902805fa122a4f6c6ab7820844 Mon Sep 17 00:00:00 2001 From: kagol Date: Wed, 17 Nov 2021 23:42:49 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0ts=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E6=96=87=E4=BB=B6=20#I4HUNK?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devui-cli/commands/generate-dts.js | 38 +++++++++++++++++++ packages/devui-vue/devui-cli/index.js | 8 ++++ packages/devui-vue/devui/theme/theme.ts | 2 + .../docs/components/editable-select/index.md | 6 +-- packages/devui-vue/package.json | 3 +- 5 files changed, 53 insertions(+), 4 deletions(-) create mode 100644 packages/devui-vue/devui-cli/commands/generate-dts.js diff --git a/packages/devui-vue/devui-cli/commands/generate-dts.js b/packages/devui-vue/devui-cli/commands/generate-dts.js new file mode 100644 index 00000000..96e820e0 --- /dev/null +++ b/packages/devui-vue/devui-cli/commands/generate-dts.js @@ -0,0 +1,38 @@ +const path = require('path') +const fs = require('fs') +const fse = require('fs-extra') +const logger = require('../shared/logger') + +const entryDir = path.resolve(__dirname, '../../devui') +const outputDir = path.resolve(__dirname, '../../build') + +function generateIndexDts(buildDir) { + const fileStr = `import { App } from 'vue'; + declare function install(app: App): void + declare const _default: { + install: typeof install; + version: string; + }; + export default _default;` + fse.outputFileSync(path.resolve(buildDir, 'index.d.ts'), fileStr, 'utf8') +} + +exports.generateDts = () => { + generateIndexDts(outputDir) + + const components = fs.readdirSync(entryDir).filter(name => { + const componentDir = path.resolve(entryDir, name) + const isDir = fs.lstatSync(componentDir).isDirectory() + return isDir && fs.readdirSync(componentDir).includes('index.ts') + }) + const srcDts = path.resolve(outputDir, 'index.d.ts') + + for(const name of components) { + const destDts = path.resolve(outputDir, `${name}/index.d.ts`) + fs.copyFile(srcDts, destDts, (err) => { + if (err) { + logger.error(`拷贝组件${name}的ts类型文件失败!`) + } + }) + } +} \ No newline at end of file diff --git a/packages/devui-vue/devui-cli/index.js b/packages/devui-vue/devui-cli/index.js index d4ed9906..2e714064 100755 --- a/packages/devui-vue/devui-cli/index.js +++ b/packages/devui-vue/devui-cli/index.js @@ -3,6 +3,7 @@ const { Command } = require('commander') const { create, validateCreateType } = require('./commands/create') const { build } = require('./commands/build') const { generateTheme } = require('./commands/generate-theme') +const { generateDts } = require('./commands/generate-dts') const { VERSION, CREATE_SUPPORT_TYPES } = require('./shared/constant') const program = new Command() @@ -18,6 +19,8 @@ program program .command('build') .description('打包组件库') + .hook('postAction', generateTheme) + .hook('postAction', generateDts) .action(build) program @@ -25,4 +28,9 @@ program .description('生成主题变量文件') .action(generateTheme) +program + .command('generate:dts') + .description('生成ts类型文件') + .action(generateDts) + program.parse().version(VERSION) diff --git a/packages/devui-vue/devui/theme/theme.ts b/packages/devui-vue/devui/theme/theme.ts index 95be1ea3..a2de3bcb 100644 --- a/packages/devui-vue/devui/theme/theme.ts +++ b/packages/devui-vue/devui/theme/theme.ts @@ -5,4 +5,6 @@ import light from './themes/light' Theme.register('dark', dark) Theme.register('light', light) +export { Theme } + export default Theme diff --git a/packages/devui-vue/docs/components/editable-select/index.md b/packages/devui-vue/docs/components/editable-select/index.md index 94d8c106..7dc7001d 100644 --- a/packages/devui-vue/docs/components/editable-select/index.md +++ b/packages/devui-vue/docs/components/editable-select/index.md @@ -257,8 +257,8 @@ d-editable-select 参数 | width | number | -- | 可选,控制下拉框宽度,搭配 appendToBody 使用(px) | [基本用法](#基本用法) | | | v-model | string/number | -- | 绑定值 | [基本用法](#基本用法) | | | options | Array | -- | 必选,数据列表 | [基本用法](#基本用法) | | -| disabled | boolean | false | 可选,值为 true 禁用下拉框 | [设置禁用选项](设置禁用选项) | | -| disabledKey | string | -- | 可选,设置禁用选项的 Key 值 | [设置禁用选项](设置禁用选项) | | +| disabled | boolean | false | 可选,值为 true 禁用下拉框 | [设置禁用选项](#设置禁用选项) | | +| disabledKey | string | -- | 可选,设置禁用选项的 Key 值 | [设置禁用选项](#设置禁用选项) | | | maxHeight | number | -- | 可选,下拉菜单的最大高度(px) | [基本用法](#基本用法) | | | remote | boolean | false | 可选,远程搜索 | | | | enableLazyLoad | boolean | false | 可选,是否允许懒加载 | [懒加载](#懒加载) | | @@ -268,7 +268,7 @@ d-editable-select 事件 | 事件 | 类型 | 说明 | 跳转 Demo | | ------------ | ---- | ------------------ | -------------------------------------------------------- | | filterMethod | | 自定义筛选函数 | | -| remoteMethod | | 远程搜索对应的函数 | [异步获取数据并设置匹配方法](异步获取数据并设置匹配方法) | +| remoteMethod | | 远程搜索对应的函数 | [异步获取数据并设置匹配方法](#异步获取数据并设置匹配方法) | d-editable-select 插槽 diff --git a/packages/devui-vue/package.json b/packages/devui-vue/package.json index 46bc9091..6d4a5953 100644 --- a/packages/devui-vue/package.json +++ b/packages/devui-vue/package.json @@ -27,7 +27,7 @@ "serve": "vitepress serve docs", "app:dev": "vite", "app:build": "vite build", - "build:lib": "yarn predev && yarn build:components && yarn generate:theme && yarn copy", + "build:lib": "yarn predev && yarn build:components && yarn copy", "test": "jest --config jest.config.js", "ls-lint": "ls-lint", "lint": "eslint \"{src,devui}/**/*.{vue,js,ts,jsx,tsx}\"", @@ -35,6 +35,7 @@ "stylelint": "stylelint --fix \"{devui,src}/**/*.{scss,css}\"", "build:components": "node ./devui-cli/index.js build", "generate:theme": "node ./devui-cli/index.js generate:theme", + "generate:dts": "node ./devui-cli/index.js generate:dts", "copy": "cp package.json build && cp README.md build && cp devui/theme/theme.scss build/theme", "clean:cli": "npm uninstall -g devui-cli & npm uninstall -g vue-devui", "cli:create": "node ./devui-cli/index.js create -t component", -- Gitee