69 lines
2.1 KiB
JavaScript
69 lines
2.1 KiB
JavaScript
import path from 'node:path'
|
|
import fsExtra from 'fs-extra'
|
|
import dotenv from 'dotenv'
|
|
const { copy, existsSync, remove, readdirSync } = fsExtra
|
|
const cwd = process.cwd()
|
|
dotenv.config()
|
|
dotenv.config({ path: `.env.${process.env.NODE_ENV}` })
|
|
const isSSR = Boolean(process.env.NUXT_SSR)
|
|
//打包发布路径,可能会覆盖重要文件,请谨慎改动
|
|
const releaseRelativePath = process.env.NUXT_RELEASE_PATH
|
|
const releaseMap = isSSR
|
|
? ['.output', 'static', 'package.json', '.env', '.env.production'].reduce(
|
|
(prev, item) => {
|
|
prev[item] = item
|
|
return prev
|
|
},
|
|
{}
|
|
)
|
|
: ['.output/public'].reduce((prev, item) => {
|
|
const readDir = readdirSync(item)
|
|
for (const dir of readDir) {
|
|
prev[path.join(item, dir)] = dir
|
|
}
|
|
return prev
|
|
}, {})
|
|
const releasePath = path.resolve(cwd, releaseRelativePath)
|
|
|
|
async function build() {
|
|
if (!releaseRelativePath) {
|
|
throw Error('NUXT_RELEASE_PATH is undefined')
|
|
}
|
|
// console.log(releasePath)
|
|
// if (existsSync(releasePath)) {
|
|
// await remove(releasePath)
|
|
// }
|
|
console.log(`文件正在复制 ==> ${releaseRelativePath}`)
|
|
|
|
try {
|
|
const allTask = Object.keys(releaseMap).map(async (key) => {
|
|
const srcPath = path.resolve(cwd, key)
|
|
const destPath = path.resolve(releasePath, releaseMap[key])
|
|
if (existsSync(srcPath)) {
|
|
if (existsSync(destPath)) {
|
|
await remove(destPath)
|
|
}
|
|
await copyFile(srcPath, destPath)
|
|
}
|
|
})
|
|
await Promise.all(allTask)
|
|
} catch (error) {
|
|
console.log(`\n ${error}`)
|
|
}
|
|
console.log(`文件已复制 ==> ${releaseRelativePath}`)
|
|
}
|
|
|
|
function copyFile(sourceDir, targetDir) {
|
|
return new Promise((resolve, reject) => {
|
|
copy(sourceDir, targetDir, { overwrite: true }, (err) => {
|
|
if (err) {
|
|
reject(err)
|
|
} else {
|
|
resolve()
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
build()
|