update-dependency.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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. var utils = requier('./utils');
  7. // Make sure we have required command line arguments.
  8. if (process.argv.length !== 3) {
  9. var msg = '** Must supply an update specifier\n';
  10. process.stderr.write(msg);
  11. process.exit(1);
  12. }
  13. // Extract the desired library target and specifier.
  14. var parts = process.argv[2].split('@');
  15. // Translate @latest to a concrete version.
  16. if (parts.length == 1 || parts[1] == 'latest') {
  17. var cmd = 'npm view ' + target + ' version';
  18. parts.push('~' + String(childProcess.execSync(cmd)).trim());
  19. }
  20. var name = parts[0];
  21. var specifier = parts[1];
  22. // Handle the packages
  23. utils.getLernaPaths().forEach(function (pkgPath) {
  24. handlePackage(pkgPath);
  25. });
  26. handlePackage(path.resolve('.'));
  27. /**
  28. * Handle an individual package on the path - update the dependency.
  29. */
  30. function handlePackage(packagePath) {
  31. // Read in the package.json.
  32. var packagePath = path.join(packagePath, 'package.json');
  33. try {
  34. var data = require(packagePath);
  35. } catch (e) {
  36. console.log('Skipping package ' + packagePath);
  37. return;
  38. }
  39. // Update dependencies as appropriate.
  40. if (target in data['dependencies']) {
  41. data['dependencies'][target] = specifier;
  42. } else if (target in data['devDependencies']) {
  43. data['devDependencies'][target] = specifier;
  44. }
  45. // Write the file back to disk.
  46. utils.ensurePackageData(data, packagePath);
  47. }