SyntaxError: Unexpected token M (当从 Visual Studio 2015 运行 cordova 项目时)

Posted

技术标签:

【中文标题】SyntaxError: Unexpected token M (当从 Visual Studio 2015 运行 cordova 项目时)【英文标题】:SyntaxError: Unexpected token M (when running cordova project from Visual Studio 2015) 【发布时间】:2015-10-20 08:23:17 【问题描述】:

当我尝试使用远程设备使用 Visual Studio 2015 运行我的 Cordova 应用程序时,我收到错误“SyntaxError: Unexpected token M”。 Visual Studio 安装在 Windows 10 上,它是我 Mac 上的 Parallels VM。我已按照步骤在我的 Mac 上设置 remotebuild。从 Visual Studio - 工具 - 选项,我可以成功连接到我的 mac 上正在运行的 remotebuild。当我在 chrome 中的 Ripple 上运行该项目时,该项目运行良好。

这里有一点背景。当我第一次开始从事这个项目时,它运行良好,我能够在我的 Mac 上的 ios 模拟器上运行它。有一次,它开始给我一个与我的 iOS 开发者帐户相关的不同错误。我在我的 Mac 上打开 Xcode,意识到我需要登录开发者网站并接受最新的许可协议。完成此操作后,我尝试从 Visual Studio 再次运行该项目。那时我看到一个与证书有关的错误。我再次运行该项目,从那时起我不断收到此“SyntaxError: Unexpected token M”错误。

我尝试运行同一项目的旧备份。我得到的错误是:

An error occurred uploading to the build server https://10.0.1.31:3000/cordova: Error: self signed certificate in certificate chain

这是我看到“SyntaxError: Unexpected token M”的输出日志部分:

1>  ------    changeList.deletedFilesIos:  (TaskId:11)
1>  ------    changeList.addedPluginsIos: org.apache.cordova.camera@0.3.6,org.apache.cordova.file-transfer@0.5.0,org.apache.cordova.splashscreen@1.0.0,org.apache.cordova.inappbrowser@0.6.0 (TaskId:11)
1>  ------    changeList.deletedPluginsIos:  (TaskId:11)
1>  ------    changeList.addedPlugins: org.apache.cordova.camera@0.3.6,org.apache.cordova.file-transfer@0.5.0,org.apache.cordova.splashscreen@1.0.0,org.apache.cordova.inappbrowser@0.6.0 (TaskId:11)
1>  ------    changeList.deletedPlugins:  (TaskId:11)
1>  ------ Updating plugins (TaskId:11)
1>  SyntaxError: Unexpected token M (TaskId:11)
1>Done executing task "MdaVsCli" -- FAILED. (TaskId:11)
1>Done building target "BuildMDA" in project "MyPyaarApp.jsproj" -- FAILED.: (TargetId:12)
1>
1>Project Performance Summary:
1>      672 ms  C:\svn\mypyaar\trunk\MyPyaarApp\MyPyaarApp\MyPyaarApp.jsproj   1 calls
1>                672 ms  build                                      1 calls
1>
1>Target Performance Summary:
1>        0 ms  BuildOnlySettings                          1 calls
1>        0 ms  CompileTypeScript                          1 calls
1>        0 ms  AfterBuild                                 1 calls
1>        0 ms  TrackJsChanges                             1 calls
1>        0 ms  BeforeBuild                                1 calls
1>        0 ms  PreComputeCompileTypeScript                1 calls
1>        0 ms  CoreBuild                                  1 calls
1>       16 ms  _CheckForInvalidConfigurationAndPlatform   1 calls
1>      266 ms  EnsureNodeJsRequirementsAreAtCorrectVersion   1 calls
1>      266 ms  InstallMDA                                 1 calls
1>      391 ms  BuildMDA                                   1 calls
1>
1>Task Performance Summary:
1>        0 ms  MdaVerifySetup                             1 calls
1>        0 ms  MdaTrackJsChanges                          1 calls
1>        0 ms  Message                                    2 calls
1>        0 ms  VsTsc                                      2 calls
1>        0 ms  AssignTargetPath                           1 calls
1>      266 ms  RunMdaInstall                              1 calls
1>      266 ms  CallTarget                                 1 calls
1>      391 ms  MdaVsCli                                   1 calls
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:00.65
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
========== Deploy: 0 succeeded, 0 failed, 0 skipped ==========

