build.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. const fs = require('fs');
  2. const path = require('path');
  3. const uglify = require('uglify-js');
  4. const rollup = require('rollup');
  5. const buble = require('rollup-plugin-buble');
  6. const version = require('./package.json').version;
  7. const banner =
  8. `/*!
  9. * perfect-scrollbar v${version}
  10. * (c) ${new Date().getFullYear()} Hyunje Jun
  11. * @license MIT
  12. */`;
  13. if (!fs.existsSync('dist')) {
  14. fs.mkdirSync('dist')
  15. }
  16. const resolve = _path => path.resolve(__dirname, _path);
  17. const entry = resolve('src/index.js');
  18. build([
  19. {
  20. dest: resolve('dist/perfect-scrollbar.js'),
  21. format: 'umd',
  22. },
  23. {
  24. dest: resolve('dist/perfect-scrollbar.min.js'),
  25. format: 'umd',
  26. },
  27. {
  28. dest: resolve('dist/perfect-scrollbar.common.js'),
  29. format: 'cjs'
  30. },
  31. {
  32. dest: resolve('dist/perfect-scrollbar.esm.js'),
  33. format: 'es'
  34. }
  35. ]);
  36. function build(builds) {
  37. let built = 0;
  38. const total = builds.length;
  39. const next = () => {
  40. buildEntry(builds[built]).then(() => {
  41. built++;
  42. if (built < total) {
  43. next();
  44. }
  45. }).catch((e) => console.log(e));
  46. }
  47. next();
  48. }
  49. function buildEntry(opts) {
  50. const isProd = /min\.js$/.test(opts.dest);
  51. return rollup
  52. .rollup({
  53. input: entry,
  54. plugins: [buble()],
  55. })
  56. .then(bundle => bundle.generate({
  57. file: opts.dest,
  58. format: opts.format,
  59. name: 'PerfectScrollbar',
  60. banner,
  61. }))
  62. .then(({code}) => {
  63. if (isProd) {
  64. code = (banner ? banner + '\n' : '') + uglify.minify(code, {
  65. output: {
  66. ascii_only: true
  67. },
  68. compress: {
  69. pure_funcs: ['makeMap']
  70. }
  71. }).code;
  72. }
  73. return write(opts.dest, code);
  74. })
  75. }
  76. function write(dest, code) {
  77. return new Promise((resolve, reject) => {
  78. fs.writeFile(dest, code, err => {
  79. if (err) {
  80. return reject(err);
  81. }
  82. console.log(path.relative(process.cwd(), dest));
  83. resolve();
  84. });
  85. });
  86. }