【发布时间】:2013-06-21 07:19:37
【问题描述】:
我想以编程方式找出 npm 安装全局模块的文件夹。这个问题类似,但答案不适用于全局安装的模块:How to get details of npm installed modules programatically?
【问题讨论】:
标签: javascript node.js npm
我想以编程方式找出 npm 安装全局模块的文件夹。这个问题类似,但答案不适用于全局安装的模块:How to get details of npm installed modules programatically?
【问题讨论】:
标签: javascript node.js npm
来自 nodejs 网站:
globally - 这会将模块放在 {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'));
})
【讨论】:
如果你不想依赖 npm:
const { resolve } = require('path')
const globalPath = resolve(process.execPath, '../../lib/node_modules')
【讨论】:
NPM 的主要工作是“将东西放到您的计算机上”。他们的folders documentation 详细说明了它放在哪里
由于操作系统、.npmrc 配置和prefix 属性之间的差异,最容易依靠 npm 使用 npm root 来确定全局安装目录,如下所示:
$ 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)
}
【讨论】: