npm-conf.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. "use strict";
  2. const path = require("path");
  3. const Conf = require("./conf");
  4. const defaults = require("./defaults");
  5. const toNerfDart = require("./nerf-dart");
  6. module.exports = npmConf;
  7. module.exports.Conf = Conf;
  8. module.exports.defaults = Object.assign({}, defaults.defaults);
  9. module.exports.toNerfDart = toNerfDart;
  10. // https://github.com/npm/npm/blob/latest/lib/config/core.js#L101-L200
  11. function npmConf(opts) {
  12. const conf = new Conf(Object.assign({}, defaults.defaults));
  13. // prevent keys with undefined values from obscuring defaults
  14. const cleanOpts = opts
  15. ? Object.keys(opts).reduce((acc, key) => {
  16. if (opts[key] !== undefined) {
  17. // eslint-disable-next-line no-param-reassign
  18. acc[key] = opts[key];
  19. }
  20. return acc;
  21. }, {})
  22. : {};
  23. conf.add(cleanOpts, "cli");
  24. conf.addEnv();
  25. conf.loadPrefix();
  26. const projectConf = path.resolve(conf.localPrefix, ".npmrc");
  27. const userConf = conf.get("userconfig");
  28. /* istanbul ignore else */
  29. if (!conf.get("global") && projectConf !== userConf) {
  30. conf.addFile(projectConf, "project");
  31. } else {
  32. conf.add({}, "project");
  33. }
  34. conf.addFile(conf.get("userconfig"), "user");
  35. /* istanbul ignore else */
  36. if (conf.get("prefix")) {
  37. const etc = path.resolve(conf.get("prefix"), "etc");
  38. conf.root.globalconfig = path.resolve(etc, "npmrc");
  39. conf.root.globalignorefile = path.resolve(etc, "npmignore");
  40. }
  41. conf.addFile(conf.get("globalconfig"), "global");
  42. conf.loadUser();
  43. const caFile = conf.get("cafile");
  44. /* istanbul ignore if */
  45. if (caFile) {
  46. conf.loadCAFile(caFile);
  47. }
  48. return conf;
  49. }