【问题讨论】:

【参考方案1】:

找到了解决办法!!!

幸运的是,我有一个旧的项目备份,在远程设备上运行它时没有产生“SyntaxError: Unexpected token M”。我使用比较工具来查看文件/文件夹的差异。事实证明,位于插件文件夹中的“remote_ios.json”文件已损坏。我删除了它,在下一次运行时它生成了一个正确的,现在一切都按预期工作。我可以在我的 Mac 和 iPhone 上部署到 iOS 模拟器。

我确实注意到文件确实损坏了几次。所以每次我删除文件并重新创建它并且一切正常。听起来像是 Visual Studio 2015 中的一个错误。

这是我损坏的 remote_os.json 文件的样子:


    "prepare_queue": 
        "installed": [],
        "uninstalled": []
    ,
    "config_munge": 
        "files": 
            "framework": 
                "parents": 
                    "ImageIO.framework": [
                        
                            "xml": true,
                            "count": 1
                        
                    ],
                    "CoreLocation.framework": [
                        
                            "xml": false,
                            "count": 1
                        
                    ],
                    "CoreGraphics.framework": [
                        
                            "xml": false,
                            "count": 4
                        
                    ],
                    "AssetsLibrary.framework": [
                        
                            "xml": false,
                            "count": 3
                        
                    ],
                    "MobileCoreSe

【讨论】:

另外,关于错误“证书链中的自签名证书”,我需要做的就是通过调用remotebuild证书重置来重置mac上的remotebuild证书 哇,我一直在寻找这个,谢谢先生,你让我开心! 某些(不是全部)Cordova 项目和最新的 VS2015 Update 1、Cordova Tools 6 仍然会发生此错误。对于受影响的项目,在每次构建之前删除 remote_ios.json 是解决此问题的一种方法。 @NavidHarandi,运行 remotebuild 证书重置并没有为我修复自签名证书错误。关于那个还有其他想法吗? 嗨 Andrew,试试这个临时解决方法:运行 remotebuild 将安全模式设置为 false:(1) 在 VS 2015“远程代理配置”设置中的 mac 终端上运行 remotebuild --secure false (2) , 将安全模式设置为 false【参考方案2】:

解决办法是

以及针对此问题的更永久修复(对我有用):

    就是删除你的插件文件夹

    恢复所有插件。 (列在您的 package.json 中的一个名为 cordovaPlugins 的数组中)


提示:运行 cordova plugin ls 以获得您需要重新添加的内容的列表。

我使用 Ionic,所以我只使用了这个命令:ionic state restore --plugins,瞧,问题永远解决了(我希望)。

附言。仅供参考,我不会为此以管理员身份运行 cmd,这可能是您的 iOS 应用出现问题的原因...

从Navid Harandi's answer找到问题的根源。

【讨论】:

以上是关于SyntaxError: Unexpected token M (当从 Visual Studio 2015 运行 cordova 项目时)的主要内容,如果未能解决你的问题,请参考以下文章

求教php运行时出错:Parse error: syntax error, unexpected T_STRING, expecting T_FUNCTION 。。。

Import Unexpected identifier + SyntaxError: Unexpected string

js动态加载的a标签的onclick事件参数传递,一直报Uncaught SyntaxError: Invalid or unexpected token

解析错误:语法错误,意外的“未设置”(T_UNSET)

SyntaxError: unexpected EOF while parsing

获取 MongoDB 错误 - SyntaxError: Unexpected token?