问题标签 [transpiler]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
83 浏览

javascript - 使用 ES6 捆绑器进行双重编译?

我当前的工作流程类似于 ES6,但不使用模块加载,是使用 Gulp 任务运行我的 TypeScript 代码tsc,产生ES6输出,然后再次通过 Babel,产生 ES5 输出。我这样做是因为 TypeScript 在直接输出 ES5 时还不支持 async/await。

我现在想开始进行正确的 ES6 模块加载,这意味着我需要一个兼容的捆绑器。

JSPM、Webpack 或其他任何人都支持这种双重编译过程吗?

0 投票
1 回答
628 浏览

javascript - 以编程方式将预设传递给 babel

我正在努力以babel编程方式使用。

这以这个错误结束:

Couldn't find preset "es2015" relative to directory "/Users/myusername"

不过,我确实安装了babel-preset-es2015as local 依赖项。如何解决这个问题?

我不想保留babel-preset-es2015babel-core作为项目的本地依赖项。

为什么会出现这个错误?

0 投票
1 回答
701 浏览

javascript - 无法使用节点运行 babel 转译文件

这是我刚刚修改为使用 es6 import 以测试转译过程 app.js 的非常基本的 express 样板代码:

在 .babelrc

生成的转译代码 app-compiled.js:

现在尝试运行 /usr/local/bin/node app-compiled.js :

或 /usr/local/bin/node app.js

此外,当我不使用 polyfill 时,如果没有封装功能,则会出现相同的“导入”错误。

如果这有帮助,package.json 中的依赖项:

在我的 webstorm ide 中,我使用以下参数设置了 babel:

程序:node_modules/babel-cli/bin/babel.js

参数: --source-maps --out-file $FileNameWithoutExtension$-compiled.js $FilePath$

要刷新的输出路径:$FileNameWithoutExtension$-compiled.js:$FileNameWithoutExtension$-compiled.js.map

为什么 node 不能运行 babel 转译的代码?

0 投票
1 回答
417 浏览

typescript - Typescript 什么时候会包含像 String.includes 或 Number.isInteger 这样的 ES6 方法?

typescriptlang.org 主页上列出的 Typescript 的主要优点之一是能够编写“最先进的 Javascript”,可以编译到任何 ES3 或更新的目标。我可以在 Typescript 中使用许多 ES6 函数,包括letand const、箭头函数、解构、模板文字等。

我试图理解为什么某些 ES6 功能在 Typescript 中不可用。是否有路线图指定何时将某些 ES6 功能添加到 Typescript,或者解释为什么它们可能不会添加?

例如,尝试在 Typescript 中使用 String.includes 会导致错误,并且生成的 javascript 不会被转译,并且在不支持该方法的浏览器中会失败。

Opera 中的转译版本(在 tsconfig.json 中将目标设置为 ES5)失败:

我可以添加我自己的 polyfill,它可以工作:

在 Typescript 中实现的 ES6 特性的几个示例

模板文字

转译为

解构

转译为

箭头函数

转译为

0 投票
1 回答
1198 浏览

haxe - 使用 haxe 作为 c++ 和 JavaScript 之间的转译器

首先,我为长篇大论道歉。我一直在问一些关于 haxe 及其作为解决我所面临问题的工具的适用性的问题。我对 haxe 的了解非常有限,但我所知道的是我在项目中对 haxe 的理想角色不是正常使用 haxe。所以我试图避免浪费时间我没有学习这门语言(尽管它看起来非常有趣和强大)只是发现它不适合目的。因此,我希望从经验丰富的兽医那里得到一些建议,看看它是否适合目的。我真的希望它是。

这是我想要实现的目标:

我在游戏行业工作,我需要用 C++ 和 JS 创建一个游戏。用于嵌入式系统的 C++ 和用于在线和移动设备的 JS。我在 C++ 和 JS 方面都非常有经验。

我开发的游戏我只想写一次。现在我可以使用 emscripten 之类的东西从 C++ 转到 JS,但这会导致编译的 JS 代码无法使用 chrome 开发工具轻松调试。我确信我会在编译的 JS 中遇到边缘情况错误,我不能轻易地回到原始 C++。另外,一些游戏平台需要公平实验室查看源代码,这对于编译的 JS 来说是个问题。

我真正需要的是一个源到源编译器,它可以生成本机和人类可读的 C++ 和 JS 代码,然后我可以在必要时使用并修改其本机形式,因此是 haxe。我查看了 haxe 为 C++ 和 JS 生成的代码。JS 看起来非常容易理解和使用。C++ 不是那么多,但仍然可以接受。我什至可以阻止 haxe 编译和链接我不需要的 C++。我只想要源代码。

到现在为止还挺好。

现在我有一个使用 oxygine 2d 引擎的 c++ 游戏框架。它能够显示精灵等以及我为消息总线和有限状态机创建的框架(也加载更多有用的类)。我在 JS 中也有一个类似的框架,它使用 Pixijs 作为其 2d 引擎,并拥有自己的消息总线等,就像 C++ 引擎一样。

