clean-packages.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #!/usr/bin/env node
  2. var fs = require('fs');
  3. var path = require('path');
  4. var glob = require('glob');
  5. var childProcess = require('child_process');
  6. // Get all of the packages.
  7. var basePath = path.resolve('.');
  8. var lernaConfig = require(path.join(basePath, 'lerna.json'));
  9. var packageConfig = lernaConfig.packages;
  10. var skipSource = process.argv.indexOf('packages') === -1;
  11. var skipExamples = process.argv.indexOf('examples') === -1;
  12. // Handle the packages
  13. for (var i = 0; i < packageConfig.length; i++) {
  14. if (skipSource && packageConfig[i] === 'packages/*') {
  15. continue;
  16. }
  17. if (skipExamples && packageConfig[i] === 'examples/*') {
  18. continue;
  19. }
  20. var files = glob.sync(path.join(basePath, packageConfig[i]));
  21. for (var j = 0; j < files.length; j++) {
  22. try {
  23. handlePackage(files[j]);
  24. } catch (e) {
  25. console.error(e);
  26. }
  27. }
  28. }
  29. /**
  30. * Handle an individual package on the path - update the dependency.
  31. */
  32. function handlePackage(packagePath) {
  33. // Read in the package.json.
  34. var packagePath = path.join(packagePath, 'package.json');
  35. try {
  36. var package = require(packagePath);
  37. } catch (e) {
  38. console.log('skipping', packagePath);
  39. return
  40. }
  41. if (!package.scripts || !package.scripts.clean) {
  42. return;
  43. }
  44. var targets = package.scripts.clean.split('&&');
  45. for (var i = 0; i < targets.length; i++) {
  46. var target = targets[i].replace('rimraf', '').trim();
  47. target = path.join(packagePath, target);
  48. if (fs.existsSync(target)) {
  49. fs.removeSync(target);
  50. }
  51. }
  52. }