在 javascript 中我应该在哪些情况下使用转译器?
In which situations should I use a transpiler in javascript?
根据维基百科:
A source-to-source compiler, transcompiler or transpiler is a type of compiler that takes the source code of a program written in one programming language as its input and produces the equivalent source code in another programming language.
但是在哪些情况下软件开发团队应该在构建工作流程中使用转译器?
提前致谢。
当您想使用尚未在所有浏览器中支持的功能时。即:承诺、解构、生成器等
使用 JavaScript 构建应用程序时,您需要两次转译代码的主要原因有两个。
1。您使用的语言不是 JavaScript 但要编译成 Javascript
CoffeeScript or TypeScript 就是这种情况。这些不能在任何平台上直接执行,因此您的代码必须先编译为纯 JavaScript.
至于为什么要使用这些语言。主要是因为它们提供了比 JavaScript 更多的功能,例如类型系统、大量语法糖等
2。您使用的是普通 JavaScript,但使用的是目标平台上不可用的现代语言功能。
例如,假设您想使用 ES6 功能编写代码,但您希望您的客户能够在 IE11 上使用该应用程序。在那种情况下,您将需要一个转译器以行为相同的方式将您的代码转换为纯 ES5。
第二点也与 polyfill 密切相关。但这些不在问题范围内。
回答你的问题:取决于你想做什么,取决于你的团队,我们的项目,你的老板,你的愿景。
对我来说,问题不是“我为什么要使用转译器”,而是“关于我的技能和团队技能,我想使用的最佳技术是什么”。例如,如果你有一个 Ruby 程序,使用 CoffeeScript 更容易(我不太了解 Ruby 世界),如果你有一个巨大的 Java 背景,你应该考虑 GWT or Vaadin…
Javascript 是网络“通用语”。如果您想应用 Java 脚本中出现的概念以外的其他概念,或者您想使用另一种语法或范例,您应该使用转换器。
例如:Cappuccino with Objective-J, Google with GWT、CoffeeScript(javascript 的 Rubish 语法)、ES7 类型的 Typescript、Eml(具有 Haskell 语法的函数式编程)、转译的 Babel ES7 到 ES5 等等。
还有隐藏的转译器。 Vue.js,例如 React 或 Flow(Angular 4 使用不隐藏的转译器)。
用一个好的 JIT 编译器编写一个好的解释器比编写一个设计不佳的语言转译器到 Java脚本要困难得多,而且要花费更多的时间,而脚本的性能总是比你的好。 Vala 就是这种情况,它在 C 中进行编译并让 GCC 和 gobject 做最好的工作。
此外,更重要的是会有标准问题。如果您是 Forth 爱好者,您可以在 Forth 中编写您的应用程序,然后将其转换为 ES3 以与地球上所有(普通)浏览器兼容,而无需安装不需要的插件。
根据维基百科:
A source-to-source compiler, transcompiler or transpiler is a type of compiler that takes the source code of a program written in one programming language as its input and produces the equivalent source code in another programming language.
但是在哪些情况下软件开发团队应该在构建工作流程中使用转译器?
提前致谢。
当您想使用尚未在所有浏览器中支持的功能时。即:承诺、解构、生成器等
使用 JavaScript 构建应用程序时,您需要两次转译代码的主要原因有两个。
1。您使用的语言不是 JavaScript 但要编译成 Javascript
CoffeeScript or TypeScript 就是这种情况。这些不能在任何平台上直接执行,因此您的代码必须先编译为纯 JavaScript.
至于为什么要使用这些语言。主要是因为它们提供了比 JavaScript 更多的功能,例如类型系统、大量语法糖等
2。您使用的是普通 JavaScript,但使用的是目标平台上不可用的现代语言功能。
例如,假设您想使用 ES6 功能编写代码,但您希望您的客户能够在 IE11 上使用该应用程序。在那种情况下,您将需要一个转译器以行为相同的方式将您的代码转换为纯 ES5。
第二点也与 polyfill 密切相关。但这些不在问题范围内。
回答你的问题:取决于你想做什么,取决于你的团队,我们的项目,你的老板,你的愿景。
对我来说,问题不是“我为什么要使用转译器”,而是“关于我的技能和团队技能,我想使用的最佳技术是什么”。例如,如果你有一个 Ruby 程序,使用 CoffeeScript 更容易(我不太了解 Ruby 世界),如果你有一个巨大的 Java 背景,你应该考虑 GWT or Vaadin…
Javascript 是网络“通用语”。如果您想应用 Java 脚本中出现的概念以外的其他概念,或者您想使用另一种语法或范例,您应该使用转换器。
例如:Cappuccino with Objective-J, Google with GWT、CoffeeScript(javascript 的 Rubish 语法)、ES7 类型的 Typescript、Eml(具有 Haskell 语法的函数式编程)、转译的 Babel ES7 到 ES5 等等。
还有隐藏的转译器。 Vue.js,例如 React 或 Flow(Angular 4 使用不隐藏的转译器)。
用一个好的 JIT 编译器编写一个好的解释器比编写一个设计不佳的语言转译器到 Java脚本要困难得多,而且要花费更多的时间,而脚本的性能总是比你的好。 Vala 就是这种情况,它在 C 中进行编译并让 GCC 和 gobject 做最好的工作。
此外,更重要的是会有标准问题。如果您是 Forth 爱好者,您可以在 Forth 中编写您的应用程序,然后将其转换为 ES3 以与地球上所有(普通)浏览器兼容,而无需安装不需要的插件。