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 0000000000000000000000000000000000000000..96e820e089ceb4796327cd17bee41b7073c2d67d --- /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 d4ed9906e6fe7e2f2b8c41cab1765391bdae6fd0..2e714064bb73c0dd23a323287413648d7d40c323 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 95be1ea38613a3fb93af485237c5a438ccebe530..a2de3bcb9967664f865a2a38c08c0f2cdf0fee57 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 94d8c106768755cdb7ebc4416ebec68eb2e4e777..7dc7001d8d5da15d2c31512aa210dd81fccc30ef 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 46bc909102f149df661a2032339db2de7cf69ff2..6d4a59536ebad5eedf8d96ef5840e6f9189e5ce3 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",