Files
ECShopX_desktop-frontend/nuxt/ossplugin.js
2025-12-30 09:46:09 +08:00

67 lines
1.5 KiB
JavaScript

const OSS = require('ali-oss')
class OssPlugin {
constructor (options = {}) {
const {
client,
region,
accessKeyId,
accessKeySecret,
bucket,
dist
} = options
let oss = new OSS({
region,
accessKeyId,
accessKeySecret,
bucket
})
this.options = {
client,
test: /\.(jpe?g|png|gif|svg|js)$/i,
dist,
oss
}
}
apply (compiler) {
compiler.hooks.emit.tapAsync('OssPlugin', async (compilation, callback) => {
const { client, test } = this.options
if (client) {
for (let key of Object.keys(compilation.assets)) {
if (test.test(key)) {
let source = compilation.assets[key].source()
if (!Buffer.isBuffer(source)) {
source = Buffer.from(source)
}
await this.putOSS(source, key)
}
}
// Object.keys(compilation.assets).(item => {
// // console.log(item)
// if (test.test(item)) {
// let source = compilation.assets[item].source()
// if (!Buffer.isBuffer(source)) {
// source = Buffer.from(source)
// }
// this.putOSS(source, item)
// }
// })
}
callback()
})
}
async putOSS (src, name) {
const { dist, oss } = this.options
try {
await oss.put(dist + name, src)
} catch (err) {
console.error('error: %j', err)
}
}
}
module.exports = OssPlugin