mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-10 04:36:15 -08:00
refactor(tooling): [MOD-02] split library build and development into typed modules
This commit is contained in:
1 parent
28c7abb2bb
commit
401d4cdd65
36 files changed
+1644
-427
No files matched your search
+3
-114
@@ -1,114 +1,3 @@
|
||||
export { getProjects } from './projects.js'
|
||||
|
||||
// Convert kebab-case to PascalCase: artplayer-plugin-ads -> ArtplayerPluginAds
|
||||
export function toPascalCase(name) {
|
||||
return name.replace(/(^|-)([a-z])/g, (_, _p, c) => c.toUpperCase())
|
||||
}
|
||||
|
||||
// Convert kebab-case to camelCase: artplayer-plugin-ads -> artplayerPluginAds
|
||||
export function toCamelCase(name) {
|
||||
return name.replace(/-([a-z])/g, (_, c) => c.toUpperCase())
|
||||
}
|
||||
|
||||
// Get the global variable name for a package
|
||||
// - artplayer, artplayer-tool-* -> PascalCase (class)
|
||||
// - artplayer-plugin-*, artplayer-proxy-* -> camelCase (function)
|
||||
export function getGlobalName(name) {
|
||||
if (name === 'artplayer' || name.startsWith('artplayer-tool-')) {
|
||||
return toPascalCase(name)
|
||||
}
|
||||
return toCamelCase(name)
|
||||
}
|
||||
|
||||
// Get Vite build config
|
||||
export function getViteBuildConfig(options) {
|
||||
const {
|
||||
entry,
|
||||
outDir,
|
||||
name,
|
||||
format,
|
||||
fileName,
|
||||
minify = 'esbuild',
|
||||
target = 'es2020',
|
||||
banner,
|
||||
emptyOutDir = false,
|
||||
} = options
|
||||
|
||||
const config = {
|
||||
configFile: false,
|
||||
publicDir: false,
|
||||
logLevel: 'warn',
|
||||
build: {
|
||||
outDir,
|
||||
emptyOutDir,
|
||||
minify,
|
||||
target,
|
||||
lib: {
|
||||
entry,
|
||||
name,
|
||||
formats: [format],
|
||||
fileName: () => fileName,
|
||||
},
|
||||
rollupOptions: {
|
||||
output: {
|
||||
exports: 'default',
|
||||
},
|
||||
plugins: banner
|
||||
? [{
|
||||
name: 'add-banner-and-global',
|
||||
generateBundle(outputOptions, bundle) {
|
||||
for (const chunk of Object.values(bundle)) {
|
||||
if (chunk.type === 'chunk') {
|
||||
// Remove any inline worker banners (inside template literals)
|
||||
// Match: `/*! ... */\n and replace with just `
|
||||
let code = chunk.code.replace(/`\/\*![\s\S]*?\*\/\n/g, '`')
|
||||
// Add main banner if not present
|
||||
if (!code.startsWith('/*!')) {
|
||||
code = `${banner}\n${code}`
|
||||
}
|
||||
// For UMD format, modify the wrapper to always expose global
|
||||
// even when AMD loader is present (fix for RequireJS environments)
|
||||
if (outputOptions.format === 'umd') {
|
||||
const wrapper = code.replace(/^\/\*![\s\S]*?\*\/\s*/, '').match(/^[!(\s]*function\s*\(\s*([\w$]+)\s*,\s*([\w$]+)\s*\)/)
|
||||
if (!wrapper)
|
||||
throw new Error(`Unrecognized UMD wrapper for ${name}`)
|
||||
const global = wrapper[1]
|
||||
const amd = /["']function["']\s*===?\s*typeof define\s*&&\s*define\.amd\s*\?\s*define\(([\w$]+)\)\s*:/
|
||||
if (!amd.test(code))
|
||||
throw new Error(`Unrecognized AMD branch for ${name}`)
|
||||
// Keep AMD and the global export identical regardless of minified parameter names.
|
||||
code = code.replace(
|
||||
amd,
|
||||
`"function"==typeof define&&define.amd?(${global}.${name}=$1(),define(function(){return ${global}.${name}})):`,
|
||||
)
|
||||
}
|
||||
chunk.code = code
|
||||
}
|
||||
}
|
||||
},
|
||||
}]
|
||||
: [],
|
||||
},
|
||||
},
|
||||
// Disable banner for inline workers
|
||||
worker: {
|
||||
format: 'es',
|
||||
plugins: () => [{
|
||||
name: 'remove-worker-banner',
|
||||
generateBundle(_, bundle) {
|
||||
for (const chunk of Object.values(bundle)) {
|
||||
if (chunk.type === 'chunk' && chunk.code.startsWith('/*!')) {
|
||||
// Remove banner from worker code
|
||||
chunk.code = chunk.code.replace(/^\/\*![\s\S]*?\*\/\s*/, '')
|
||||
}
|
||||
}
|
||||
},
|
||||
}],
|
||||
},
|
||||
define: {
|
||||
'process.env.NODE_ENV': JSON.stringify(minify ? 'production' : 'development'),
|
||||
},
|
||||
}
|
||||
|
||||
return config
|
||||
}
|
||||
export { getViteBuildConfig } from './library/config.ts'
|
||||
export { getGlobalName, toCamelCase, toPascalCase } from './library/names.ts'
|
||||
export { getProjects } from './library/projects.ts'
|
||||
Reference in new issue
Block a user