diff --git a/packages/vite/src/node/__tests__/build.spec.ts b/packages/vite/src/node/__tests__/build.spec.ts new file mode 100644 index 00000000000000..15bca18c91bfc4 --- /dev/null +++ b/packages/vite/src/node/__tests__/build.spec.ts @@ -0,0 +1,32 @@ +import { resolveLibFilename } from '../build' + +describe('resolveLibFilename', () => { + test('custom filename function', () => { + const filename = resolveLibFilename( + { + fileName: (format) => `custom-filename-function.${format}.js`, + entry: 'mylib.js' + }, + 'es', + 'mylib' + ) + + expect(filename).toBe('custom-filename-function.es.js') + }) + + test('custom filename string', () => { + const filename = resolveLibFilename( + { fileName: 'custom-filename', entry: 'mylib.js' }, + 'es', + 'mylib' + ) + + expect(filename).toBe('custom-filename.es.js') + }) + + test('package name as filename', () => { + const filename = resolveLibFilename({ entry: 'mylib.js' }, 'es', 'mylib') + + expect(filename).toBe('mylib.es.js') + }) +}) diff --git a/packages/vite/src/node/build.ts b/packages/vite/src/node/build.ts index 65eae08f5d5cae..7461c9fbf865a3 100644 --- a/packages/vite/src/node/build.ts +++ b/packages/vite/src/node/build.ts @@ -415,9 +415,7 @@ async function doBuild( entryFileNames: ssr ? `[name].js` : libOptions - ? typeof libOptions.fileName === 'function' - ? libOptions.fileName(output.format) - : `${libOptions.fileName || pkgName}.${output.format || `es`}.js` + ? resolveLibFilename(libOptions, output.format, pkgName) : path.posix.join(options.assetsDir, `[name].[hash].js`), chunkFileNames: libOptions ? `[name].js` @@ -613,6 +611,16 @@ function staticImportedByEntry( return someImporterIs } +export function resolveLibFilename( + libOptions: LibraryOptions, + format: ModuleFormat | undefined, + pkgName: string +): string { + return typeof libOptions.fileName === 'function' + ? libOptions.fileName(format) + : `${libOptions.fileName || pkgName}.${format || `es`}.js` +} + function resolveBuildOutputs( outputs: OutputOptions | OutputOptions[] | undefined, libOptions: LibraryOptions | false,