Sha256: 2b861ebeb2dae718b4d65c739fc74707d47b154382863f666de21c48287f52d7

Contents?: true

Size: 1.95 KB

Versions: 50

Compression:

Stored size: 1.95 KB

Contents

/*!
 * global-prefix <https://github.com/jonschlinkert/global-prefix>
 *
 * Copyright (c) 2015-present Jon Schlinkert.
 * Licensed under the MIT license.
 */

'use strict';

const fs = require('fs');
const os = require('os');
const path = require('path');
const ini = require('ini');
let prefix;

const getPrefix = () => {
  if (process.env.PREFIX) return process.env.PREFIX;
  if (prefix) return prefix;

  // Start by checking if the global prefix is set by the user
  let home = os.homedir();

  // os.homedir() returns undefined if $HOME is not set; path.resolve requires strings
  if (home) {
    prefix = tryConfigPath(path.resolve(home, '.npmrc'));
  }

  if (prefix) {
    return prefix;
  }

  // Otherwise find the path of npm
  let npm = tryNpmPath();
  if (npm) {
    // Check the built-in npm config file
    prefix = tryConfigPath(path.resolve(npm, '..', '..', 'npmrc'));

    if (prefix) {
      // Now the global npm config can also be checked.
      prefix = tryConfigPath(path.resolve(prefix, 'etc', 'npmrc')) || prefix;
    }
  }

  if (!prefix) {
    let { APPDATA, DESTDIR, OSTYPE } = process.env;

    // c:\node\node.exe --> prefix=c:\node\
    if (process.platform === 'win32' || OSTYPE === 'msys' || OSTYPE === 'cygwin') {
      prefix = APPDATA ? path.join(APPDATA, 'npm') : path.dirname(process.execPath);
      return prefix;
    }

    // /usr/local/bin/node --> prefix=/usr/local
    prefix = path.dirname(path.dirname(process.execPath));

    // destdir only is respected on Unix
    if (DESTDIR) {
      prefix = path.join(DESTDIR, prefix);
    }
  }

  return prefix;
}

function tryNpmPath() {
  try {
    return fs.realpathSync(require('which').sync('npm'));
  } catch (err) { /* do nothing */ }
}

function tryConfigPath(configPath) {
  try {
    return ini.parse(fs.readFileSync(configPath, 'utf-8')).prefix;
  } catch (err) { /* do nothing */ }
}

/**
 * Expose `prefix`
 */

Reflect.defineProperty(module, 'exports', {
  get() {
    return getPrefix();
  }
});

Version data entries

50 entries across 49 versions & 9 rubygems

Version Path
trusty-cms-6.3.1 node_modules/global-prefix/index.js
optimacms-0.1.61 spec/dummy/node_modules/global-prefix/index.js
disco_app-0.18.0 test/dummy/node_modules/global-prefix/index.js
disco_app-0.18.2 test/dummy/node_modules/global-prefix/index.js
trusty-cms-5.0.7 node_modules/global-prefix/index.js
trusty-cms-5.0.6 node_modules/global-prefix/index.js
trusty-cms-5.0.5 node_modules/global-prefix/index.js
trusty-cms-5.0.4 node_modules/global-prefix/index.js
disco_app-0.16.1 test/dummy/node_modules/global-prefix/index.js
disco_app-0.15.2 test/dummy/node_modules/global-prefix/index.js
trusty-cms-5.0.3 node_modules/global-prefix/index.js
trusty-cms-5.0.2 node_modules/global-prefix/index.js
disco_app-0.18.4 test/dummy/node_modules/global-prefix/index.js
disco_app-0.18.1 test/dummy/node_modules/global-prefix/index.js
disco_app-0.12.7.pre.puma.pre.3 test/dummy/node_modules/global-prefix/index.js
disco_app-0.14.0 test/dummy/node_modules/global-prefix/index.js
disco_app-0.13.6.pre.puma.pre.3 test/dummy/node_modules/global-prefix/index.js
trusty-cms-5.0.1 node_modules/global-prefix/index.js
trusty-cms-4.3.5 node_modules/global-prefix/index.js
trusty-cms-5.0.0 node_modules/global-prefix/index.js