我有一个 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/