我知道这是一个常见的问题,但我所尝试的所有答案都不起作用。 奇怪的是,一个朋友在他的Windows上尝试了这个脚本,实际上得到了当前目录(包含gruntfile.js的目录)。 我试图看到的差异,但我也没有find任何。
module.exports = function(grunt) { grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), shell: { test: { command: 'dir' } } }); grunt.loadNpmTasks('grunt-shell'); };
这是我得到的:
D:\Websites\AUB>grunt shell:test Running "shell:test" (shell) task Volume in drive D is Data Volume Serial Number is 6E7B-40AB Directory of D:\Websites 04/22/2015 04:53 PM <DIR> . 04/22/2015 04:53 PM <DIR> .. 04/20/2015 11:04 AM <DIR> .sublime 03/30/2015 12:52 PM <DIR> .template 04/24/2015 07:55 AM <DIR> AUB
我试图使用这个post的技巧,但它没有工作(我留在网站目录):
command: 'set WORKING_DIRECTORY=%cd% && dir'
我也试图find一些有用的“获取目录包含当前执行的批处理脚本” ,但我不明白如何使用它,因为我得到的错误:
command: 'cd %~dp0 && dir'
它返回:
D:\Websites\AUB>grunt shell:test Running "shell:test" (shell) task The system cannot find the path specified. Warning: Command failed: C:\WINDOWS\system32\cmd.exe /s /c "cd %~dp0 && dir" The system cannot find the path specified. Use --force to continue. Aborted due to warnings.
作为一个侧面说明,我从Grunt(clean,copy,rename,uglify等)直接使用的任何其他软件包工作正常,grunt-exec具有相同的行为。
这听起来很奇怪,因为通常所有的插件都相对于你的Gruntfile工作:
http://gruntjs.com/api/grunt.file
注意:除非使用grunt.file.setBase或–base命令行选项更改当前工作目录,否则所有文件路径都与Gruntfile相关。
您可以手动检索当前的工作:
var cwd process.cwd() // Or to get a file inside the cwd var pathOfGruntfile = require('path').resolve('./Gruntfile.js');
并在你的Gruntfile中使用它:
module.exports = function(grunt) { grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), cwd: process.cwd(), shell: { test: { command: 'cd "<%= cwd %>";dir' } } }); grunt.loadNpmTasks('grunt-shell'); };