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')