闭包编译器是否支持使用js文件的CommonJS样式?

时间:2016-09-01 09:10:47

标签: module google-closure-compiler commonjs

我试图使用谷歌闭包编译器。

我在google-closure-compiler-js中使用processCommonJsModules标志跟踪了示例:

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'));
});

和,index.js包含require('./app.js')

这不起作用,错误信息非常无益:

[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');

这就是全部。它只是说编译失败而没有提到原因。

我已经阅读了关闭编译器存储库(https://github.com/google/closure-compiler/wiki/JS-Modules)中有关模块的文档,我发现了一个描述:Paths must be absolute or relative and omit the file extension

我已尝试过以下四种方式但其中没有一种方法可行:

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

也许闭包编译器不支持需要js文件而是模块?

或者,我错过了什么?

1 个答案:

答案 0 :(得分:2)

Closure-compiler不会发现源文件 - 您必须传入所有可能的模块源。此外,您需要使用dependency management options,以便编译器正确地对源文件进行排序。

我希望你的gulp脚本看起来类似于:

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'));
});