Gulp 在 'cordova build xxx' 之前挂钩

Gulp hook before 'cordova build xxx'

我的 gulpfile.js 有一些任务,我想在执行 cordova build

时执行一个任务

我在 hooks 文件夹中创建了一个 before_build 文件夹,其中包含一个简单的 console.log("a")in js 文件。

但是当我 运行 例如 cordova build android 它说 'console' is undefined 时,我必须做一些其他事情才能 运行 Javascript?我找不到更多信息。

谢谢!

编辑:

我在 .js 文件的顶部添加了 #!/usr/bin/env node 并且 console.log 有效,但现在我想做 gulp myTask 并向我抛出 gulp is not defined

我终于可以 运行 命令了,这里是我的 .js 文件 hooks/before_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);

您可以 运行 通过将此代码粘贴到文件 before_build/010_compile_css.js:

而无需离开 Node
#!/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');

我发现我必须使用 __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" />