compress.ts 1.0 KB

1234567891011121314151617181920212223242526272829303132333435
  1. import { gzip } from 'zlib';
  2. import { readFileSync, writeFileSync } from 'fs';
  3. import { GzipPluginOptions } from './types';
  4. import { readAllFile, getCwdPath, isBuildGzip, isSiteMode } from '../../../utils';
  5. export function startGzip(
  6. fileContent: string | Buffer,
  7. options: GzipPluginOptions = {}
  8. ): Promise<Buffer> {
  9. return new Promise((resolve, reject) => {
  10. gzip(fileContent, options.gzipOptions || {}, (err, result) => {
  11. if (err) {
  12. reject(err);
  13. } else {
  14. resolve(result);
  15. }
  16. });
  17. });
  18. }
  19. // 手动压缩css
  20. export async function startGzipStyle() {
  21. if (isBuildGzip() || isSiteMode()) {
  22. const outDir = 'dist';
  23. const assets = '_assets';
  24. const allCssFile = readAllFile(getCwdPath(outDir, assets), /\.(css)$/);
  25. for (const path of allCssFile) {
  26. const source = readFileSync(path);
  27. const content = await startGzip(source);
  28. const ds = path.split('/');
  29. const fileName = ds[ds.length - 1];
  30. writeFileSync(getCwdPath(outDir, assets, `${fileName}.gz`), content);
  31. }
  32. }
  33. }