build.js 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /**
  2. * FeHelper Build Script
  3. * @author zhaoxianlie
  4. */
  5. let path = require('path');
  6. let shell = require('shelljs');
  7. let glob = require('glob');
  8. let jsMinifier = require('babel-minify');
  9. let cssMinifier = require('uglifycss');
  10. let htmlMinifier = require('html-minifier');
  11. let fs = require('fs');
  12. let rootPath = path.resolve('.');
  13. // copy files
  14. let copyFiles = function () {
  15. console.time('> 文件拷贝');
  16. shell.cd(rootPath);
  17. shell.mkdir('-p', 'output');
  18. shell.rm('-rf', 'output/*');
  19. shell.cp('-r', 'apps', 'output');
  20. console.timeEnd('> 文件拷贝');
  21. };
  22. // js 文件压缩
  23. let jsCompress = function () {
  24. console.time('> Javascript文件压缩');
  25. glob.sync('output/apps/**/*.js').map(cf => {
  26. let rawJs = fs.readFileSync(cf, 'utf8').toString();
  27. let compressedJs = jsMinifier(rawJs);
  28. if (compressedJs.code) {
  29. fs.writeFileSync(cf, compressedJs.code);
  30. } else {
  31. console.log('---------------------', cf, '----------------------');
  32. console.log(compressedJs.error.message, '\n')
  33. }
  34. });
  35. console.timeEnd('> Javascript文件压缩');
  36. };
  37. // css 文件压缩
  38. let cssCompress = function () {
  39. console.time('> CSS文件压缩');
  40. let reg = /\@import\s+url\(\s*('|")([^\)]+)\1\s*\)\s*;?/gm;
  41. glob.sync('output/apps/**/*.css').map(cf => {
  42. let rawCss = fs.readFileSync(cf, 'utf8');
  43. rawCss = rawCss.toString().replace(reg, ($0, $1, importedFile) => {
  44. let iPath = path.resolve(cf, '../' + importedFile);
  45. return fs.readFileSync(iPath, 'utf8').toString();
  46. });
  47. let compressedCss = cssMinifier.processString(rawCss, {maxLineLen: 500, expandVars: true});
  48. fs.writeFileSync(cf, compressedCss);
  49. });
  50. console.timeEnd('> CSS文件压缩');
  51. };
  52. // html 文件压缩
  53. let htmlCompress = function () {
  54. console.time('> HTML文件压缩');
  55. glob.sync('output/apps/**/*.html').map(cf => {
  56. try {
  57. let rawHtml = fs.readFileSync(cf, 'utf8').toString();
  58. let compressedHtml = htmlMinifier.minify(rawHtml, {
  59. collapseWhitespace: true
  60. });
  61. fs.writeFileSync(cf, compressedHtml);
  62. } catch (e) {
  63. }
  64. });
  65. console.timeEnd('> HTML文件压缩');
  66. };
  67. // zip the fehelper
  68. let zipForChromeWebStore = function () {
  69. console.time('> FeHelper打包');
  70. shell.cd(`${rootPath}/output`);
  71. shell.exec('zip -r fehelper.zip apps/ > /dev/null');
  72. console.timeEnd('> FeHelper打包');
  73. console.log('\n\n================================================================================');
  74. console.log(' 去Chrome商店发布吧:https://chrome.google.com/webstore/developer/dashboard');
  75. console.log('================================================================================\n\n');
  76. };
  77. /************************build start*****************************/
  78. copyFiles();
  79. cssCompress();
  80. htmlCompress();
  81. jsCompress();
  82. zipForChromeWebStore();