【问题标题】:How to programmatically get the location where npm installs global modules如何以编程方式获取 npm 安装全局模块的位置
【发布时间】:2013-06-21 07:19:37
【问题描述】:

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

【问题讨论】:

    标签: javascript node.js npm


    【解决方案1】:

    来自 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 模块,这样我就可以从 javascript 而不是从命令执行中获取正确的前缀,我就准备好了!
    • 所以实际上,我的在 /node_modules - 我没有 lib 或 bin 文件夹。我在窗户上。
    • npm 有一个 npm 模块。也许这会有所帮助。
    • 另一个注意事项,看起来他们在 Windows 上的做法与在 linux 上的做法略有不同。全局模块安装在widows的/node_modules,而linux的安装在/lib/node_modules。
    • module.paths.push(/node_modules)
    【解决方案2】:

    如果你不想依赖 npm:

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

    【讨论】:

    【解决方案3】:

    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)
    }
    

    进一步阅读

    【讨论】:

      猜你喜欢
      • 2011-12-15
      • 2011-08-14
      • 1970-01-01
      • 1970-01-01
      • 2015-02-07
      • 2016-02-22
      • 2014-02-07
      • 2012-09-17
      • 2011-10-28
      相关资源
      最近更新 更多