@nuxt/devtools
Version:
<a href="https://devtools.nuxt.com"><img width="1200" alt="Nuxt DevTools" src="https://github-production-user-asset-6210df.s3.amazonaws.com/904724/261577617-a10567bd-ad33-48cc-9bda-9e37dbe1929f.png"></a> <br>
58 lines (54 loc) • 1.56 kB
JavaScript
import { addVitePlugin } from '@nuxt/kit';
import { resolve, join } from 'pathe';
import Inspect from 'vite-plugin-inspect';
import { readdir, lstat } from 'node:fs/promises';
async function getFolderSize(dir) {
const dirents = await readdir(dir, {
withFileTypes: true
});
if (dirents.length === 0)
return 0;
const files = [];
const directorys = [];
for (const dirent of dirents) {
if (dirent.isFile()) {
files.push(dirent);
continue;
}
if (dirent.isDirectory())
directorys.push(dirent);
}
const sizes = await Promise.all(
[
files.map(async (file) => {
const path = resolve(dir, file.name);
const { size } = await lstat(path);
return size;
}),
directorys.map((directory) => {
const path = resolve(dir, directory.name);
return getFolderSize(path);
})
].flat()
);
return sizes.reduce((total, size) => total += size, 0);
}
async function setup(nuxt, options) {
if (options.viteInspect !== false) {
addVitePlugin(
Inspect({
build: true,
outputDir: join(nuxt.options.analyzeDir, ".vite-inspect")
})
);
}
nuxt.hook("build:analyze:done", async (meta) => {
const _meta = meta;
_meta.size = _meta.size || {};
const dirs = [join(meta.buildDir, "dist/client"), meta.outDir];
const [clientBundleSize, nitroBundleSize] = await Promise.all(dirs.map(getFolderSize));
_meta.size.clientBundle = clientBundleSize;
_meta.size.nitroBundle = nitroBundleSize;
});
}
export { setup };