1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| #!/usr/bin/env node
var fs = require('fs'), path = require('path'), cheerio = require('cheerio'), revHash = require('rev-hash');
var rootDir = path.resolve(__dirname, '../');
var wwwRootDir = path.resolve(rootDir, 'www'); var buildDir = path.join(wwwRootDir, 'build'); var indexPath = path.join(wwwRootDir, 'index.html');
var cssPath = path.join(buildDir, 'main.css'); var cssFileHash = revHash(fs.readFileSync(cssPath)); var cssNewFileName = `main.${cssFileHash}.css`; var cssNewPath = path.join(buildDir, cssNewFileName); var cssNewRelativePath = path.join('build', cssNewFileName);
var jsPath = path.join(buildDir, 'main.js'); var jsFileHash = revHash(fs.readFileSync(jsPath)); var jsNewFileName = `main.${jsFileHash}.js`; var jsNewPath = path.join(buildDir, jsNewFileName); var jsNewRelativePath = path.join('build', jsNewFileName);
var jsPolyfillsPath = path.join(buildDir, 'polyfills.js'); var jsPolyfillsFileHash = revHash(fs.readFileSync(jsPolyfillsPath)); var jsPolyfillsNewFileName = `polyfills.${jsPolyfillsFileHash}.js`; var jsPolyfillsNewPath = path.join(buildDir, jsPolyfillsNewFileName); var jsPolyfillsNewRelativePath = path.join('build', jsPolyfillsNewFileName);
var jsVendorPath = path.join(buildDir, 'vendor.js'); var jsVendorFileHash = revHash(fs.readFileSync(jsVendorPath)); var jsVendorNewFileName = `vendor.${jsVendorFileHash}.js`; var jsVendorNewPath = path.join(buildDir, jsVendorNewFileName); var jsVendorNewRelativePath = path.join('build', jsVendorNewFileName);
fs.renameSync(cssPath, cssNewPath);
fs.renameSync(jsPath, jsNewPath);
fs.renameSync(jsPolyfillsPath, jsPolyfillsNewPath);
fs.renameSync(jsVendorPath, jsVendorNewPath);
$ = cheerio.load(fs.readFileSync(indexPath, 'utf-8'));
$('head link[href="build/main.css"]').attr('href', cssNewRelativePath); $('body script[src="build/main.js"]').attr('src', jsNewRelativePath); $('body script[src="build/polyfills.js"]').attr('src', jsPolyfillsNewRelativePath); $('body script[src="build/vendor.js"]').attr('src', jsVendorNewRelativePath);
fs.writeFileSync(indexPath, $.html());
|