【问题标题】:Babel JS babel-preset-php errorBabel JS babel-preset-php 错误
【发布时间】:2017-12-20 14:23:09
【问题描述】:

我只是在尝试新的 Babel 的 babel-preset-php (https://gitlab.com/kornelski/babel-preset-php#php7-to-es7-syntax-translator)。我在 README 文件中做了所有事情,我用npm i -S babel-preset-php 安装了预设。然后我创建了一个.babelrc 文件,内容如下;

{
    "presets": ["php"]
}

使用npm i -g babel-cli 安装了cli。然后我创建了一个只包含一个简单函数的简单 PHP 文件:

<?php

function addCalculator($x, $y)
{
    return $x + $y;
}

并尝试使用babel number.php -o file.js 运行转译器。但是我在执行脚本时遇到错误:

/home/claudio/Documents/Development/babel/node_modules/babel-preset-php/lib/plugins.js:6
        Identifier(p) {
                  ^
SyntaxError: Unexpected token ( (While processing preset: "/home/claudio/Documents/Development/babel/node_modules/babel-preset-php/index.js")
at Module._compile (module.js:439:25)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object.<anonymous> (/home/claudio/Documents/Development/babel/node_modules/babel-preset-php/index.js:1:79)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)

我对 nodejs 和 npm 没有那么熟练,所以知道会发生什么吗?

【问题讨论】:

  • 你在使用 webpack 吗?
  • 我对 Node 工作流程没有那么丰富的经验。我只是按照自述文件中的说明进行操作。所以我想我没有使用 webpack。
  • 你用的是什么版本的node和babel?您可以通过运行node --versionbabel --version 来查找。

标签: javascript php node.js babeljs


【解决方案1】:

编辑:好的,我刚刚意识到您在类之外调用 公共函数。那不是正确的PHP。您不能在类之外将函数定义为公共的。你的 PHP 代码是错误的。

【讨论】:

  • babel Number.php -o --presets=php file.js 返回file.js does not exist。它不应该被创建吗?
  • 你必须写:babel Number.php -o file.js --presets=php。目前,您将第二个选项放在第一个选项的键和值之间。检查我编辑的答案。
  • 我更正了 PHP 代码,并像你说的那样调用了,但仍然得到相同的 Unexpected token 错误。
  • 而且错误信息中还有Identifier(p)?还是消息变了?据我了解,Identifier(p) 指的是 public
【解决方案2】:

错误甚至在触及您的 PHP 代码之前就已发出。实际上,babel-preset-php 本身的 this particular line 出错了:

return {
    visitor: {
        Identifier(p) { // This is the invalid line
            if (p.node.name != 'Exception' || p.scope.hasBinding("Exception")) {
                return;
            }

此预设使用 ECMAScript 2015 中添加的速记对象初始值设定项。这里可能发生的情况是您的本地 Javascript 环境不支持 ES2015 语法。

我建议将nodebabel 更新到最新版本并重试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    • 2018-09-06
    • 2019-03-17
    • 2018-10-26
    • 1970-01-01
    • 2016-09-12
    • 2018-04-27
    相关资源
    最近更新 更多