From b3dbb6e0f10b05931a60ed794ef1bc169356335b Mon Sep 17 00:00:00 2001 From: SteveSandersonMS Date: Mon, 7 Nov 2016 14:10:03 -0800 Subject: [PATCH] Yeoman generator, when running on Windows, ensures you have NPM 3+. Fixes #82. --- templates/package-builder/package.json | 4 +++- templates/package-builder/src/yeoman/app/index.ts | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/templates/package-builder/package.json b/templates/package-builder/package.json index 2db70ab..b65ceb0 100644 --- a/templates/package-builder/package.json +++ b/templates/package-builder/package.json @@ -10,12 +10,14 @@ "author": "Microsoft", "license": "Apache-2.0", "dependencies": { + "@types/semver": "^5.3.30", "diff": "^2.2.2", "gitignore-parser": "0.0.2", "glob": "^7.0.3", "lodash": "^4.11.1", "mkdirp": "^0.5.1", - "rimraf": "^2.5.2" + "rimraf": "^2.5.2", + "semver": "^5.3.0" }, "devDependencies": { "@types/glob": "^5.0.30", diff --git a/templates/package-builder/src/yeoman/app/index.ts b/templates/package-builder/src/yeoman/app/index.ts index a04af65..ffe764d 100644 --- a/templates/package-builder/src/yeoman/app/index.ts +++ b/templates/package-builder/src/yeoman/app/index.ts @@ -2,9 +2,12 @@ import * as path from 'path'; import * as yeoman from 'yeoman-generator'; import * as uuid from 'node-uuid'; import * as glob from 'glob'; +import * as semver from 'semver'; +import { execSync } from 'child_process'; import npmWhich = require('npm-which'); const yosay = require('yosay'); const toPascalCase = require('to-pascal-case'); +const isWindows = /^win/.test(process.platform); type YeomanPrompt = (opt: yeoman.IPromptOptions | yeoman.IPromptOptions[], callback: (answers: any) => void) => void; const optionOrPrompt: YeomanPrompt = require('yeoman-option-or-prompt'); @@ -25,6 +28,10 @@ class MyGenerator extends yeoman.Base { super(args, options); this._optionOrPrompt = optionOrPrompt; this.log(yosay('Welcome to the ASP.NET Core Single-Page App generator!')); + + if (isWindows) { + assertNpmVersionIsAtLeast('3.0.0'); + } } prompting() { @@ -110,5 +117,13 @@ function getPathToExecutable(executableName: string) { } } +function assertNpmVersionIsAtLeast(minVersion: string) { + const runningVersion = execSync('npm -v').toString(); + if (!semver.gte(runningVersion, minVersion, /* loose */ true)) { + console.error(`This generator requires NPM version ${minVersion} or later. You are running NPM version ${runningVersion}`); + process.exit(0); + } +} + declare var module: any; (module).exports = MyGenerator;