updateLib.js 1.5 KB

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