0

ionic cordova run/build android 工作正常,直到我添加了插件cordova-plugin-advanced-http,错误如下:

发生未处理的异常:D:\Projects\MyApp\myAppTest\www\plugins\cordova-plugin-advanced-http\www\helpers.js: Unexpected reserved word 'interface' (9:6)

   7 |   var validResponseTypes = ['text','arraybuffer', 'blob'];
   8 | 
>  9 |   var interface = {
     |       ^
  10 |     b64EncodeUnicode: b64EncodeUnicode,
  11 |     checkSerializer: checkSerializer,
  12 |     checkSSLCertMode: checkSSLCertMode,

日志文件如下所示:

在 Parser.raise (D:\Projects\MyApp\myAppTest\node_modules@babel\parser\lib\index.js:6325:17) 在 Parser.checkReservedWord (D:\Projects\MyApp\myAppTest\node_modules@babel\parser\ lib\index.js:9556:12) 在 Parser.parseIdentifierName (D:\Projects\MyApp\myAppTest\node_modules@babel\parser\lib\index.js:9525:12) 在 Parser.parseIdentifier (D:\Projects\ MyApp\myAppTest\node_modules@babel\parser\lib\index.js:9499:23) 在 Parser.parseBindingAtom (D:\Projects\MyApp\myAppTest\node_modules@babel\parser\lib\index.js:7931:17) Parser.parseVarId (D:\Projects\MyApp\myAppTest\node_modules@babel\parser\lib\index.js:10501:20) 在 Parser.parseVar (D:\Projects\MyApp\myAppTest\node_modules@babel\parser\ lib\index.js:10477:12) 在 Parser.parseVarStatement (D:\Projects\MyApp\myAppTest\node_modules@babel\parser\lib\index.js:10299:10) 在 Parser。parseStatementContent (D:\Projects\MyApp\myAppTest\node_modules@babel\parser\lib\index.js:9896:21) 在 Parser.parseStatement (D:\Projects\MyApp\myAppTest\node_modules@babel\parser\lib\index .js:9829:17) 在 Parser.parseBlockBody (D:\Projects\MyApp\myAppTest\node_modules@babel\parser\lib\index.js:10405:25) 在 Parser.parseBlockBody (D:\Projects\MyApp\myAppTest \node_modules@babel\parser\lib\index.js:10392:10) 在 Parser.parseBlock (D:\Projects\MyApp\myAppTest\node_modules@babel\parser\lib\index.js:10376:10) 在 Parser。 parseFunctionBody (D:\Projects\MyApp\myAppTest\node_modules@babel\parser\lib\index.js:9424:24) 在 Parser.parseFunctionBodyAndFinish (D:\Projects\MyApp\myAppTest\node_modules@babel\parser\lib\index .js:9394:10) 在 withTopicForbiddingContext (D:\Projects\MyApp\myAppTest\node_modules@babel\parser\lib\index.js:10535:12)

我在指定位置看到了 helper.js 文件,它实际上包含导致问题的单词 interface,因为 interface 是保留字。

我已经尝试了所有的方法,包括删除node_modules并重新安装它们,在运行构建命令之前我已经删除了插件平台文件夹,但这些都不适合我。

一旦我删除了cordova-plugin-advanced-http插件,ionic cordova run/build就会开始正确构建项目

4

1 回答 1

1

问题是这interface是一个未来的保留字:

归根结底,这是一个错误。开发人员没想到这cordova-plugin-advanced-http会通过 babel 以足够严格的设置来应用此限制。

看来您有两个选择:

  • 让开发人员重构该变量名称/使用重构对该包进行自定义编译
  • 查看您的 babel 设置并找到一种设置不太严格的转译设置的方法

对于第二个选项,我通过搜索babel parser reserved word interface而不是尝试搜索与 Ionic 或 Cordova 相关的任何内容,发现了一些有趣的讨论。不过,我不确定您需要更改的确切设置是什么。

不过,通过一些研究,您似乎可以在.babelrc文件中添加一个插件,该插件会自动重命名使用保留字的变量:

它的推荐用法是安装:

npm install --save-dev @babel/plugin-transform-reserved-words

然后添加到您的.babelrc插件部分:

{
  "plugins": ["@babel/plugin-transform-reserved-words"]
}
于 2019-08-25T07:02:30.973 回答