遍历Node(Grunt)中的目录

时间:2014-06-21 23:24:45

标签: javascript node.js directory gruntjs traversal

在构建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行。

导致该错误的原因是什么?我在这里错过了什么吗?

1 个答案:

答案 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) {});