node.js - 如何找到由我的 NPM 包依赖项之一安装的二进制文件以便我可以执行它?

标签 node.js npm

我有一个 NPM 包,它依赖 node-pg-migrate 。在我的包中,我需要执行 node-pg-migrate 的二进制文件 pg-migrate。我正在运行 Node 0.12.13。

如果我安装包的应用程序不依赖于 node-pg-migrate,那么这很简单。该依赖项安装在我的包内的 node_modules 目录中。

- node_modules
| - my-package
  | - node_modules
    | - node-pg-migrate

在这种情况下我会这样做

exec('./node_modules/node-pg-migrate/bin/pg-migrate up', 
  function(error, stdout, stderr) { 
    // do something
  }
);

但是,如果我将包安装到的应用依赖于 node-pg-migrate,那么它将与我的包一起安装在应用的 node_modules 目录中。

- node_modules
| - my-package
| - node-pg-migrate

我考虑过首先检查我的包的 node_modules 中是否有 pg-migrate ,如果不存在则退出一个级别,但如果我的包是内部依赖项,那么这种情况就会崩溃。然后,我可能不得不尝试再上一层。

- node_modules
| - node-pg-migrate?
| - some-package
  | - node_modules
    | - node-pg-migrate?
    | - my-package
      | - node_modules
        | - node-pg-migrate?

如何找到 pg-migrate 二进制文件的位置并运行它,无论它位于依赖关系树中的哪个位置?

最佳答案

const binDir = execFileSync('npm', ['bin']).toString().trim();

exec(binDir + ' pg-migrate up', 
  function(error, stdout, stderr) { 
    // do something
  }
);

关于node.js - 如何找到由我的 NPM 包依赖项之一安装的二进制文件以便我可以执行它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36943989/

相关文章:

javascript - node.js - MongoDB native 中的 RegExp

node.js - Github Actions 和 npm - npm : command not found

shell - 如何使用 Bash shell 命令使 npm 项目在 Windows 上工作?

node.js - 使用 Nodejs 检索存储在 Mongodb 中的图像

javascript - 创建可重用的 promise 链并将其应用到其他 promise 上

javascript - 传递给函数时的 Node.js 'undefined' 变量

javascript - 写入套接字非常快会导致连接缓冲区

node.js - "npm install ejs --save"无法在 GitBash 上运行,但在 Windows powershell 上使用时可以运行

node.js - Github 的 Action 不是构建 React 应用程序

node.js - 我可以在 npm package.json 中指定可选的模块依赖项吗?