update-dependency.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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. // Make sure we have required command line arguments.
  7. if (process.argv.length < 4) {
  8. var msg = '** Must supply a target library and separate version specifier';
  9. process.stderr.write(msg);
  10. process.exit(1);
  11. }
  12. // Extract the desired library target and specifier.
  13. var target = process.argv[2];
  14. var specifier = process.argv[3];
  15. // Translate @latest to a concrete version.
  16. if (specifier === '@latest') {
  17. var cmd = 'npm view ' + target + ' version';
  18. var specifier = childProcess.execSync(cmd);
  19. specifier = '^' + String(specifier).trim();
  20. }
  21. // Get all of the packages.
  22. var basePath = path.resolve('.');
  23. var lernaConfig = require(path.join(basePath, 'lerna.json'));
  24. var packageConfig = lernaConfig.packages;
  25. // Handle the packages
  26. for (var i = 0; i < packageConfig.length; i++) {
  27. var files = glob.sync(path.join(basePath, packageConfig[i]));
  28. for (var j = 0; j < files.length; j++) {
  29. handlePackage(files[j]);
  30. }
  31. }
  32. handlePackage(basePath);
  33. /**
  34. * Handle an individual package on the path - update the dependency.
  35. */
  36. function handlePackage(packagePath) {
  37. // Read in the package.json.
  38. var packagePath = path.join(packagePath, 'package.json');
  39. try {
  40. var package = require(packagePath);
  41. } catch (e) {
  42. console.log('Skipping package ' + packagePath);
  43. return;
  44. }
  45. // Update dependencies as appropriate.
  46. if (target in package['dependencies']) {
  47. package['dependencies'][target] = specifier;
  48. } else if (target in package['devDependencies']) {
  49. package['devDependencies'][target] = specifier;
  50. }
  51. // Write the file back to disk.
  52. fs.writeFileSync(packagePath, JSON.stringify(package, null, 2) + '\n');
  53. }