Vite 单JS文件批量打包

  1. 文件目录如下:

    20240422160140369-image

    lib下的目录是要打包成单个js的源文件

  2. 更改package.json
    {
      "name": "xt-plugin-auth",
      "version": "1.0.0",
      "main": "index.js",
      "license": "MIT",
      "type": "module",
      "scripts": {
        "build-plugin": "node ./build/build.js"
      },
      "devDependencies": {
        "@rollup/plugin-commonjs": "^25.0.7",
        "@vitejs/plugin-vue": "^5.0.4",
        "typescript": "^5.2.2",
        "vite": "^5.2.8",
        "vue": "^3.4.21"
      }
    }
  3. 更改vite.config.ts
    import {defineConfig} from "vite";
    
    export default defineConfig({
        plugins: [require('./build/plugin-build.js')],
    })
  4. 新建目录 build,在此目录下创建文件 build.js、plugin-build.js
  5. build.js文件内容
    import pluginBuild from "./plugin-build.js";
    import { readdirSync, statSync } from 'fs';
    import { join } from "path";
    
    const getAllDirectories = (path) => {
        const items = readdirSync(path);
        const directories = [];
        items.forEach((item) => {
            const itemPath = join(path, item);
            const stat = statSync(itemPath);
    
            if (stat.isDirectory()) {
                directories.push(item);
            }
        });
        return directories;
    };
    
    const libList = getAllDirectories(join(process.cwd(), 'lib'))
    
    async function init(){
        for (let i = 0; i < libList.length; i++) {
            await pluginBuild(libList[i])
        }
        process.exit();
    }
    
    init()
  6. plugin-build.js 文件内容
    import vuePlugin from '@vitejs/plugin-vue'
    import commonjs from '@rollup/plugin-commonjs';
    import {build} from "vite";
    import fs from 'fs';
    import {join} from "path";
    
    
    export default async function pluginBuild (pluginName) {
        await build({
            base: './',
            build: {
                minify: true,
                cssCodeSplit: true,
                outDir: `dist/${pluginName}`,
                lib: {
                    formats: ['umd'],
                    entry: `./lib/${pluginName}/index.ts`,
                    name: pluginName,
                    fileName: () => `${pluginName}.js`
                },
                rollupOptions: {
                    external: ['vue'],
                    output: {
                        globals: {
                            vue: 'pluginVue',
                        }
                    }
                },
            },
            plugins: [
                commonjs(),
                vuePlugin(),
            ]
        })
        const savePath = join(process.cwd(), 'dist', `${pluginName}.js`)
        const directoryPath = join(process.cwd(), 'dist', pluginName)
        const filePath = join(process.cwd(), 'dist', pluginName, `${pluginName}.js`)
        fs.renameSync(filePath, savePath)
        console.log('delete plugin temp path: ' + directoryPath)
        fs.rmdirSync(directoryPath);
    }
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    请登录后查看评论内容