【问题标题】:npm install -g @angular/cli failing with syntax errornpm install -g @angular/cli 因语法错误而失败
【发布时间】:2024-06-01 14:20:02
【问题描述】:

我有一个在 centos 7 容器上运行的 jenkins 作业。 一旦容器启动,jenkins 作业就会运行一个脚本 执行

 npm install -g @angular/cli

这已经工作了大约一年,但今天开始失败:

 /usr/bin/ng -> /usr/lib/node_modules/@angular/cli/bin/ng
 > @angular/cli@8.0.4 postinstall /usr/lib/node_modules/@angular/cli
 > node ./bin/postinstall/script.js
 /usr/lib/node_modules/@angular/cli/bin/postinstall/analytics-prompt.js:8
 (async () => {
 ^
 SyntaxError: Unexpected token (
 at createScript (vm.js:56:10)
 at Object.runInThisContext (vm.js:97:10)
 at Module._compile (module.js:549:28)
 at Object.Module._extensions..js (module.js:586:10)
 at Module.load (module.js:494:32)
 at tryModuleLoad (module.js:453:12)
 at Function.Module._load (module.js:445:3)
 at Module.require (module.js:504:17)
 at require (internal/module.js:20:19)
 at Object.<anonymous> (/usr/lib/node_modules/@angular/cli/bin/postinstall/script.js:5:1)
 npm ERR! Linux 3.10.0-957.1.3.el7.x86_64
 npm ERR! argv "/usr/bin/node" "/usr/bin/npm" "install" "-g" "@angular/cli"
 npm ERR! node v6.16.0
 npm ERR! npm  v3.10.10
 npm ERR! code ELIFECYCLE
 npm ERR! @angular/cli@8.0.4 postinstall: `node ./bin/postinstall/script.js`
 npm ERR! Exit status 1
 npm ERR!
 npm ERR! Failed at the @angular/cli@8.0.4 postinstall script 'node ./bin/postinstall/script.js'.
 npm ERR! Make sure you have the latest version of node.js and npm installed.
 npm ERR! If you do, this is most likely a problem with the @angular/cli package,
 npm ERR! not with npm itself.
 npm ERR! Tell the author that this fails on your system:
 npm ERR!     node ./bin/postinstall/script.js
 npm ERR! You can get information on how to open an issue for this project with:
 npm ERR!     npm bugs @angular/cli
 npm ERR! Or if that isn't available, you can get their info via:
 npm ERR!     npm owner ls @angular/cli
 npm ERR! There is likely additional logging output above.
 npm ERR! Please include the following file with any support request:
 npm ERR!     /app/capman-fe/npm-debug.log

我的packages.json 是这个:

{
  "name": "pman-fe",
  "version": "0.0.0",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  },
  "private": true,
  "dependencies": {
... omitted for brevity ...
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "^0.6.8",
    "@angular/cli": "^6.0.8",
    "@angular/compiler-cli": "^6.0.3",
    "@angular/language-service": "^6.0.3",
    "@types/d3": "^5.7.1",
    "@types/jasmine": "~2.8.6",
    "@types/jasminewd2": "~2.0.3",
    "@types/node": "~8.9.4",
    "codelyzer": "~4.2.1",
    "jasmine-core": "~2.99.1",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~1.7.1",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "~2.0.0",
    "karma-jasmine": "~1.1.1",
    "karma-jasmine-html-reporter": "^0.2.2",
    "protractor": "^5.4.1",
    "ts-node": "~5.0.1",
    "tslint": "~5.9.1",
    "typescript": "~2.7.2"
  }
}

【问题讨论】:

  • 这是始终需要最新版本库的结果。
  • 好的,我该如何解决。
  • 我遇到了这个问题,我只是想重新安装 Angular CLI。他们的包裹很无聊吗?
  • @DavidPrice 我从rpm 通过yum 安装我的npm 您使用的是Redhat 还是Centos?如果是这样,请尝试安装 yum 存储库并从那里使用 rpm
  • 我在 Windows 上。对不起,我看到你在 Linux 上。也许我的节点/npm 不好?我从来没有在这台机器上安装过 Angular CLI。

标签: npm angular-cli


【解决方案1】:

我能够解决这个错误。问题是当我安装npm 时,我只是执行了:yum -y install npm。我猜我必须使用的容器的 yum 存储库没有npm rpm 的最新副本。所以我改变了我安装npm的方式。现在我这样做:

yum install -y gcc-c++ make
curl -sL https://rpm.nodesource.com/setup_10.x | bash -
yum -y install nodejs
node -v
npm -v
npm install -g @angular/cli

根据https://tecadmin.net/install-latest-nodejs-and-npm-on-centos/

【讨论】:

  • 就像我说的,如果您需要任何库的最新版本,无论是在 yum 还是 npm 中,您最终都会遇到此类错误。这就是软件遵循 semver 的原因。坚持使用您的软件编写的固定版本。例如。 @angular/cli@^8.0
  • 人们可能想看看这个文档:docs.npmjs.com/about-semantic-versioning
  • 这样一来,在 9.0 发布之日,您就不必想知道为什么您的应用会突然崩溃;)
【解决方案2】:

替换

npm install -g @angular/cli

npm install -g @angular/cli@~8.0.0

当前 8.0.4 版本 @angular/cli 存在依赖问题

使用 ~8.0.0 或更少(版本与 package.json 匹配的理想选择)

【讨论】:

  • 我在 CentOS 上遇到了同样的错误。我有最新的节点和 npm(分别为 v6.17.1 和 v3.10.10)。我试着像你说的那样安装 8.0.0。同样的错误。错误代码:生命周期。在 @angular/cli@8.0.6 后安装脚本“节点 ./bin/postinstall/script.js”处失败。
【解决方案3】:

我刚刚在 Windows 上遇到了同样的错误:原来我有一个超级旧版本(v.6.11.0)的 Node,所以我会尝试在你的 centos 机器上更新本地版本的 Node(或者你的任何环境)在...上)。请注意,这也会更新您的 npm 版本(很可能)。

【讨论】:

  • 感谢@ivarcode。虽然我在mac上遇到了这个问题。我想知道为什么在我做brew install node 和你的一样(v.6.11.0)时在我的系统上安装了旧版本。因此,我的角度导致了同样的问题。然后我从nodejs.org/en 下载的包中安装了节点