Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
bobef opened this issue Sep 9, 2015 · 23 comments
Closed

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

bobef opened this issue Sep 9, 2015 · 23 comments
Labels
question Issues that look for answers.

Comments

@bobef
Copy link

bobef commented Sep 9, 2015

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)
@dodev
Copy link
Contributor

dodev commented Sep 9, 2015

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

@bobef
Copy link
Author

bobef commented Sep 9, 2015

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.

@dodev
Copy link
Contributor

dodev commented Sep 9, 2015

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.

@mscdex mscdex added the question Issues that look for answers. label Sep 9, 2015
@Trott
Copy link
Member

Trott commented Sep 9, 2015

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?

@bobef
Copy link
Author

bobef commented Sep 10, 2015 via email

@bobef
Copy link
Author

bobef commented Sep 10, 2015 via email

@bobef
Copy link
Author

bobef commented Sep 10, 2015

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.

@defunctzombie
Copy link
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.

@defunctzombie
Copy link
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

@Fishrock123
Copy link
Contributor

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

@Qard
Copy link
Member

Qard commented Oct 7, 2015

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.

@domenic
Copy link
Contributor

domenic commented Oct 7, 2015

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

@defunctzombie
Copy link
Contributor

Is this going to be considered a regression?

cjihrig added a commit to cjihrig/node that referenced this issue Nov 25, 2015
Currently, when a file with a syntax error is imported in the
REPL, no information is provided on the error's location. This
commit adds the error's location to the stack trace.

Refs: nodejs#2762
Refs: nodejs#3411
Refs: nodejs#3784
PR-URL: nodejs#4013
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
cjihrig added a commit that referenced this issue Dec 5, 2015
Currently, when a file with a syntax error is imported in the
REPL, no information is provided on the error's location. This
commit adds the error's location to the stack trace.

Refs: #2762
Refs: #3411
Refs: #3784
PR-URL: #4013
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
cjihrig added a commit to cjihrig/node that referenced this issue Jan 7, 2016
Currently, when a file with a syntax error is imported in the
REPL, no information is provided on the error's location. This
commit adds the error's location to the stack trace.

Refs: nodejs#2762
Refs: nodejs#3411
Refs: nodejs#3784
PR-URL: nodejs#4013
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
MylesBorins pushed a commit that referenced this issue Jan 19, 2016
Currently, when a file with a syntax error is imported in the
REPL, no information is provided on the error's location. This
commit adds the error's location to the stack trace.

Refs: #2762
Refs: #3411
Refs: #3784
PR-URL: #4013
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
@satya-dash
Copy link

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)

@jasnell
Copy link
Member

jasnell commented Mar 22, 2016

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

@cjihrig
Copy link
Contributor

cjihrig commented Mar 22, 2016

@jasnell I believe this should be fixed in master.

@jasnell
Copy link
Member

jasnell commented Mar 22, 2016

Closing then, can reopen if it proves necessary.

@jasnell jasnell closed this as completed Mar 22, 2016
scovetta pushed a commit to scovetta/node that referenced this issue Apr 2, 2016
Currently, when a file with a syntax error is imported in the
REPL, no information is provided on the error's location. This
commit adds the error's location to the stack trace.

Refs: nodejs#2762
Refs: nodejs#3411
Refs: nodejs#3784
PR-URL: nodejs#4013
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
@mrahulreddy
Copy link

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)

@gibfahn
Copy link
Member

gibfahn commented Feb 24, 2017

@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/

@mrahulreddy
Copy link

Hello @gibfahn:
I appreciate your quick reply,

I am using v4.4.7.

Even ng version gives the same error.

@gibfahn
Copy link
Member

gibfahn commented Feb 24, 2017

@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.

@mikermcneil
Copy link

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)
--

@softberry
Copy link

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
Labels
question Issues that look for answers.
Projects
None yet
Development

No branches or pull requests