Я использую this fork задачи grunt-clos-compiler для создания нескольких файлов с компилятором закрытия.grunt-clos-compiler modules throwing IllegalArgumentException
Я следующие флаги компилятора установить:
--module_output_path_prefix .\ --js lib\test\mod-c.js --module test_mod__c:1 --js lib\test\mod-d.js --module test_mod__d:1 --js lib\test\mod-b.js --module test_mod__b:1:test_mod__c,test_mod__d --js lib\test\mod-a.js --module test_mod__a:1:test_mod__b,test_mod__d --compilation_level "ADVANCED_OPTIMIZATIONS" --language_in "ECMASCRIPT5_STRICT"
Всякий раз, когда я запускаю это, я получаю следующее сообщение об ошибке:
java.lang.IllegalArgumentException: expected one element but was: <test_mod__c, test_mod__d>
at com.google.common.collect.Iterators.getOnlyElement(Iterators.java:317)
at com.google.common.collect.Iterables.getOnlyElement(Iterables.java:289)
at com.google.javascript.jscomp.JSModuleGraph.getRootModule(JSModuleGraph.java:150)
at com.google.javascript.jscomp.AnalyzePrototypeProperties.<init>(AnalyzePrototypeProperties.java:122)
at com.google.javascript.jscomp.CrossModuleMethodMotion.<init>(CrossModuleMethodMotion.java:79)
at com.google.javascript.jscomp.DefaultPassConfig$97.create(DefaultPassConfig.java:2170)
at com.google.javascript.jscomp.PhaseOptimizer$NamedPass.process(PhaseOptimizer.java:285)
at com.google.javascript.jscomp.PhaseOptimizer$Loop.process(PhaseOptimizer.java:458)
at com.google.javascript.jscomp.PhaseOptimizer.process(PhaseOptimizer.java:217)
at com.google.javascript.jscomp.Compiler.optimize(Compiler.java:1901)
at com.google.javascript.jscomp.Compiler.compileInternal(Compiler.java:681)
at com.google.javascript.jscomp.Compiler.access$000(Compiler.java:89)
at com.google.javascript.jscomp.Compiler$2.call(Compiler.java:632)
at com.google.javascript.jscomp.Compiler$2.call(Compiler.java:629)
at com.google.javascript.jscomp.CompilerExecutor$2.call(CompilerExecutor.java:93)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Согласно нескольким источникам, я могу найти, это часто является причиной по недопустимому дереву зависимостей, но я не понимаю, почему это неправильно.
Я предполагаю, что это может быть потому, что у вас есть 2 базовых модули? Вы можете попробовать создать общий базовый модуль для 'test_mod__c' и' test_mod__d'. Такому базовому модулю разрешено иметь нулевые файлы для поддержки именно этого случая. –
Извините, что вы подразумеваете под базовыми модулями? Насколько я понимаю, 'a' зависит от' b' и 'd', а' b' зависит от 'c' и' d'. Точкой входа для кода является 'a'. –
Это слишком длинный комментарий. Я добавлю ответ. –