diff --git a/packages/devui-vue/devui-cli/commands/build-nuxt-auto-import.js b/packages/devui-vue/devui-cli/commands/build-nuxt-auto-import.js new file mode 100644 index 0000000000000000000000000000000000000000..99a4b27cca7bdbbcab9c8b5acfb7daf267442a68 --- /dev/null +++ b/packages/devui-vue/devui-cli/commands/build-nuxt-auto-import.js @@ -0,0 +1,39 @@ +const path = require('path') +const fsExtra = require('fs-extra') + +const outputDir = path.resolve(__dirname, '../../build') +const outputNuxtDir = path.resolve(__dirname, '../../build/nuxt') + +exports.createNuxtPlugin = () => { + const fileStr = `import { join } from 'pathe' + import { defineNuxtModule } from '@nuxt/kit' + + export default defineNuxtModule({ + hooks: { + 'components:dirs'(dirs) { + dirs.push({ + path: join(__dirname,'./components'), + prefix:'D' + }) + } + } + })` + + fsExtra.outputFile(path.resolve(outputNuxtDir, `index.js`), fileStr, 'utf-8') +} + +exports.createAutoImportedComponent = (dirName) => { + const importStyle = fsExtra.pathExistsSync(path.resolve(outputDir, `${dirName}/style.css`)) + ? `import '../../${dirName}/style.css' \n` + : `` + + const comps = require(path.resolve(outputDir, `${dirName}/index.es.js`)) + + Object.keys(comps).forEach((compName) => { + if (compName !== 'default' && compName.indexOf('Directive') === -1) { + const fileStr = `${importStyle}\nexport { ${compName} as default } from '../../${dirName}/index.es.js'` + + fsExtra.outputFile(path.resolve(outputNuxtDir, `components/${compName}.js`), fileStr, 'utf-8') + } + }) +} diff --git a/packages/devui-vue/devui-cli/commands/build.js b/packages/devui-vue/devui-cli/commands/build.js index 48c472f47b673f88f715fc4b738f97ea93d45a35..1795406945f66290a162303dab0ae0cc057a7ead 100644 --- a/packages/devui-vue/devui-cli/commands/build.js +++ b/packages/devui-vue/devui-cli/commands/build.js @@ -4,6 +4,7 @@ const fsExtra = require('fs-extra') const { defineConfig, build } = require('vite') const vue = require('@vitejs/plugin-vue') const vueJsx = require('@vitejs/plugin-vue-jsx') +const nuxtBuild = require('./build-nuxt-auto-import') const entryDir = path.resolve(__dirname, '../../devui') const outputDir = path.resolve(__dirname, '../../build') @@ -11,7 +12,7 @@ const outputDir = path.resolve(__dirname, '../../build') const baseConfig = defineConfig({ configFile: false, publicDir: false, - plugins: [ vue(), vueJsx() ] + plugins: [vue(), vueJsx()] }) const rollupOptions = { @@ -24,35 +25,39 @@ const rollupOptions = { } const buildSingle = async (name) => { - await build(defineConfig({ - ...baseConfig, - build: { - rollupOptions, - lib: { - entry: path.resolve(entryDir, name), - name: 'index', - fileName: 'index', - formats: ['es', 'umd'] - }, - outDir: path.resolve(outputDir, name) - } - })) + await build( + defineConfig({ + ...baseConfig, + build: { + rollupOptions, + lib: { + entry: path.resolve(entryDir, name), + name: 'index', + fileName: 'index', + formats: ['es', 'umd'] + }, + outDir: path.resolve(outputDir, name) + } + }) + ) } const buildAll = async () => { - await build(defineConfig({ - ...baseConfig, - build: { - rollupOptions, - lib: { - entry: path.resolve(entryDir, 'vue-devui.ts'), - name: 'vue-devui', - fileName: 'vue-devui', - formats: ['es', 'umd'] - }, - outDir: outputDir - } - })) + await build( + defineConfig({ + ...baseConfig, + build: { + rollupOptions, + lib: { + entry: path.resolve(entryDir, 'vue-devui.ts'), + name: 'vue-devui', + fileName: 'vue-devui', + formats: ['es', 'umd'] + }, + outDir: outputDir + } + }) + ) } const createPackageJson = (name) => { @@ -64,24 +69,23 @@ const createPackageJson = (name) => { "style": "style.css" }` - fsExtra.outputFile( - path.resolve(outputDir, `${name}/package.json`), - fileStr, - 'utf-8' - ) + fsExtra.outputFile(path.resolve(outputDir, `${name}/package.json`), fileStr, 'utf-8') } exports.build = async () => { await buildAll() - const components = fs.readdirSync(entryDir).filter(name => { + 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') }) - for(const name of components) { + for (const name of components) { await buildSingle(name) createPackageJson(name) + nuxtBuild.createAutoImportedComponent(name) } + + nuxtBuild.createNuxtPlugin() }