现在我想要做的是用 haxe 编写模块,当我转译为 C++ 和 JS 时,代码可以作为框架的一部分包含在内,并与它受人尊敬的语言引擎一起工作。我在 haxe 中创建的每个对象都将非常封装,只需要订阅消息总线、处理消息并发送回消息。它可能还需要知道如何使用其引擎状态机。所以我不知道这是否甚至可以使用 haxe,因为消息总线(以及其他对象)不会用 haxe 编写,而是在它被转译并在其本机项目中构建后提供给模块。也许我可以编写自己的 haxe 库,它知道我的两个游戏引擎的语法,并且可以根据其目标语言进行转换?不确定这是可能的。

感谢您花时间阅读,以及您可以提供的任何建议。

0 投票
1 回答
182 浏览

javascript - babel's playground 意外的前导下划线

看看下面的类“数据”方法。方法主体包含一个名为“result”的变量,并在 else if 子句中重新分配给一个数组。

出于某种原因,babel 使用前导下划线转换上述变量。

ES6 类:

转译的方法:

0 投票
3 回答
13492 浏览

javascript - 我真的需要 Babel 或其他编译器来将 ES6 与 React 一起使用吗?

我真的需要 Babel 或其他编译器在 React 中使用 ES6 吗?

我在看图表https://kangax.github.io/compat-table/es6/

似乎我当前的浏览器 Chrome(最新稳定版本)几乎支持所有 ES6 功能......

如果我可以在没有 Babel 的情况下使用 ES6,我应该怎么做?

0 投票
2 回答
1118 浏览

ecmascript-6 - Babel 转译 es7 类装饰器 意外的令牌错误

我正在开发一个使用 es6 和 es7 代码的 Aurelia 应用程序,我正在尝试使用 babel 转换代码。我的 packages.json 文件中有以下内容

我安装了以下软件包:

我试图转换 es7 代码,如下所示:

我在类装饰器@noView 周围收到错误语法错误意外标记。我检查了第 1 阶段预设,我知道类装饰器已被删除http://babeljs.io/docs/plugins/preset-stage-1/

因此,我在遗留装饰器中添加了'babel-plugin-transform-decorators-legacy 在这里找到' https://github.com/loganfsmyth/babel-plugin-transform-decorators-legacy

所以我的 .babelrc (位于我的项目的根目录)看起来像这样:

但是我仍然找不到快乐!问题是

  1. 当我在 npm 中执行 babel 脚本时,如何确认我的 babelrc 文件正在被拾取?我尝试添加 --extends babelrc 以试图强制它,但我不确定这是否正确。
  2. 我也尝试在 babel 命令中指定一个插件,如下所示:

    “babel --plugins babel-plugin-transform-decorators-legacy --stage 1 -d AureliaWeb/ ../Test/Aurelia/”

仍然没有运气,任何帮助将不胜感激。

更新 1

在弄乱了 .bablerc 文件之后,我想我可能把它放在了错误的位置。我的结构如下(它是一个 mvc 应用程序)。

  • Test.UnitTest (Project) <-- 我正在从这里运行 babel 脚本
    • AureliaWeb <-- 结束 trandpiled 位置
  • 测试(项目)
    • Aurelia <-- 包含实际的 Aurelia 代码

将 .bablerc 文件移动到 Test > Aurelia 后,我开始收到以下错误

在“C:\Code\src\Test\Aurelia\.babelrc”中指定的未知插件“transform-decorators-legacy”为 0,尝试相对于“C:\Code\src\Test\Aurelia”进行解析

我已经尝试在两个项目中安装用于 transform-decorators-legacy 的包,看看它是否有任何区别

更新 2

我现在可以确认这实际上是问题所在,看来 babel 文件需要放在源文件夹中,而不是目标或执行 babel 的位置。

0 投票
1 回答
1458 浏览

javascript - 将 Fortran 转换为 Javascript

我对这个问题失去了理智。我写了一个解释器,然后写了一个转译器来将 Fortran 转换为 Javascript。但是每次我都被引用传递变量的问题所困扰。

正如您在 Fortran 中所知道的,按引用传递或按值传递之间没有语法不同,看起来都一样。然而,在 Javascript 中,如果变量在 Object 中传递,则只能通过引用传递。

Fortran 示例代码:

我做了很多研究,但直到现在,我还没有找到任何有用的结果。

我想知道,是否有任何库可以完成这项工作(客户端/NodeJS)。我无法想象,直到现在,之前没有人试图失去这个问题。

0 投票
1 回答
200 浏览

javascript - 使用 es2015 语法和 babel 转译到 es5 导入模块时出错

我在将 es2015 代码转换为 ES5 时遇到问题。模块导入会出现问题:

被转译为:

导致错误的原因:

但是如果我用

var express = require('express');

一切正常。

我仍然想使用 es2015 语法,是否有我应该在 bable 中安装的设置或插件让它正常工作?