From c385e744541554ad69a9d664cec1b33d8c2a4138 Mon Sep 17 00:00:00 2001 From: Joey Perrott Date: Tue, 6 Apr 2021 15:51:45 -0700 Subject: [PATCH] build: rely on engines to prevent using npm for dependency install (#41477) Rather than relying on a preinstall script, set `engine-strict` to `true` in a project `.npmrc` file, relying on the `engines` having `npm` set to note that yarn should be used instead. --- Output from `npm install` changes from: ``` $ npm install > angular-srcs@12.0.0-next.7 preinstall /usr/local/account/js/angular > node tools/yarn/check-yarn.js /usr/local/account/js/angular/tools/yarn/check-yarn.js:12 throw new Error( ^ Error: Please use Yarn instead of NPM to install dependencies. See: https://yarnpkg.com/lang/en/docs/install/ at Object. (/usr/local/account/js/angular/tools/yarn/check-yarn.js:12:9) at Module._compile (internal/modules/cjs/loader.js:778:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10) at Module.load (internal/modules/cjs/loader.js:653:32) at tryModuleLoad (internal/modules/cjs/loader.js:593:12) at Function.Module._load (internal/modules/cjs/loader.js:585:3) at Function.Module.runMain (internal/modules/cjs/loader.js:831:12) at startup (internal/bootstrap/node.js:283:19) at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3) npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! angular-srcs@12.0.0-next.7 preinstall: `node tools/yarn/check-yarn.js` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the angular-srcs@12.0.0-next.7 preinstall script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete log of this run can be found in: npm ERR! /usr/local/account/.npm/_logs/2021-04-06T22_54_02_292Z-debug.log ``` to ``` $ npm install npm ERR! code ENOTSUP npm ERR! notsup Unsupported engine for angular-srcs@12.0.0-next.7: wanted: {"node":">=10.19.0 <13.0.0","yarn":">=1.22.4 <2","npm":"Plesae use yarn instead of NPM to install dependencies"} (current: {"node":"10.20.1","npm":"6.14.4"}) npm ERR! notsup Not compatible with your version of node/npm: angular-srcs@12.0.0-next.7 npm ERR! notsup Not compatible with your version of node/npm: angular-srcs@12.0.0-next.7 npm ERR! notsup Required: {"node":">=10.19.0 <13.0.0","yarn":">=1.22.4 <2","npm":"Plesae use yarn instead of NPM to install dependencies"} npm ERR! notsup Actual: {"npm":"6.14.4","node":"10.20.1"} npm ERR! A complete log of this run can be found in: npm ERR! /usr/local/account/.npm/_logs/2021-04-06T22_53_23_912Z-debug.log ``` PR Close #41477 --- .npmrc | 1 + aio/.npmrc | 1 + aio/package.json | 4 ++-- aio/tools/examples/shared/.npmrc | 1 + aio/tools/examples/shared/package.json | 5 +++-- package.json | 4 ++-- tools/yarn/check-yarn.js | 14 -------------- 7 files changed, 10 insertions(+), 20 deletions(-) create mode 100644 .npmrc create mode 100644 aio/.npmrc create mode 100644 aio/tools/examples/shared/.npmrc delete mode 100644 tools/yarn/check-yarn.js diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000000..c42da845b4 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +engine-strict = true diff --git a/aio/.npmrc b/aio/.npmrc new file mode 100644 index 0000000000..c42da845b4 --- /dev/null +++ b/aio/.npmrc @@ -0,0 +1 @@ +engine-strict = true diff --git a/aio/package.json b/aio/package.json index 781ca7875c..4bc0d0cae8 100644 --- a/aio/package.json +++ b/aio/package.json @@ -6,7 +6,6 @@ "author": "Angular", "license": "MIT", "scripts": { - "preinstall": "node ../tools/yarn/check-yarn.js", "postinstall": "node tools/cli-patches/patch.js", "aio-use-local": "node tools/ng-packages-installer overwrite . --debug --force --build-packages", "aio-use-npm": "node tools/ng-packages-installer restore .", @@ -86,7 +85,8 @@ "//engines-comment": "Keep this in sync with /package.json and /aio/tools/examples/shared/package.json", "engines": { "node": ">=10.19.0 <16.0.0", - "yarn": ">=1.22.4 <2" + "yarn": ">=1.22.4 <2", + "npm": "Please use yarn instead of NPM to install dependencies" }, "private": true, "dependencies": { diff --git a/aio/tools/examples/shared/.npmrc b/aio/tools/examples/shared/.npmrc new file mode 100644 index 0000000000..c42da845b4 --- /dev/null +++ b/aio/tools/examples/shared/.npmrc @@ -0,0 +1 @@ +engine-strict = true diff --git a/aio/tools/examples/shared/package.json b/aio/tools/examples/shared/package.json index 579ca4c0c1..065258d56d 100644 --- a/aio/tools/examples/shared/package.json +++ b/aio/tools/examples/shared/package.json @@ -7,14 +7,15 @@ "http-server": "http-server", "protractor": "protractor", "webdriver:update": "node ../../../../scripts/webdriver-manager-update.js", - "preinstall": "node ../../../../tools/yarn/check-yarn.js", "postinstall": "yarn webdriver:update", "sync-deps": "node sync-boilerplate-dependencies" }, "//engines-comment": "Keep this in sync with /package.json and /aio/package.json", "engines": { "node": ">=10.19.0 <16.0.0", - "yarn": ">=1.21.1 <2" + "yarn": ">=1.21.1 <2", + "npm": "Please use yarn instead of NPM to install dependencies" + }, "keywords": [], "author": "", diff --git a/package.json b/package.json index 63213f8eeb..df836535d4 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,8 @@ "//engines-comment": "Keep this in sync with /aio/package.json and /aio/tools/examples/shared/package.json", "engines": { "node": ">=10.19.0 <16.0.0", - "yarn": ">=1.22.4 <2" + "yarn": ">=1.22.4 <2", + "npm": "Please use yarn instead of NPM to install dependencies" }, "repository": { "type": "git", @@ -31,7 +32,6 @@ "// 2": "Find the usage you are looking for with:", "// 3": "yarn ng-dev --help", "/ ": "", - "preinstall": "node tools/yarn/check-yarn.js", "postinstall": "node scripts/webdriver-manager-update.js && node --preserve-symlinks --preserve-symlinks-main ./tools/postinstall-patches.js", "prepare": "husky install", "test-ivy-aot": "bazelisk test --config=ivy --build_tag_filters=-no-ivy-aot,-fixme-ivy-aot --test_tag_filters=-no-ivy-aot,-fixme-ivy-aot", diff --git a/tools/yarn/check-yarn.js b/tools/yarn/check-yarn.js deleted file mode 100644 index 8fc3010639..0000000000 --- a/tools/yarn/check-yarn.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - -'use strict'; - -if (process.env.npm_execpath.indexOf('yarn') === -1) { - throw new Error( - 'Please use Yarn instead of NPM to install dependencies. See: https://yarnpkg.com/lang/en/docs/install/'); -}