UNPKG

@icanvas/webpack

Version:

这是icanvas的默认webpack打包配置

54 lines (52 loc) 2.08 kB
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); } }); }); } };