From 2b41ec2a85f5e1713af7412bdd2fc5648231c998 Mon Sep 17 00:00:00 2001 From: whylost Date: Sat, 4 Dec 2021 00:12:19 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=8F=90=E4=BE=9B=E5=AF=B9nuxt3?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E8=87=AA=E5=8A=A8=E5=AF=BC=E5=85=A5=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=9C=B0=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../commands/build-nuxt-auto-import.js | 39 ++++++++++ .../devui-vue/devui-cli/commands/build.js | 72 ++++++++++--------- 2 files changed, 77 insertions(+), 34 deletions(-) create mode 100644 packages/devui-vue/devui-cli/commands/build-nuxt-auto-import.js 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 00000000..99a4b27c --- /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 48c472f4..17954069 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() } -- Gitee