JavaScript "компиляторы"
Недавно я нашел такую классную вещь, как Google Closure Compiler. Существуют ли альтернативы, которые предоставляют возможности для получения преимуществ скомпилированных статически типизированных языков?
Обновление
Речь идет не о реальных компиляторах, а о JavaScript-JavaScript-переводчиках, которые обеспечивают проверку типов и т.д., оптимизацию и, возможно, сжатие.
Ответы
Ответ 1
Из вашего комментария:
Меня интересует проверка типов, проверка интерфейса, проверка частных полей и т.д., все позволяет писать код безопасности, а не только минимизировать.
JavaScript - это динамически типизированный язык, который не имеет встроенной поддержки классов, интерфейсов или модификаторов доступа. Closure Compiler поддерживает различные экстралингвистические функции, такие как интерфейсы и модификаторы доступа, используя информацию, встроенную в комментарии JSDoc. Несколько IDE также предоставляют статический анализ с использованием информации тега JSDoc, например, см. Блог WebStorm и PhpStorm: Новое в 5.0: Компоновщик Google Closure JSDoc аннотации.
В области JavaScript minifiers существует множество опций, таких как YUI Compressor, UglifyJS, dojo shrinksafe, Microsoft Ajax Minifier и JSMIN. Однако ни один из этих инструментов не обеспечивает такой же уровень поддержки JSDoc-анализа, как Closure Compiler.
Связанные вопросы:
Ответ 2
Компилятор Closure (Google) - настоящий компилятор для javascript. Альтернативы включают typescript (Microsoft) и Flow (facebook). Компилятор Closure использует комментарии jsdoc для аннотирования типов. typescript использует другой синтаксис, чем es3/es5, чтобы предоставить аннотации типов, которые компилируются на простой javascript. Поток копий на язык OCaml (который превосходит по типу вывода), чтобы выводить как можно больше информации о типе, но также может потреблять аннотации в синтаксисе комментариев. Компилятор Closure также работает над лучшим типом вывода, но он не готов к производству.
В ответ на @EASI: Компилятор закрытия - это настоящий компилятор, а не только minifier. Он работает:
-
Разбор набора входных файлов .js и набора файлов extern (которые определяют интерфейсы для ecma 3,5,6 и общих объектов браузера, таких как Window и т.д.) в абстрактное синтаксическое дерево (AST).
-
Запуск серии компиляторов переходит через AST для перезаписи, преобразования, устранения мертвого кода и т.д.
-
Извлеките AST обратно в исходный код js. Он либо объединяет файлы вместе с комментариями, разделенными (WHITESPACE_ONLY), переименовывает и уменьшает символы в определениях функций (SIMPLE), либо переименовывает и переписывает все символы в уменьшенную и запутанную форму (ADVANCED).
Здесь список компиляторов проходит, для интересующих. Как вы можете видеть, происходит много:
AliasExternals.java
AliasStrings.java
AmbiguateProperties.java
AnalyzeNameReferences.java
AnalyzePrototypeProperties.java
AstValidator.java
CallGraph.java
ChainCalls.java
CheckConformance.java
CheckDebuggerStatement.java
CheckEventfulObjectDisposal.java
CheckGlobalNames.java
CheckMissingGetCssName.java
CheckRegExp.java
CheckSideEffects.java
ClosureCodeRemoval.java
ClosureOptimizePrimitives.java
CollapseAnonymousFunctions.java
CollapseProperties.java
CollapseVariableDeclarations.java
ConstCheck.java
ConstParamCheck.java
ConvertDeclaredTypesToJSDoc.java
ConvertToDottedProperties.java
ConvertToTypedES6.java
CoverageInstrumentationPass.java
CreateSyntheticBlocks.java
CrossModuleCodeMotion.java
CrossModuleMethodMotion.java
DeclaredGlobalExternsOnWindow.java
DefaultPassConfig.java
Denormalize.java
DisambiguateProperties.java
ErrorPass.java
Es6ToEs3ClassSideInheritance.java
ExpandJqueryAliases.java
ExportTestFunctions.java
ExternExportsPass.java
ExtractPrototypeMemberDeclarations.java
FlowSensitiveInlineVariables.java
FunctionNames.java
FunctionRewriter.java
GatherExternProperties.java
GatherRawExports.java
GenerateExports.java
GlobalNamespace.java
GlobalTypeInfo.java
GroupVariableDeclarations.java
ImplicitNullabilityCheck.java
InferConsts.java
InjectEs6RuntimeLibrary.java
InlineFunctions.java
InlineObjectLiterals.java
InlineProperties.java
InlineVariables.java
InstrumentFunctions.java
JsMessageVisitor.java
MarkNoSideEffectCalls.java
MethodCompilerPass.java
MinimizeExitPoints.java
NameAnalyzer.java
NameAnonymousFunctions.java
NameAnonymousFunctionsMapped.java
NameReferenceGraphConstruction.java
NewTypeInference.java
Normalize.java
ObjectPropertyStringPostprocess.java
ObjectPropertyStringPreprocess.java
OptimizeArgumentsArray.java
OptimizeCalls.java
OptimizeParameters.java
PeepholeOptimizationsPass.java
PhaseOptimizer.java
PrepareAst.java
ProcessCommonJSModules.java
ProcessDefines.java
ProcessTweaks.java
PureFunctionIdentifier.java
RecordFunctionInformation.java
RemoveUnusedClassProperties.java
RemoveUnusedNames.java
RemoveUnusedPrototypeProperties.java
RemoveUnusedVars.java
RenameLabels.java
RenameProperties.java
RenamePrototypes.java
RenameVars.java
ReplaceCssNames.java
ReplaceIdGenerators.java
ReplaceStrings.java
RescopeGlobalSymbols.java
RuntimeTypeCheck.java
SanityCheck.java
ShadowVariables.java
SideEffectsAnalysis.java
SimpleDefinitionFinder.java
StrictModeCheck.java
StripCode.java
SymbolTable.java
TransformAMDToCJSModule.java
TypeInferencePass.java
TypedScopeCreator.java
UnreachableCodeElimination.java
VariableVisibilityAnalysis.java
Ответ 3
Да,
Есть Java, JS, PHP, CSS и HTML " minifiers".
Например, когда вы используете Google GWT Java для программирования, код генерируется как минимизация JS.
Они используют термин компилятор, но это неверно. Компиляторы превращают один человеко-читаемый языковой код в объектный код, который могут читать только интерпретаторы или машины. То, что этот инструмент Google делает, - это оптимизировать ваш код, чтобы он мог быстрее читать интерпретатор. Языки Script должны интерпретировать интерпретаторы. Программы, скомпилированные в машинный язык, выполняются быстрее, чем любой интерпретатор. Но, конечно, любая скорость программы зависит от проекта потока выполнения и опыта развивающейся команды.
New:
Вы пытались сделать свои JavaScript-коды в специализированной среде IDE?
Если вы ищете тип чеканки, вы можете попробовать один из них:
- NuSphere PhpED Professional v7 (лучший)
- phpDesigner 8
- Студия Aptana
- Zend Studio
- DreamWeaver CS6
Теперь они имеют большую поддержку не только для PHP, но и для JavaScript, с помощью кода Auto-Complete, проверки типов, выделения динамического синтаксиса, выделения синтаксиса нескольких языков и анализа ориентированного объекта и автоматического завершения по мере ввода.
Ответ 4
Я думаю, что furiascript.com может быть интересным вариантом.