get-package-json.js 1014 B

12345678910111213141516171819202122232425262728293031323334
  1. // LICENSE : MIT
  2. "use strict";
  3. var assert = require("assert");
  4. var path = require("path");
  5. var packageName = require("../package.json").name;
  6. var packageNameReg = new RegExp('^' + packageName); // for support nodejs < 4.x, same as 'startsWith'
  7. function findPackageDir(paths) {
  8. if (!paths) {
  9. return null;
  10. }
  11. for (var i = 0; i < paths.length; ++i) {
  12. var dir = path.dirname(paths[i]);
  13. var dirName = dir.split(path.sep).pop();
  14. // ignore self and `.pnpm`. (support pnpm install)
  15. if (!packageNameReg.test(dirName) && dirName !== '.pnpm') {
  16. return dir;
  17. }
  18. }
  19. }
  20. /**
  21. * find package.json directory and return package json.
  22. * You should pass `module.paths` to `paths`.
  23. * @param {string[]} paths the paths for look-up
  24. * @returns {object}
  25. */
  26. function getPackageJSON(paths) {
  27. var dir = findPackageDir(paths);
  28. assert(dir, "package.json is not found");
  29. return require(path.resolve(dir, "package.json"));
  30. }
  31. module.exports = getPackageJSON;