getting more information from phantomjs “SyntaxError: Parse error” message

前端 未结 7 2203
感动是毒
感动是毒 2020-12-03 04:38

I have a long script that was not written by me. When i run it I get:

phantomjs file.js
SyntaxError: Parse error

i checked out the manual a

相关标签:
7条回答
  • 2020-12-03 04:42

    Getting More Information From PhantomJS

    The next version of PhantomJS (presumably it will be 1.9.8, whatever comes after 1.9.7) will output errors like this:

    SyntaxError: Parse error
    http://localhost:9000/scripts/49e8b4f4.vendor.js:8
    

    So that's slightly more useful than the current message.

    Unfortunately there are no nightly builds for PhantomJS, so at this time you will need to compile your own version of master if you want to try this.

    Debugging Minified files

    If you are working with a minified file, often the line number won't be very helpful, and often debugging the un-minified file won't give you the parse error.

    To solve this, once you get phantomjs to give you the name of the file, you can use the online demo of Esprima to get an actual parse of your JavaScript code:

    http://esprima.org/demo/parse.html

    From there, you can enter strategic line breaks to isolate the actual error.

    Lint Tools are Sub-optimal for this use-case

    A lint tool like jslint or jshint are more opinionated than a real parser, so if you are looking for a very specific syntax error, I would recommend using a real parser, since it will check only for code validity, and not opinionated styling guidelines. I'm not implying lint tools don't have value, just that they won't be as helpful for solving this type of problem.

    0 讨论(0)
  • 2020-12-03 04:42

    You can also use syntax linters like jslint or jshint

    0 讨论(0)
  • 2020-12-03 04:44

    Run the file with node. If there is a parse error it will report it.

    If the file is valid, then node will also try to run it, which will fail if your script depends on something not available in your node environment. So you'll have to ignore any runtime errors.

    For example, given hello-world.js:

    // Say Hello World twice
    for (var i=0; i<2; i++) {
      console.log("Hello World") );
    }
    

    Run it with node:

    node hello-world.js
    

    Output:

    /home/someone/somewhere/hello-world.js:3
      console.log("Hello World") );
                                 ^
    SyntaxError: Unexpected token )
        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 Function.Module.runMain (module.js:497:10)
        at startup (node.js:119:16)
        at node.js:901:3
    
    0 讨论(0)
  • 2020-12-03 04:49

    I received SyntaxError: Parse error while trying to require a custom minified jquery.

    I found the solution was to add a blank line to the bottom of jquery.min.js.

    Hopefully this helps someone. Using PhantomJS 1.9.7.

    0 讨论(0)
  • 2020-12-03 04:49

    I use a simple shell script that will run Phantom normally if no parse errors are found, otherwise it will display the errors. It runs the script through node, checks for SyntaxError in the output and then re-runs node to the terminal if there are errors. It passes all the command line arguments along to Phantom.

    Failure mode for this method is if your node parser is significantly different from your Phantom parser. Mine are close enough that it's never been a problem.

    usage: ./debug.sh --myArg1 val1 --myArg2 val2

    debug.sh:

    ERROR=$(node myscript.js 2>&1 >/dev/null |  grep "SyntaxError")
    
    if [ "$ERROR" = "" ]; then
      echo "No parse errors, running script..."
      # run the script with Phantom and pass all the args to it
      phantomjs accession.js $*
    else
      echo "*********************************************************"
      echo "********* There are parse errors in the script: *********"
      echo "*********************************************************"
      # show the errors by running again but not redirecting
      node accession.js
    fi
    
    0 讨论(0)
  • 2020-12-03 05:01

    Your file.js contains an invalid syntax. You should check it with a syntax validator. An online tool which I have created can be one possible solution, check out http://esprima.org/demo/validate.html.

    0 讨论(0)
提交回复
热议问题