在构建grunt plugin时遇到一个奇怪的问题。
基本上,我想在我的grunt任务中使用node_module。为此,我想遍历一个级别,然后进入节点模块以专门调用它们的一个文件。
最初,我想这样做:
../node_modules/github-changes/bin/index.js
但是,我收到以下错误:
Warning: Command failed: /bin/sh: 1: ../node_modules/github-changes/bin/index.js: not found
Use --force to continue.
所以,现在我讨厌使用Node的__dirname变量,但它不是很漂亮:
var dirHack = __dirname.replace("/tasks", ""), // Terrible hack, need to fix
ghC = dirHack + '/node_modules/github-changes/bin/index.js';
这很有效,但我很乐意避免它。
您可以看到第here行。
导致该错误的原因是什么?我在这里错过了什么吗?
答案 0 :(得分:1)
如果github-changes
是依赖关系,则可以使用ghC = require.resolve('github-changes/bin/index.js')
解析包中文件的路径。
但是你得到了这个错误,因为你试图将该文件作为shell脚本运行,但事实并非如此。您需要使用节点运行它。查找节点可执行文件路径的最简单方法是process.execPath
。见http://nodejs.org/api/process.html#process_process_execpath
以下是一个例子:
var exec = require('child_process').exec;
var ghC = require.resolve('github-changes/bin/index.js');
exec(process.execPath + ' ' + ghC, function(error) {});