79 行
2.3 KiB
JavaScript
79 行
2.3 KiB
JavaScript
const fs = require('fs')
|
|
const path = require('path')
|
|
const COS = require('cos-nodejs-sdk-v5')
|
|
|
|
const root = path.join(__dirname, '..', 'dist', 'build', 'h5')
|
|
const serverEnv = path.join(__dirname, '..', '..', 'server', '.env')
|
|
|
|
if (fs.existsSync(serverEnv)) {
|
|
require('dotenv').config({ path: serverEnv })
|
|
}
|
|
|
|
const bucket = process.env.COS_BUCKET
|
|
const region = process.env.COS_REGION || process.env.TENCENT_REGION
|
|
const secretId = process.env.TENCENT_SECRET_ID
|
|
const secretKey = process.env.TENCENT_SECRET_KEY
|
|
const prefix = process.env.ADMIN_COS_PREFIX || 'admin/'
|
|
|
|
if (!bucket || !region || !secretId || !secretKey) {
|
|
console.error('COS_BUCKET, COS_REGION, TENCENT_SECRET_ID and TENCENT_SECRET_KEY are required')
|
|
process.exit(1)
|
|
}
|
|
|
|
if (!fs.existsSync(root)) {
|
|
console.error('Build output not found: ' + root)
|
|
process.exit(1)
|
|
}
|
|
|
|
const cos = new COS({ SecretId: secretId, SecretKey: secretKey })
|
|
|
|
function walk(dir) {
|
|
const files = []
|
|
fs.readdirSync(dir).forEach(name => {
|
|
const file = path.join(dir, name)
|
|
const stat = fs.statSync(file)
|
|
if (stat.isDirectory()) files.push.apply(files, walk(file))
|
|
else files.push(file)
|
|
})
|
|
return files
|
|
}
|
|
|
|
function contentType(file) {
|
|
if (file.endsWith('.html')) return 'text/html; charset=utf-8'
|
|
if (file.endsWith('.js')) return 'application/javascript; charset=utf-8'
|
|
if (file.endsWith('.css')) return 'text/css; charset=utf-8'
|
|
if (file.endsWith('.json')) return 'application/json; charset=utf-8'
|
|
if (file.endsWith('.svg')) return 'image/svg+xml'
|
|
if (file.endsWith('.png')) return 'image/png'
|
|
if (file.endsWith('.jpg') || file.endsWith('.jpeg')) return 'image/jpeg'
|
|
return 'application/octet-stream'
|
|
}
|
|
|
|
async function upload(file) {
|
|
const relative = path.relative(root, file).replace(/\\/g, '/')
|
|
const key = prefix + relative
|
|
await new Promise((resolve, reject) => {
|
|
cos.putObject({
|
|
Bucket: bucket,
|
|
Region: region,
|
|
Key: key,
|
|
Body: fs.createReadStream(file),
|
|
ContentType: contentType(file)
|
|
}, err => err ? reject(err) : resolve())
|
|
})
|
|
console.log('uploaded ' + key)
|
|
}
|
|
|
|
async function main() {
|
|
const files = walk(root)
|
|
for (const file of files) {
|
|
await upload(file)
|
|
}
|
|
console.log('Admin console uploaded to cos://' + bucket + '/' + prefix)
|
|
}
|
|
|
|
main().catch(err => {
|
|
console.error(err.message || err)
|
|
process.exit(1)
|
|
})
|