fix(runtime-config): resolver MUSIC_DIR en tiempo de ejecución y no hornearlo en build; endpoints usan env absoluto o public fallback
All checks were successful
build-and-deploy / build (push) Successful in 21s
build-and-deploy / deploy (push) Successful in 3s

This commit is contained in:
2025-08-10 03:03:22 -06:00
parent 81330de97e
commit e3e7374096
3 changed files with 9 additions and 13 deletions

View File

@@ -1,10 +1,5 @@
// https://nuxt.com/docs/api/configuration/nuxt-config // https://nuxt.com/docs/api/configuration/nuxt-config
import { defineNuxtConfig } from 'nuxt/config' import { defineNuxtConfig } from 'nuxt/config'
import { resolve, isAbsolute } from 'path'
// Compute absolute music directory at build-time to avoid .output cwd issues in preview/prod
const musicDirEnv = process.env.MUSIC_DIR || './music'
const musicDirAbs = isAbsolute(musicDirEnv) ? musicDirEnv : resolve(process.cwd(), musicDirEnv)
export default defineNuxtConfig({ export default defineNuxtConfig({
// Helpers // Helpers
@@ -144,7 +139,6 @@ export default defineNuxtConfig({
// Runtime configuration // Runtime configuration
runtimeConfig: { runtimeConfig: {
musicDirAbs,
public: { public: {
musicPath: process.env.NUXT_PUBLIC_MUSIC_PATH || '/music' musicPath: process.env.NUXT_PUBLIC_MUSIC_PATH || '/music'
} }

View File

@@ -1,5 +1,5 @@
import { promises as fs } from 'fs' import { promises as fs } from 'fs'
import { join, resolve, sep } from 'path' import { join, resolve, sep, isAbsolute } from 'path'
import { createReadStream } from 'fs' import { createReadStream } from 'fs'
export default defineEventHandler(async (event) => { export default defineEventHandler(async (event) => {
@@ -30,9 +30,9 @@ export default defineEventHandler(async (event) => {
// Determine the music directory path // Determine the music directory path
let musicDir: string let musicDir: string
if (config.musicDirAbs || process.env.MUSIC_DIR) { if (process.env.MUSIC_DIR) {
// Prefer absolute dir from runtimeConfig; fallback to env (resolved relative to repo root at build time) // Resolve env to absolute
musicDir = (config.musicDirAbs as string) || resolve(process.cwd(), process.env.MUSIC_DIR!) musicDir = isAbsolute(process.env.MUSIC_DIR) ? process.env.MUSIC_DIR : resolve(process.cwd(), process.env.MUSIC_DIR)
} else { } else {
// Fallback to public/music // Fallback to public/music
const defaultPublicPath = config.public?.musicPath || '/music' const defaultPublicPath = config.public?.musicPath || '/music'

View File

@@ -1,5 +1,5 @@
import { promises as fs } from 'fs' import { promises as fs } from 'fs'
import { join } from 'path' import { join, resolve, isAbsolute } from 'path'
export default defineEventHandler(async (event) => { export default defineEventHandler(async (event) => {
try { try {
@@ -9,10 +9,12 @@ export default defineEventHandler(async (event) => {
console.log(`[MUSIC API] Music list request from ${realIP}`) console.log(`[MUSIC API] Music list request from ${realIP}`)
const config = useRuntimeConfig() const config = useRuntimeConfig()
// Prefer absolute dir computed at build time; fallback to env or public path
const defaultPublicPath = config.public?.musicPath || '/music' const defaultPublicPath = config.public?.musicPath || '/music'
const publicRel = defaultPublicPath.replace(/^\//, '') const publicRel = defaultPublicPath.replace(/^\//, '')
const musicDir = config.musicDirAbs || process.env.MUSIC_DIR || join(process.cwd(), 'public', publicRel) const envDir = process.env.MUSIC_DIR
const musicDir = envDir
? (isAbsolute(envDir) ? envDir : resolve(process.cwd(), envDir))
: join(process.cwd(), 'public', publicRel)
// Check if music directory exists // Check if music directory exists
try { try {