Grunt-获取当前调用文件夹,而不是gruntfile当前文件夹



如果我在某个文件夹/foo中安装了Grunt,但我当前的文件夹是/foo/bar/baz,并且我在当前文件夹中运行"Grunt sometask",我如何获得Grunt(或NodeJS)来确定我当前的路径?也就是说,我如何以编程方式获取我调用grunt时所在的文件夹?

当我使用process.cwd()时,我会得到grunt文件的路径,即"foo",这不是我想要的。

我不必在Grunt中特别这样做,任何基于nodejs的解决方案都可以工作。

根据源代码:

默认情况下,所有文件路径都是相对于Gruntfile 的

并且,voilá,这行代码显示了grunt是如何将当前目录更改为Gruntfile的路径的:

process.chdir(grunt.option('base') || path.dirname(gruntfile));

然而,选项--base就是这样。请参阅文档:http://gruntjs.com/api/grunt.file

如果不需要从Gruntfile内部执行,只需运行一个捕获process.cwd()然后捕获execs grunt的脚本即可。

请参阅:https://www.npmjs.com/package/exec

var exec = require('exec');
process.cwd(); // Will have your current path
exec(['grunt', 'mytask'], function(err, out, code) {
  if (err instanceof Error)
    throw err;
  process.stderr.write(err);
  process.stdout.write(out);
  process.exit(code);
});

在Mac或Linex中,您可以通过获得

process.env.PWD

在窗口中,未知

您可以编辑grunt cli来完成此操作。

grunt cli/bin/grunt

require(gruntpath).cli({_originDir:basedir});

然后在gruntfile.js中,可以执行以下操作:

grunt.option('_originDir')

最新更新