vbenjs / vite-plugin-compression

Use gzip or brotli to compress resources
MIT License
400 stars 31 forks source link

插件执行的顺序 #17

Open RayPS opened 2 years ago

RayPS commented 2 years ago

我想在 viteCompression 之后增加一个自定义的 Vite 插件,但是我增加的插件无法保证在 viteCompression 后面执行,总是先于它执行,为什么呢?

vite.config.ts:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { viteSingleFile } from 'vite-plugin-singlefile'
import viteCompression from 'vite-plugin-compression'
import vitePROGMEM from './vite-plugin-progmem' // <-- 自定义插件

export default defineConfig({
    plugins: [
        vue(),
        viteSingleFile(),
        viteCompression(),
        vitePROGMEM({
            source: './dist/index.html.gz',
            destination: './dist/index.h'
        })
    ],
    //...
})

vite-plugin-progmem:

import { Plugin } from "vite"
import * as fs from 'fs'

interface vitePluginPROGMEMOptions {
    /**
     * Source of the .html.gz file
     */
     source: string;
     /**
      * Destination of the .h file
      */
     destination: string;
}

export default function vitePROGMEM(options: vitePluginPROGMEMOptions): Plugin {
  return {
    name: "vite:progmem",
    apply: 'build',
    async closeBundle() {
      console.log(options)
      console.log('source: ' + fs.existsSync(options.source));
      console.log('destination: ' + fs.existsSync(options.destination));
      // .gz 文件不存在
    }
  }
}
xlanghejianfeng commented 2 years ago

同样的问题,难道不能以插件的形式,只能用success方法来回调了?

hn-failte commented 1 year ago

这个问题我也遇到了,原因是源码里面的closeBundle函数根本就不能是一个async函数 里面的await全都没用、我改成node的同步函数就可以了