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在子目录中运行,您可能会遇到文件路径问题。