5

我想以编程方式找出 npm 安装全局模块的文件夹。这个问题是类似的,但答案不适用于全局安装的模块:如何以编程方式获取 npm 安装模块的详细信息?

4

3 回答 3

4

从 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'));
})
于 2013-06-21T07:28:05.790 回答
1

如果你不想依赖 npm:

const { resolve } = require('path')    
const globalPath = resolve(process.execPath, '../../lib/node_modules')
于 2018-01-08T02:31:15.077 回答
1

NPM 的主要工作是“把东西放到你的电脑上”。他们的文件夹文档详细说明了它放在哪里

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

$ npm root -g

您可以使用 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)
}

延伸阅读

于 2020-10-20T00:17:54.473 回答