SamVerschueren / vscode-yo

Yeoman plugin for VS Code
MIT License
87 stars 15 forks source link

Exception when running yo command in VSCode #35

Closed aguerotSOVINTY closed 8 years ago

aguerotSOVINTY commented 8 years ago

When I press F1, type in 'yo' then [Enter] I get the following Exception:

Uncaught Exception:  TypeError: Cannot read property 'split' of undefined
TypeError: Cannot read property 'split' of undefined
    at new Range (C:\Users\Anthony\.vscode\extensions\samverschueren.yo-0.8.4\node_modules\semver\semver.js:720:19)
    at outside (C:\Users\Anthony\.vscode\extensions\samverschueren.yo-0.8.4\node_modules\semver\semver.js:1123:11)
    at Function.ltr (C:\Users\Anthony\.vscode\extensions\samverschueren.yo-0.8.4\node_modules\semver\semver.js:1111:10)
    at C:\Users\Anthony\.vscode\extensions\samverschueren.yo-0.8.4\out\yo\yo.js:37:49
    at Array.map (native)
    at Yeoman.getGenerators (C:\Users\Anthony\.vscode\extensions\samverschueren.yo-0.8.4\out\yo\yo.js:25:21)
    at C:\Users\Anthony\.vscode\extensions\samverschueren.yo-0.8.4\out\extension.js:90:37
    at Environment.resolver.lookup (C:\Users\Anthony\.vscode\extensions\samverschueren.yo-0.8.4\node_modules\yeoman-environment\lib\resolver.js:50:12)
    at Immediate._onImmediate (C:\Users\Anthony\.vscode\extensions\samverschueren.yo-0.8.4\out\extension.js:89:33)
    at processImmediate [as _immediateCallback] (timers.js:374:17)

Digging in the code led me to the following line in yo.js: 37 : => generatorMeta.isCompatible = semver.ltr('0.17.6', generatorVersion); generatorVersion's value is ~0.20.3

I had to patch the offending code in semver to handle the case where range object is null with a (range||'') to get it working (L720):

I also tried to upgrade semver to the latest version (5.1.0) but with no luck.

Feel free to let me know if you need further details.

aguerotSOVINTY commented 8 years ago

Hi,

I managed to find the root cause of my problem. I had a yeoman generator (custom made for testing only and "npm link'd") with the following package.json:

{
  "name": "package",
  "version": "0.0.0",
  "dependencies": {}
}

The side effect is that generatorVersion returned in yo.js (L33) is null in this case thus breaking semver.ltr function later on.

I'll submit a PR to manage this border case.

Love your extension btw, gret job!

SamVerschueren commented 8 years ago

Thanks for looking into this! PR more then welcome.

GregaVrbancic commented 8 years ago

Hi! I'm experiencing the same problem when I install this yeoman generator. I get the following exception:

Uncaught Exception:  TypeError: Cannot read property 'split' of undefined
TypeError: Cannot read property 'split' of undefined
    at new Range (/Users/grega/.vscode/extensions/samverschueren.yo-0.8.4/node_modules/semver/semver.js:720:19)
    at outside (/Users/grega/.vscode/extensions/samverschueren.yo-0.8.4/node_modules/semver/semver.js:1123:11)
    at Function.ltr (/Users/grega/.vscode/extensions/samverschueren.yo-0.8.4/node_modules/semver/semver.js:1111:10)
    at /Users/grega/.vscode/extensions/samverschueren.yo-0.8.4/out/yo/yo.js:37:49
    at Array.map (native)
    at Yeoman.getGenerators (/Users/grega/.vscode/extensions/samverschueren.yo-0.8.4/out/yo/yo.js:25:21)
    at /Users/grega/.vscode/extensions/samverschueren.yo-0.8.4/out/extension.js:90:37
    at Environment.resolver.lookup (/Users/grega/.vscode/extensions/samverschueren.yo-0.8.4/node_modules/yeoman-environment/lib/resolver.js:50:12)
    at Immediate._onImmediate (/Users/grega/.vscode/extensions/samverschueren.yo-0.8.4/out/extension.js:89:33)
    at tryOnImmediate (timers.js:534:15)
    at processImmediate [as _immediateCallback] (timers.js:514:5)

Anyone has a clue what could be wrong?

SamVerschueren commented 8 years ago

The PR that solved this issue was not released yet, did a new one. Make sure the generator you are using depends on yeoman-generator.

GregaVrbancic commented 8 years ago

Thank you for releasing new version with patched isssue. Now it's working fine!

SamVerschueren commented 8 years ago

Great 👍 :)