google-closure-compiler基本流程示例

google-closure-compiler basic process example

任何人都可以在 google-closure-compiler 基本过程中添加一个片段,我正在通过 js 代码尝试失败。 我正在使用官方 npm 页面中的示例片段。 当我 运行 它时,似乎发生了一些事情,但没有创建输出文件。

我的代码:

const ClosureCompiler = require('google-closure-compiler').jsCompiler;

console.log(ClosureCompiler.CONTRIB_PATH); // absolute path to the contrib folder which contains externs

const closureCompiler = new ClosureCompiler({
  compilation_level: 'ADVANCED'
});

const compilerProcess = closureCompiler.run([{
 path: './',
 src: 'a.js',
 sourceMap: null // optional input source map
}], (exitCode, stdOut, stdErr) => {
    console.log(stdOut)
  //compilation complete
});

在你已有的基础上,我只做了一些改变:

1) src 属性不是路径,它是文件:在本例中使用 fs.readFileSync.

读取文件

2) 输出在回调中返回:您需要将其写入磁盘。

文件:

index.js

const ClosureCompiler = require('google-closure-compiler').jsCompiler;
const {writeFile, readFileSync} = require('fs');

const closureCompiler = new ClosureCompiler({
  compilation_level: 'ADVANCED'
});
let src = readFileSync('a.js', 'UTF-8');
const compilerProcess = closureCompiler.run([{
 path: './',
 src: src,
 sourceMap: null
}], (exitCode, stdOut, stdErr) => {
  stdOut.map((fileResults) => {
    writeFile(fileResults.path, fileResults.src, () => {});
  });
});

a.js

console.log('hello world!')

compiled.js

console.log("hello world!");

好的,很显然,如果不使用 'fs' 库就无法创建文件。

根据"closure-compiler-js.js",当"run"完成时,回调仅记录结果。 https://github.com/google/closure-compiler-npm/blob/master/packages/google-closure-compiler/lib/node/closure-compiler-js.js

这很有趣,因为 'closure-compiler-npm' 确实使用 'fs' 来读取文件内容,但它没有任何 'write-file' 机制。

甚至在官方 'cli.js' 上也使用了 'fs' 库: https://github.com/google/closure-compiler-npm/blob/master/packages/google-closure-compiler/cli.js

const ClosureCompiler = require('google-closure-compiler').jsCompiler;
const { writeFile } = require('fs');

const closureCompiler = new ClosureCompiler({
    js:['a.js','a1.js'],
    js_output_file: 'out.js'
});

const compilerProcess = closureCompiler.run([{
    path: './',
}], (exitCode, stdOut, stdErr) => {
     writeFile(stdOut[0].path, stdOut[0].src,()=>{});
});