vite-plugin-compression icon indicating copy to clipboard operation
vite-plugin-compression copied to clipboard

插件执行的顺序

Open RayPS opened this issue 3 years ago • 2 comments

我想在 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 文件不存在
    }
  }
}

RayPS avatar Mar 12 '22 23:03 RayPS

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

xlanghejianfeng avatar Sep 26 '22 10:09 xlanghejianfeng

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

hn-failte avatar Aug 10 '23 01:08 hn-failte