Skip to content

v4.0.0 doesn't give file/line for wrong syntax. #2762

Description

@bobef

I'm happily moving some of my stuff to ES6 but when I wrong the syntax I get SyntaxError which goes to my on( 'unhandledException' ) and I print it to get message like this. Not very helpful.

SyntaxError: Unexpected identifier
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:413:25)
    at Object.Module._extensions..js (module.js:452:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at Object.<anonymous> (/Users/bobi/Dev/prototype-js/tests/tests.js:11:1)
    at Module._compile (module.js:434:26)
    at Object.Module._extensions..js (module.js:452:10)

Activity

  1. dodev commented on Sep 9, 2015

    @dodev
    Contributor

    You can start your investigation by examining what's on line 11 in /Users/bobi/Dev/prototype-js/tests/tests.js

  2. bobef commented on Sep 9, 2015

    @bobef
    Author

    I did and my investigation led to the conclusion that SyntaxError doesn't contain file/line information, so I posted here. Line 11 is console.error( e.stack ), and e is the exception from on( 'unhandledException' ). And e.lineNumber and the others described in MDN are undefined.

  3. dodev commented on Sep 9, 2015

    @dodev
    Contributor

    Try removing the unhandled exception callback. I think, if it's a syntax error, you'll get a cleaner stack trace, because the interpreter will break on the exact line and column, where the unexpected identifier was met.

  4. added
    questionIssues asking questions about Node.js.
    on Sep 9, 2015
  5. Trott commented on Sep 9, 2015

    @Trott
    Member

    Can you put the first 15 or so lines of /Users/bobi/Dev/prototype-js/tests/tests.js in a gist and link to it here?

  6. bobef commented on Sep 10, 2015

    @bobef
    Author
  7. bobef commented on Sep 10, 2015

    @bobef
    Author
  8. bobef commented on Sep 10, 2015

    @bobef
    Author

    So here is how to reproduce:

    mkdir dir
    cd dir
    npm install https://github.com/Perennials/prototype-js/tarball/master
    cd node_modules/Prototype
    npm install
    ### Break the syntax somewhere. Edit tests/Function.js:120 and change it to "iface1_decl {}"
    npm test

    And the line that prints the error is nodule_modules/Prototype/node_modules/Unitest/Unitest.js:569. And if you remove the uncaughtException handler the error is not printed for some reason.

  9. defunctzombie commented on Sep 12, 2015

    @defunctzombie
    Contributor

    I too ran into this issue when trying to process a syntax error after adding an uncaughtException handler. It seems that behavior prior to v4 might have been that the syntax error information (filename and line number) were printed to stderr regardless of the uncaughtException handler (the exception still given to the handler tho).

    I don't see a way to get the fileName or lineNumber information from the error. Using toString() simply results in the message SyntaxError: Unexpected identifier.

    Seems that behavior might be slightly different with these errors on startup versus before.

  10. defunctzombie commented on Oct 2, 2015

    @defunctzombie
    Contributor

    Any updates on this? It makes it rather multi-step (annoying) to debug syntax error when using tools like node-dev or even with your own uncaughtException handlers. This might not be obvious to users.

    /cc @bnoordhuis @rvagg @mikeal

  11. Fishrock123 commented on Oct 7, 2015

    @Fishrock123
    Contributor

    cc @nodejs/collaborators could we get more eyes on this?

  12. Qard commented on Oct 7, 2015

    @Qard
    Member

    This is present in v3 too.

    Also, the line number in the stack trace is like that in all versions of node. What's wrong is that the extra context info lines are missing.

    v3/v4:

    > Prototype@1.6.0 test /node_modules/Prototype
    > node ./tests/tests.js
    
    SyntaxError: Unexpected token {
        at exports.runInThisContext (vm.js:53:16)
        at Module._compile (module.js:413:25)
        at Object.Module._extensions..js (module.js:448:10)
        at Module.load (module.js:355:32)
        at Function.Module._load (module.js:310:12)
        at Module.require (module.js:365:17)
        at require (module.js:384:17)
        at Object.<anonymous> (/node_modules/Prototype/tests/tests.js:11:1)
        at Module._compile (module.js:430:26)
        at Object.Module._extensions..js (module.js:448:10)
    

    others:

    > Prototype@1.6.0 test /node_modules/Prototype
    > node ./tests/tests.js
    
    /node_modules/Prototype/tests/Function.js:120
            iface1_decl {}
                        ^
    SyntaxError: Unexpected token {
        at exports.runInThisContext (vm.js:53:16)
        at Module._compile (module.js:413:25)
        at Object.Module._extensions..js (module.js:448:10)
        at Module.load (module.js:355:32)
        at Function.Module._load (module.js:310:12)
        at Module.require (module.js:365:17)
        at require (module.js:384:17)
        at Object.<anonymous> (/node_modules/Prototype/tests/tests.js:11:1)
        at Module._compile (module.js:430:26)
        at Object.Module._extensions..js (module.js:448:10)
    

    Notice the bit with the ^ in it. Probably something changed in V8. Not sure if there's anything we can do about it, but I'll let some others have a look.

  13. domenic commented on Oct 7, 2015

    @domenic
    Contributor

    This is probably a result of the change in #2108. Strange, I thought we had tests for this...

  14. defunctzombie commented on Oct 8, 2015

    @defunctzombie
    Contributor

    Is this going to be considered a regression?

  15. 1 remaining item

  16. satya-dash commented on Feb 20, 2016

    @satya-dash

    function buildBundle(args, config, output = outputBundle) {
    ^

    SyntaxError: Unexpected token =
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:404:25)
    at loader (/Users/rajesh/iosapp/adminLogin/node_modules/babel-register/lib/node.js:130:5)
    at Object.require.extensions.(anonymous function) as .js
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:311:12)
    at Module.require (module.js:366:17)
    at require (module.js:385:17)
    at Object. (bundle.js:11:21)
    at Module._compile (module.js:425:26)

  17. jasnell commented on Mar 22, 2016

    @jasnell
    Member

    @nodejs/collaborators ... any further thoughts on this?

  18. cjihrig commented on Mar 22, 2016

    @cjihrig
    Contributor

    @jasnell I believe this should be fixed in master.

  19. jasnell commented on Mar 22, 2016

    @jasnell
    Member

    Closing then, can reopen if it proves necessary.

  20. mrahulreddy commented on Feb 24, 2017

    @mrahulreddy

    How can this issue be closed, without a solution over it?
    Someone, please help how to get rid of this?

    SyntaxError: Unexpected token ... at exports.runInThisContext (vm.js:53:16) at Module._compile (module.js:373:25) at Object.Module._extensions..js (module.js:416:10) at Module.load (module.js:343:32) at Function.Module._load (module.js:300:12) at Module.require (module.js:353:17) at require (internal/module.js:12:17) at Object.<anonymous> (C:\Users\Rahul Reddy\AppData\Roaming\npm\node_modules\angular-cli\node_modules\@ngtools\json-schema\src\index.js:2:30) at Module._compile (module.js:409:26) at Object.Module._extensions..js (module.js:416:10)

  21. gibfahn commented on Feb 24, 2017

    @gibfahn
    Member

    @mrahulreddy what version of Node did you see this with? If the issue has been fixed on master, it should be backported to v7.x and then v6.x and v4.x later.

    Could you check whether the latest nightly builds give the error for you? You can find them on https://nodejs.org/download/nightly/v8.0.0-nightly201702238e8fbd80d0/

  22. mrahulreddy commented on Feb 24, 2017

    @mrahulreddy

    Hello @gibfahn:
    I appreciate your quick reply,

    I am using v4.4.7.

    Even ng version gives the same error.

  23. gibfahn commented on Feb 24, 2017

    @gibfahn
    Member

    @cjihrig

    I believe this should be fixed in master.

    Do you know which PRs should have fixed it?

    @mrahulreddy the question is whether the changes have been backported to the latest v4 or v6. v4.4.7 definitely won't work, try v4.8.0 (the latest v4), or the latest v6 or v7.

  24. mikermcneil commented on Mar 16, 2017

    @mikermcneil

    I just verified that this is addressed in node 6 (I tested w/ 6.9.5). The pretty-printed output about the syntax error is included at the top of .stack, followed by the standard name: message\nraw and dirty stack stuff.

    Specifically:

    In Node 4.3.0 I get:

    error: A hook (`userconfig`) failed to load!
    error: Error: Attempted to `require('/Users/mikermcneil/code/inabottle/config/datastores.js')`, but an error occurred:
    --
    SyntaxError: Unexpected token ILLEGAL
        at exports.runInThisContext (vm.js:53:16)
        at Module._compile (module.js:374:25)
        at Object.Module._extensions..js (module.js:417:10)
        at Module.load (module.js:344:32)
        at Function.Module._load (module.js:301:12)
        at Module.require (module.js:354:17)
        at require (internal/module.js:12:17)
        at /Users/mikermcneil/code/include-all/lib/help-include-all-sync.js:293:33
        at Array.forEach (native)
        at _recursivelyIncludeAll (/Users/mikermcneil/code/include-all/lib/help-include-all-sync.js:178:11)
    --
    

    Whereas in Node v6.9.5, I get:

    error: A hook (`userconfig`) failed to load!
    error: Error: Attempted to `require('/Users/mikermcneil/code/inabottle/config/datastores.js')`, but an error occurred:
    --
    /Users/mikermcneil/code/inabottle/config/datastores.js:19
        adapter: 2#_ r32equire('sails-mysql'),
                       ^
    SyntaxError: Invalid or unexpected token
        at Object.exports.runInThisContext (vm.js:76:16)
        at Module._compile (module.js:542:28)
        at Object.Module._extensions..js (module.js:579:10)
        at Module.load (module.js:487:32)
        at tryModuleLoad (module.js:446:12)
        at Function.Module._load (module.js:438:3)
        at Module.require (module.js:497:17)
        at require (internal/module.js:20:19)
        at /Users/mikermcneil/code/include-all/lib/help-include-all-sync.js:293:33
        at Array.forEach (native)
    --
    
  25. softberry commented on Feb 15, 2018

    @softberry

    Make sure that you have installed latest LTS version of nodeJS from https://nodejs.org/
    As described in package.json
    `
    "engines": {

    "node": ">=6"
    

    }`

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionIssues asking questions about Node.js.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions