我正在尝试根据我Gruntfile.js
内部的功能在我的应用目录中移动一些图标。可以这样做吗?我已经尝试了以下(进入开发或暂存文件夹并将所有文件复制到上一个目录),但是不能让它工作。提前谢谢。
grunt.registerTask('setAppIcon', 'Task that sets the app icon', function(environment) {
if (environment.toLowerCase() == "development") {
grunt.task.run(['exec:command:cd app/lib/extras/res/icon/ios/dev && cp -a . ../']);
} else if (environment.toLowerCase() == "staging") {
grunt.task.run(['exec:command:cd app/lib/extras/res/icon/ios/staging && cp -a . ../']);
}
});
答案 0 :(得分:1)
是的,可以实现您的要求,但是,当您在函数内调用grunt.task.run命令(即自定义任务)时,您需要提供对要运行的任务的引用。
如果你定义一个单独的Target,(让他们打电话给他们copy_dev
和copy_staging
- 如下例所示),对于grunt-exec任务中的每个cd ... && cp ...
命令,它应该可以成功运行。
<强> Gruntfile.js 强>
以下Gruntfile.js
要点展示了如何实现这一目标:
module.exports = function (grunt) {
grunt.loadNpmTasks('grunt-exec');
grunt.initConfig({
exec: {
copy_dev: {
cmd: 'cd app/lib/extras/res/icon/ios/dev && cp -a . ../'
},
copy_staging: {
cmd: 'cd app/lib/extras/res/icon/ios/staging && cp -a . ../'
}
}
});
grunt.registerTask('setAppIcon', 'Task that sets the app icon', function() {
var environment = process.env.NODE_ENV;
// Exit early if NODE_ENV variable has not been set.
if (!environment) {
grunt.log.writeln(
'\"setAppIcon\"" task failed - NODE_ENV has not been set.'['yellow']
)
return
}
if (environment.toLowerCase() == "development") {
grunt.task.run('exec:copy_dev');
grunt.log.writeln('>> Copying icons from \"dev\"...')
} else if (environment.toLowerCase() == "staging") {
grunt.task.run('exec:copy_staging');
grunt.log.writeln('>> Copying icons from \"staging\"...')
}
});
grunt.registerTask('default', [ 'setAppIcon' ]);
};
附加说明
在名为setAppIcon
的自定义任务/函数内部,我们使用内置process.env
通过CLI运行$ grunt
(使用上面显示的要点),并假设您的process.env.NODE_ENV
变量尚未设置,或者可能因运行而未设置$ unset NODE_ENV
,您会看到以下消息:
"setAppIcon"" task failed - NODE_ENV has not been set.
但是,如果process.env.NODE_ENV
变量已设置为development
或staging
,则文件将按预期复制。
例如,通过CLI运行以下任一项将成功运行:
$ export NODE_ENV=development && grunt
或
$ export NODE_ENV=staging && grunt
您还会看到以下任一消息都记录到控制台:
>> Copying icons from "dev"...
或
>> Copying icons from "staging"...
将process.env.NODE_ENV
设置为development
或staging
,然后通过CLI运行$ grunt
后,将根据设置的环境复制文件。