@icanvas/webpack
Version:
这是icanvas的默认webpack打包配置
54 lines (52 loc) • 2.08 kB
JavaScript
const fs = require('fs-extra');
const path = require('path');
const qiniu = require('qiniu');
const Zip = require('./zip.js');
var config = new qiniu.conf.Config();
var Uploader = new qiniu.resume_up.ResumeUploader(config);
module.exports = class {
constructor(From, To, RemoteResourceMap, Action, Qiniu) {
let mac = new qiniu.auth.digest.Mac(Qiniu.Key, Qiniu.Secret);
this.options = { From, To, Action, RemoteResourceMap };
this.options.Token = new qiniu.rs.PutPolicy({ scope: Qiniu.Bucket, expires: 7200 }).uploadToken(mac);
}
apply(compiler) {
compiler.plugin('after-emit', (compilation, callback) => {
let CachePath = path.resolve(process.cwd(), '..', 'cache');
fs.emptyDir(CachePath)
.then(() => fs.writeJson(path.resolve(CachePath, 'resource.json'), { Resource: this.options.RemoteResourceMap }))
.then(() => this[this.options.Action](CachePath))
.then(() => callback())
.catch(e => callback(e));
});
}
zip(CachePath) {
let ZipPath = path.resolve(CachePath, 'resource.zip');
let CacheJsonPath = path.resolve(CachePath, 'resource.json');
return Zip(this.options.From, ZipPath, CacheJsonPath).then(() => this.Upload(ZipPath, '.zip'));
}
dir() {
let CacheJsonPath = path.resolve(CachePath, 'resource.json');
return this.Uploads(this.options.RemoteResourceMap).then(() => this.Upload(CacheJsonPath, '/option.json'));
}
Uploads(json, before = '') {
return Object.keys(json).reduce((promise, k) => {
if (typeof json[k] == 'object') return promise.then(() => this.Uploads(json[k], before + k + '/'));
let filename = '/' + (k == '_' ? before.slice(0, -1) : before + k) + '.' + json[k];
return promise.then(() => this.Upload(this.options.From + filename, filename));
}, Promise.resolve());
}
Upload(from, to) {
return new Promise((s, f) => {
console.log(`上传${from}到${this.options.To + to}`);
return Uploader.putFile(this.options.Token, this.options.To + to, from, null, (err, ret, info) => {
if (err) {
console.log(err, info);
f(err);
} else {
s(ret);
}
});
});
}
};