78 lines
1.7 KiB
JavaScript
78 lines
1.7 KiB
JavaScript
import fs from 'node:fs';
|
|
import path from 'node:path';
|
|
|
|
import OSS from 'ali-oss';
|
|
|
|
export default function vitePluginOss(options = {}) {
|
|
const {
|
|
enabled = false,
|
|
region,
|
|
accessKeyId,
|
|
accessKeySecret,
|
|
bucket,
|
|
prefix = '',
|
|
deleteLocal = false,
|
|
} = options;
|
|
|
|
if (!enabled) {
|
|
return {
|
|
name: 'vite-plugin-oss',
|
|
apply: 'build',
|
|
closeBundle() {
|
|
console.log('OSS upload disabled');
|
|
},
|
|
};
|
|
}
|
|
|
|
return {
|
|
name: 'vite-plugin-oss',
|
|
apply: 'build',
|
|
async closeBundle() {
|
|
console.log('Starting OSS upload...');
|
|
|
|
const client = new OSS({
|
|
region,
|
|
accessKeyId,
|
|
accessKeySecret,
|
|
bucket,
|
|
});
|
|
|
|
const distPath = path.resolve(process.cwd(), 'dist');
|
|
|
|
if (!fs.existsSync(distPath)) {
|
|
console.error('Dist folder not found');
|
|
return;
|
|
}
|
|
|
|
try {
|
|
await uploadDirectory(client, distPath, prefix);
|
|
console.log('OSS upload completed successfully');
|
|
|
|
if (deleteLocal) {
|
|
fs.rmSync(distPath, { recursive: true, force: true });
|
|
console.log('Local dist folder deleted');
|
|
}
|
|
} catch (error) {
|
|
console.error('OSS upload failed:', error);
|
|
}
|
|
},
|
|
};
|
|
}
|
|
|
|
async function uploadDirectory(client, localPath, prefix) {
|
|
const files = fs.readdirSync(localPath);
|
|
|
|
for (const file of files) {
|
|
const localFilePath = path.join(localPath, file);
|
|
const stats = fs.statSync(localFilePath);
|
|
|
|
if (stats.isDirectory()) {
|
|
await uploadDirectory(client, localFilePath, `${prefix}${file}/`);
|
|
} else {
|
|
const ossKey = `${prefix}${file}`;
|
|
await client.put(ossKey, localFilePath);
|
|
console.log(`Uploaded: ${ossKey}`);
|
|
}
|
|
}
|
|
}
|