next.js/scripts/inject-deploy-url.js
inject-deploy-url.js76 lines1.7 KB
const path = require('path')
const { spawn } = require('child_process')
const fs = require('fs/promises')

const cwd = process.cwd()

async function main() {
  const tarballs = await fs.readdir(path.join(cwd, 'public'))
  const nextTarball = tarballs.find((item) => !item.includes('-swc'))

  await fs.rename(
    path.join(cwd, 'public', nextTarball),
    path.join(cwd, nextTarball)
  )

  await new Promise((resolve, reject) => {
    const child = spawn('tar', ['-xf', nextTarball], {
      stdio: 'inherit',
      shell: true,
      cwd,
    })

    child.on('exit', (code) => {
      if (code) {
        return reject(`Failed with code ${code}`)
      }
      resolve()
    })
  })

  const unpackedPackageJson = path.join(cwd, 'package/package.json')
  const parsedPackageJson = JSON.parse(
    await fs.readFile(unpackedPackageJson, 'utf8')
  )
  const { optionalDependencies } = parsedPackageJson

  for (const key of Object.keys(optionalDependencies)) {
    optionalDependencies[key] = optionalDependencies[key].replace(
      'DEPLOY_URL',
      process.env.VERCEL_URL
    )
  }

  await fs.writeFile(
    unpackedPackageJson,
    JSON.stringify(parsedPackageJson, null, 2)
  )

  await fs.unlink(nextTarball)

  await new Promise((resolve, reject) => {
    const child = spawn('tar', ['-czf', nextTarball, 'package'], {
      stdio: 'inherit',
      shell: true,
      cwd,
    })

    child.on('exit', (code) => {
      if (code) {
        return reject(`Failed with code ${code}`)
      }
      resolve()
    })
  })

  await fs.rename(
    path.join(cwd, nextTarball),
    path.join(cwd, 'public', nextTarball)
  )
}

main().catch((err) => {
  console.error(err)
  process.exit(1)
})
Quest for Codev2.0.0
/
SIGN IN