updateLib.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. 'use strict';
  2. const fs = require('fs');
  3. const path = require('path');
  4. const glob = require('glob');
  5. const ncp = require('ncp');
  6. const SRC_DIR = 'src/public/lib';
  7. const aliases = {
  8. CodeMirror: 'codemirror',
  9. 'font-awesome': {},
  10. };
  11. function getFiles(pattern, cwd) {
  12. return new Promise((resolve, reject) => {
  13. glob(pattern, {nodir: true, cwd: cwd || '.'}, (err, files) => {
  14. err ? reject(err) : resolve(files);
  15. });
  16. });
  17. }
  18. function readdir(dir) {
  19. return new Promise((resolve, reject) => {
  20. fs.readdir(dir, (err, files) => {
  21. err ? reject(err) : resolve(files);
  22. });
  23. });
  24. }
  25. function copyFile(src, dest) {
  26. return new Promise((resolve, reject) => {
  27. ncp(src, dest, (err) => err ? reject(err) : resolve());
  28. }).then(() => {
  29. console.log(src + ' => ' + dest);
  30. });
  31. }
  32. function update(lib, files) {
  33. let alias = aliases[lib];
  34. if (typeof alias === 'string') alias = {
  35. lib: alias,
  36. };
  37. alias.lib = alias.lib || lib;
  38. const libdir = `node_modules/${alias.lib}`;
  39. const srcdir = `${SRC_DIR}/${lib}`
  40. return Promise.all(files.map((file) => {
  41. let aliasFile = alias.files && alias.files[file] || file;
  42. if (aliasFile.endsWith('/')) aliasFile += file;
  43. const libfile = path.join(libdir, aliasFile);
  44. return copyFile(libfile, path.join(srcdir, file));
  45. })).catch(function (err) {
  46. console.log(err);
  47. });
  48. }
  49. readdir(SRC_DIR).then((data) => {
  50. data.forEach(function (name) {
  51. if (!aliases[name]) return;
  52. getFiles('**', `${SRC_DIR}/${name}`).then((files) => {
  53. update(name, files);
  54. });
  55. });
  56. });