updateLib.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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 aliases = {
  7. CodeMirror: 'codemirror',
  8. 'font-awesome': {},
  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/lib/${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/lib').then((data) => {
  49. data.forEach(function (name) {
  50. if (!aliases[name]) return;
  51. getFiles('**', `src/lib/${name}`).then((files) => {
  52. update(name, files);
  53. });
  54. });
  55. });