更新到 Angular 8 CLI 后抛出“.getColorDepth 不是函数”

Posted

技术标签:

【中文标题】更新到 Angular 8 CLI 后抛出“.getColorDepth 不是函数”【英文标题】:After update to Angular 8 CLI throws ".getColorDepth is not a function" 【发布时间】:2019-11-25 00:22:43 【问题描述】:

我的一位同事将我们的项目升级到 angular 8。我拉出他的分支并运行 npm install。在他的树枝上一切正常。我现在每次运行任何“ng ...”命令时都会遇到同样的错误:

C:\xxx\party-ui\node_modules\@angular\cli\utilities\color.js:15
    process.stdout.getColorDepth() > 1;
                   ^

    TypeError: process.stdout.getColorDepth is not a function
        at Object.<anonymous> (C:\xxx\party-ui\node_modules\@angular\cli\utilities\color.js:15:20)
        at Module._compile (module.js:652:30)
        at Object.Module._extensions..js (module.js:663:10)
        at Module.load (module.js:565:32)
        at tryModuleLoad (module.js:505:12)
        at Function.Module._load (module.js:497:3)
        at Module.require (module.js:596:17)
        at require (internal/module.js:11:18)
        at Object.<anonymous> (C:\xxx\party-ui\node_modules\@angular\cli\models\analytics.js:18:17)
        at Module._compile (module.js:652:30)

我还尝试更新 npm 和 node(现在有 10.16.0 和 6.9.0 版本)。 还删除了 node_modules 文件夹并在此之后运行 npm install 。 我能做什么?

【问题讨论】:

这看起来像是一个节点版本控制问题。查看您的同事使用的版本并尝试使用该版本 我们也是这么想的,所以我升级到了最新的node和npm版本。无法想象我的旧设备和最新设备会导致相同的错误消息...不幸的是,它是公司设备,我没有管理员权限来尝试与今天的同事使用相同的版本 我看到了问题:您尝试更新 angular。永远不要那样做。如果你这样做了,你一定要记得首先删除 node_modules,重新安装 npm,给狗刮毛,倒垃圾,清空回收站,重新映像你的设备,用牙线清洁你的牙齿,从你的 fone 中卸载 Tinder,删除你的包- lock.json 文件,并且,当您使用它时,从网络和云中删除所有 .json 文件,然后重新安装 nodejs 并通过ng g m 从头开始​​生成一个新的角度模块并运行npm install,然后你很厉害。如果这不起作用,请尝试重新启动 - 这对我有 37% 的时间。 【参考方案1】:

有同样的错误, 我的版本:

Angular CLI: 8.1.1
Node: 11.14.0
OS: linux x64
Angular: 8.1.1

运行:

rm -rf node_modules
rm -rf package-lock.json
sudo npm cache clean --force
npm install

【讨论】:

很遗憾,这并没有解决问题 这适用于linux,对于windows你应该删除node_modules目录和package-lock.json文件,然后清理npm缓存【参考方案2】:

查看有问题的文件./node_modules/@angular/cli/utilities/color.js。请注意有问题的行 (15) 上方的注释:

"use strict";
Object.defineProperty(exports, "__esModule",  value: true );
/**
 * @license
 * Copyright Google Inc. 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
 */
 const colors = require("ansi-colors");
 exports.colors = colors;
 const tty_1 = require("tty");
 // Typings do not contain the function call (added in Node.js v9.9.0)
 exports.supportsColor = process.stdout instanceof tty_1.WriteStream &&
    process.stdout.getColorDepth() > 1;
 colors.enabled = exports.supportsColor;

具体来说:

// Typings do not contain the function call (added in Node.js v9.9.0)

将 Node 升级到不低于 v9.9.0 的版本可以解决此问题。

但是...

...选择如何升级NodeJS 并不是那么简单。见How do I update Node.js?。一些流行的答案位于页面下方,因此值得滚动浏览。

【讨论】:

谢谢,这让我找到了正确的解决方案。我不得不删除旧 node-js 版本的文件夹...【参考方案3】:

"@angular/core": "~8.2.3" 出现错误。

我使用这些命令将节点版本更新为最新的稳定版本,它在 linux 中为我解决了这个问题

sudo npm cache clean -f
sudo npm install -g n
sudo n stable

【讨论】:

【参考方案4】:

我在我的开发机器上使用的是较旧的 node.js 版本。将我的节点版本从 8 切换到 12 为我消除了这个错误,我的项目再次开始成功构建:

"nvm 使用 12.16.3"

NVM 是一个节点版本管理器,可以让您在节点版本之间快速切换,我建议在处理不同节点版本的多个项目时使用它。

文档: https://github.com/nvm-sh/nvm

【讨论】:

以上是关于更新到 Angular 8 CLI 后抛出“.getColorDepth 不是函数”的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails Rake在将rails项目从4.1.9更新到4.2.0后抛出“不正确的表名”错误

Laravel 更新后抛出“bootstrap/cache directory must be present and writable”错误

Boost序列化在一定文件大小后抛出“输入流错误”

EB 上的解析服务器在创建新对象后抛出 499

画布在 LoadFromJson 后抛出污染错误

Socket.io 移动到不同的域名后抛出 connect_error “服务器错误”