Grunt - получить текущую папку вызова, а не gruntfile текущую папку

Если я установил Grunt в какую-то папку /foo, но моей текущей папкой является /foo/bar/baz, и я запускаю "grunt sometask" из моей текущей папки, как я могу получить Grunt (или, если на то пошло, NodeJS), чтобы определить мой текущий путь? То есть, как я могу программно ПОЛУЧИТЬ папку, в которой я находился, когда я звонил grunt?

Когда я использую process.cwd(), я получаю путь к gruntfile, то есть "foo", а это не то, что мне нужно.

Мне не нужно делать это специально в Grunt, подойдет любое решение на основе nodejs.

2 ответа

Согласно исходному коду:

По умолчанию все пути к файлам относятся к Gruntfile

И, вуаля, эта строка кода показывает, как grunt фактически меняет текущий каталог на путь Gruntfile:

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

Тем не менее, вариант --base есть только для этого. Смотрите документы: http://gruntjs.com/api/grunt.file

Если вам не нужно делать это из Gruntfile, просто запустите скрипт, который фиксирует process.cwd() а потом execs хрюкать.

Смотрите: 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, чтобы закончить это.

Грунт-кли / бен / хрюкать

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

затем в gruntfile.js вы можете выполнить следующее:

grunt.option('_originDir')

Другие вопросы по тегам