可以使用非选项参数运行的Grunt任务

我正在尝试写一个与unix mv命令相同的api任务。

我想能够使用grunt mv path/to/old/file path/to/new/file来调用它。

我希望能够通过访问节点的process.argv来做到这一点,但是当我使用这个API调用任务时,grunt试图把path/to/old/file当作另一个我试图运行的任务,抛出Warning: Task "path/to/old/file" not found. Use --force to continue.的错误Warning: Task "path/to/old/file" not found. Use --force to continue. Warning: Task "path/to/old/file" not found. Use --force to continue. 并退出。

有没有办法做我想做的事情?

我想你正在寻找 – --options参数http://gruntjs.com/frequently-asked-questions#options

所以你可以用grunt mv --from=path/to/old/file --to=path/to/new/file来调用它 – grunt mv --from=path/to/old/file --to=path/to/new/file

你可以通过用“:”分隔它们来传递参数给你的任务,例如

 grunt mv:path/to/old/file:path/to/new/file 

绝对不是理想的。 在你的任务里面,你可以用this.args来获得它们的值。 有关示例,请参阅https://github.com/Grunt-generate/grunt-generate/blob/master/tasks/generate.js 。 这里是API文档: http : //gruntjs.com/api/inside-tasks

您应该使用de文档中的process.argv :

包含命令行参数的数组。 第一个元素是'node',第二个元素是JavaScript文件的名字。 下一个元素将是任何额外的命令行参数。

在你的情况下:

文件: mv.js

 console.log(process.argv[2]); console.log(process.argv[3]); 

那么如果你运行: node mv.js path / to / old / file path / to / new / file

这将输出:

 path/to/old/file path/to/new/file