Q:

Does closure compiler support CommonJS-style require with js file?

I'm trying to use google closure compiler.
I followed the example in google-closure-compiler-js with processCommonJsModules flag:
gulp.task('script', function () {
  return gulp.src('./src/app/index.js')
    .pipe(compiler({
      compilationLevel: 'SIMPLE',
      warningLevel: 'VERBOSE',
      jsOutputFile: 'output.min.js',  // outputs single file
      createSourceMap: true,
      processCommonJsModules: true
    }));
    .pipe(gulp.dest('./dist'));
});

and, index.js contains require('./app.js').
This doesn't work and the error message is very unhelpful:
[17:59:04] src\app\index.js:2 (JSC_COMMONJS_MODULE_LOAD_ERROR)
[17:59:04] Failed to load module "./app.js"
[17:59:04] require('./app.js');

That's all. It just says that compilation failed without mentioning the reason.
I've read the documentation about modules in closure compiler repository (https://github.com/google/closure-compiler/wiki/JS-Modules), and I found that a description: Paths must be absolute or relative and omit the file extension.
I've tried next four ways but none of them works:

requre('./app.js')
requre('./app')
requre('/absolute/path/to/app.js')
requre('/absolute/path/to/app')

Maybe closure compiler does not support requiring js file but module?
Or, am I missing something?

A:

Closure-compiler won't discover source files - you have to pass in all possible module sources. Also, you need to use the dependency management options so that the compiler properly orders your source files.
I would expect your gulp script to look something similar to:
gulp.task('script', function () {
  // modify this to get all of your source files
  return gulp.src('./src/app/**') 
    .pipe(compiler({
      compilationLevel: 'SIMPLE',
      warningLevel: 'VERBOSE',
      jsOutputFile: 'output.min.js',  // outputs single file
      createSourceMap: true,
      processCommonJsModules: true,
      dependency_mode: 'LOOSE',
      entry_point: './src/app/index'
    }));
    .pipe(gulp.dest('./dist'));
});

