Может ли кто-нибудь добавить фрагмент в базовый процесс компилятора закрытия google, я безуспешно пытаюсь сделать это с помощью кода js. Я использую фрагмент примера с официальной страницы npm. когда я запускаю его, кажется, что-то происходит, но выходной файл не создается.
Мой код:
const ClosureCompiler = require('google-closure-compiler').jsCompiler;
console.info(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.info(stdOut)
//compilation complete
});


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Основываясь на том, что у вас было, я изменил всего несколько вещей:
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.info('hello world!')
скомпилировано.js
console.info("hello world!");
Я только что проверил код cli, и похоже, вы правы. даже в cli они используют «fs».
@ Грэм, как ты это понял? В документации на github для пути указано имя файла и некоторый случайный код для src github.com/google/closure-compiler-npm/blob/master/packages/….
@jjrabbit iirc Я просмотрел внутренности gulp-close-compiler...
Итак, по-видимому, нет способа создать файл без использования библиотеки «fs».
в соответствии с «close-compiler-js.js», когда «запуск» завершен, обратный вызов только выводит результат. https://github.com/google/closure-compiler-npm/blob/master/packages/google-closure-compiler/lib/node/closure-compiler-js.js
что забавно, потому что «closure-compiler-npm» использует «fs» для чтения содержимого файла, но у него нет механизма «записи в файл».
и даже на официальном «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,()=>{});
});
спасибо, это очень помогло. Я думал, что файл можно создать без использования «fs», так как официальный сайт npm показывает, как это сделать с помощью фрагмента cli (npx google-close-compiler --js=my_program.js - -js_output_file=out.js)