如何以编程方式获取npm安装全局模块的位置

时间:2013-06-21 07:19:37

标签: javascript node.js npm

我想以编程方式找出npm安装全局模块的文件夹。这个问题类似,但答案不适用于全局安装的模块:How to get details of npm installed modules programatically?

3 个答案:

答案 0 :(得分:2)

来自nodejs网站:

  

全局 - 这会将模块放在{prefix} / lib / node_modules中,并将可执行文件放在{prefix} / bin中,其中{prefix}通常类似于/ usr / local。它还会在{prefix} / share / man中安装手册页,如果它们已经提供的话。

要获取前缀,请输入:

npm config get prefix

编辑:

要从节点执行此操作,请使用npm npm模块。这样的事情会起作用:

var npm = require("npm")
var myConfigObject = {}
npm.load(myConfigObject, function (er) {
    if (er) return handleError(er)
    console.log(npm.get('prefix'));
})

答案 1 :(得分:0)

如果你不想依赖于npm:

const { resolve } = require('path')    
const globalPath = resolve(process.execPath, '../../lib/node_modules')

答案 2 :(得分:0)

NPM的主要工作是“将东西放在计算机上”。他们的folders documentation详细说明了放置位置

由于操作系统,.npmrc配置和prefix属性之间的差异,最简单的方法是依靠npm通过使用npm root来确定全局安装目录,如下所示:< / p>

$ npm root -g

您可以execute a command line binary with Node.js这样:

const { exec } = require('child_process')
const { promisify } = require('util');

async function main() {
    let execAsync = promisify(exec);
    let { stdout: globalPath } = await execAsync("npm root -g");
    console.log(globalPath);
}

或者,为了以编程方式访问npm模块,您需要在本地安装它:

$ npm i npm --save

然后您可以运行以下代码:

const npm = require("npm")
const { promisify } = require('util');

async function main() {
    await promisify(npm.load)()
    let globalPath = npm.root
    console.log(globalPath)
}

进一步阅读