Cordova 在'之前吞下钩子;科尔多瓦建筑xxx';
我有我的Cordova 在'之前吞下钩子;科尔多瓦建筑xxx';,cordova,gulp,cordova-cli,Cordova,Gulp,Cordova Cli,我有我的gulpfile.js和一些任务,我想在执行cordova build #!/usr/bin/env node var sys = require('sys') var exec = require('child_process').exec; function puts(error, stdout, stderr) { sys.puts(stdout) } exec("gulp", puts); 我在hooks文件夹中创建了一个before\u build文件夹,在js文件中有一个简
gulpfile.js
和一些任务,我想在执行cordova build
#!/usr/bin/env node
var sys = require('sys')
var exec = require('child_process').exec;
function puts(error, stdout, stderr) { sys.puts(stdout) }
exec("gulp", puts);
我在hooks
文件夹中创建了一个before\u build
文件夹,在js文件中有一个简单的console.log(“a”)
但是当我运行例如cordova build android
时,它说“console”是未定义的
,我必须做些别的事情来运行Javascript?我找不到更多信息
谢谢
编辑:
我添加了
#/usr/bin/env节点位于我的.js文件顶部,控制台.log运行正常,但现在我想做gulpmytask
,并向我抛出gulp未定义
最后我可以运行命令,这是我的.js文件在hooks/before\u build
#!/usr/bin/env node
var sys = require('sys')
var exec = require('child_process').exec;
function puts(error, stdout, stderr) { sys.puts(stdout) }
exec("gulp", puts);
您可以在不离开节点的情况下运行它,方法是在\u build/010\u compile\u css.js之前将此代码粘贴到文件:
#!/usr/bin/env node
var gulp = require('gulp');
var path = require('path');
var rootdir = process.argv[2];
var gulpfile = path.join(rootdir, 'gulpfile.js');
process.stdout.write('Compiling SCSS');
require(gulpfile);
//interaction
gulp.start('scss');
我发现我必须使用\uu dirname
来要求使用“gulpfile.js”文件
#!/usr/bin/env node
module.exports = function(context) {
var Q = context.requireCordovaModule('q');
var deferral = new Q.defer();
var path = require('path'),
gulp = require('gulp'),
gulpfile = path.join(__dirname, 'gulpfile');
require(gulpfile);
gulp.start('myTask').once('task_stop', function(){
console.log('myTask done');
deferral.resolve();
});
return deferral.promise;
}
注意:'gulpfile.js'和'hook.js'在同一个目录中。您可以在Cordova的config.xml文件中设置钩子js文件的自定义路径:
<hook type="before_build" src="app/hook.js" />
gulp.start()是否会按照Cordova钩子的要求同步完成?我发现gulp.start()已被弃用并计划删除:。。虽然那是一年前的事了!最新的Cordova不再推荐使用hooks文件夹,它很快就会被弃用。请按照@David Douglas的建议使用JS方法,这不是最好的解决方案,因为您正在从节点创建一个新进程来运行另一个节点脚本(gulp)。@AlexStack so,您认为这是一个更好的解决方案吗?还要注意,Cordova钩子脚本是从根项目目录执行的,因此如果您的gulpfile.js在子目录中运行,您可能会遇到文件路径问题。