From 74982bfff84ab95de0449ffca1731c9a1145d2ed Mon Sep 17 00:00:00 2001 From: Filipe Silva Date: Tue, 7 Mar 2017 16:09:28 +0000 Subject: [PATCH] fix(@angular/cli): don't fail install due to node-sass This change should reduce the amount of problems on npm installs. It makes the `node-sass` dependency optional, and so install will not fail when it cannot be installed. For projects that do not use sass, there is no side-effect of an failed node-sass install. For projects that do use node-sass and the install failed, they should see the following self-explanatory error message: ``` ERROR in ./src/app/app.component.scss Module build failed: Error: Missing binding D:\sandbox\master-project\node_modules\node-sass\vendor\win32-x64-51\binding.node Node Sass could not find a binding for your current environment: Windows 64-bit with Node.js 7.x Found bindings for the following environments: This usually happens because your environment has changed since running `npm install`. Run `npm rebuild node-sass` to build the binding for your current environment. at module.exports (D:\sandbox\master-project\node_modules\node-sass\lib\binding.js:15:13) at Object. (D:\sandbox\master-project\node_modules\node-sass\lib\index.js:14:35) ``` --- package.json | 4 +++- packages/@angular/cli/package.json | 4 +++- scripts/publish/validate_dependencies.js | 2 ++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index ca4f36bba85f..26c4121da504 100644 --- a/package.json +++ b/package.json @@ -77,7 +77,6 @@ "magic-string": "^0.19.0", "minimatch": "^3.0.3", "node-modules-path": "^1.0.0", - "node-sass": "^4.3.0", "nopt": "^4.0.1", "opn": "4.0.2", "portfinder": "~1.0.12", @@ -151,5 +150,8 @@ "tree-kill": "^1.0.0", "ts-node": "^2.0.0", "tslint": "^4.0.2" + }, + "optionalDependencies": { + "node-sass": "^4.3.0" } } diff --git a/packages/@angular/cli/package.json b/packages/@angular/cli/package.json index 5be43c2c98fa..3697ed2901b4 100644 --- a/packages/@angular/cli/package.json +++ b/packages/@angular/cli/package.json @@ -61,7 +61,6 @@ "lodash": "^4.11.1", "minimatch": "^3.0.3", "node-modules-path": "^1.0.0", - "node-sass": "^4.3.0", "nopt": "^4.0.1", "opn": "4.0.2", "portfinder": "~1.0.12", @@ -90,6 +89,9 @@ "webpack-merge": "^2.4.0", "zone.js": "^0.7.2" }, + "optionalDependencies": { + "node-sass": "^4.3.0" + }, "ember-addon": { "paths": [ "./" diff --git a/scripts/publish/validate_dependencies.js b/scripts/publish/validate_dependencies.js index a8c1aa25cf44..ae69faca139b 100644 --- a/scripts/publish/validate_dependencies.js +++ b/scripts/publish/validate_dependencies.js @@ -121,6 +121,7 @@ for (const packageName of Object.keys(packages)) { const packageJson = JSON.parse(fs.readFileSync(packages[packageName].packageJson, 'utf8')); const allDeps = [] .concat(Object.keys(packageJson['dependencies'] || {})) + .concat(Object.keys(packageJson['optionalDependencies'] || {})) .concat(Object.keys(packageJson['devDependencies'] || {})) .concat(Object.keys(packageJson['peerDependencies'] || {})); @@ -142,6 +143,7 @@ const rootPackageJson = JSON.parse(fs.readFileSync(rootPackagePath, 'utf8')); // devDependencies are ignored const allRootDeps = [] .concat(Object.keys(rootPackageJson['dependencies'] || {})) + .concat(Object.keys(rootPackageJson['optionalDependencies'] || {})) .concat(Object.keys(rootPackageJson['peerDependencies'] || {})); const internalPackages = Object.keys(packages);