61 lines
2.7 KiB
JavaScript
61 lines
2.7 KiB
JavaScript
const fs = require('fs')
|
|
const path = require('path')
|
|
const generateServiceWorkers = require('generate-service-worker')
|
|
const zopfli = require('node-zopfli')
|
|
const brotli = require('iltorb')
|
|
const compile = require('google-closure-compiler-js').compile
|
|
const uglify = require('uglify-js').minify
|
|
const sw = require('sw-precache').generate
|
|
const chalk = require('chalk')
|
|
const log = console.log;
|
|
/*
|
|
module.exports = (config, result) => {
|
|
const destination_path = path.join(config.basepath, config.dist_path, config.javascipt_path, config.serviceworker.file)
|
|
const options = {
|
|
'staticFileGlobs': config.serviceworker.statics.map(static => path.join(config.basepath, config.dist_path, static)),
|
|
'stripPrefix': path.join(config.basepath, config.dist_path),
|
|
}
|
|
return new Promise((resolve, reject) => {
|
|
log(' ', chalk.green('>>'), 'Creating serviceworker code')
|
|
sw(options, async (err, code) => {
|
|
let create_promises = []
|
|
try {
|
|
const flags = {jsCode: [{src: code}]}
|
|
log(' ', chalk.green('>>'), 'Running closure compiler')
|
|
const compile_result = compile(flags)
|
|
log(' ', chalk.green('>>'), 'Running UgifyJS')
|
|
const uglify_result = uglify(compile_result.compiledCode)
|
|
// write plain minified file
|
|
log(' ', chalk.green('>>'), 'Writing minified file')
|
|
create_promises.push(new Promise((res, rej) => fs.writeFile(destination_path, uglify_result.code, err => err ? rej(err) : res())))
|
|
// write zopfli compressed file
|
|
log(' ', chalk.green('>>'), 'Writing zopfli compressed file')
|
|
create_promises.push(new Promise((res, rej) => zopfli.gzip(new Buffer(uglify_result.code), (err, output) => fs.writeFile(destination_path + '.gz', output, err => err ? rej(err) : res()))))
|
|
// write brotli compressed file
|
|
log(' ', chalk.green('>>'), 'Writing brotli compressed file')
|
|
create_promises.push(new Promise((res, rej) => brotli.compress(new Buffer(uglify_result.code), (err, output) => fs.writeFile(destination_path + '.br', output, err => err ? rej(err) : res()))))
|
|
await Promise.all(create_promises)
|
|
resolve(uglify_result.code)
|
|
} catch(err) {
|
|
reject(err)
|
|
}
|
|
})
|
|
})
|
|
}*/
|
|
|
|
// create cache
|
|
const create_cache_map = (config, result) => {
|
|
return {
|
|
offline: true,
|
|
precache: result.css.map(item => path.join(path.dirname(item.include), item.hash.substr(0, 6) + '.' + path.basename(item.include))),
|
|
strategy: [{type: 'prefer-cache', matches: ['\\' + path.extname(result.css[0].include)]}],
|
|
}
|
|
}
|
|
|
|
module.exports = async (config, result) => {
|
|
const cache = create_cache_map(config, result)
|
|
const serviceWorkers = generateServiceWorkers({cache})
|
|
console.log(serviceWorkers.main)
|
|
return {}
|
|
}
|