Angular 11项目集成ng2-charts编译报错的最优解决方案咨询
ng2-charts集成Angular11编译报错问题
我计划为我的Angular项目安装ng2-charts,官方地址为:https://valor-software.com/ng2-charts/
核心问题是我修改angular.json文件后,编译器抛出了多处错误,相关信息如下:
barras.component.ts代码
import { Component, OnInit } from '@angular/core'; import { ChartDataSets } from 'chart.js'; import { ChartOptions, ChartType } from 'chart.js'; import { Label } from 'ng2-charts'; @Component({ selector: 'app-barras', templateUrl: './barras.component.html', styles: [ ] }) export class BarrasComponent implements OnInit { public barChartOptions: ChartOptions = { responsive: true, // We use these empty structures as placeholders for dynamic theming. scales: { xAxes: [{}], yAxes: [{}] }, plugins: { datalabels: { anchor: 'end', align: 'end', } } }; public barChartLabels: Label[] = ['2006', '2007', '2008', '2009', '2010', '2011', '2012']; public barChartType: ChartType = 'bar'; public barChartLegend = true; public barChartPlugins = [pluginDataLabels]; public barChartData: ChartDataSets[] = [ { data: [65, 59, 80, 81, 56, 55, 40], label: 'Series A' }, { data: [28, 48, 40, 19, 86, 27, 90], label: 'Series B' } ]; constructor() { } ngOnInit(): void { } public randomize(): void { // Only Change 3 values this.barChartData[0].data = [ Math.round(Math.random() * 100), 59, 80, (Math.random() * 100), 56, (Math.random() * 100), 40 ]; }
package.json依赖配置
"dependencies": { "@angular/animations": "~11.2.9", "@angular/common": "~11.2.9", "@angular/compiler": "~11.2.9", "@angular/core": "~11.2.9", "@angular/forms": "~11.2.9", "@angular/platform-browser": "~11.2.9", "@angular/platform-browser-dynamic": "~11.2.9", "@angular/router": "~11.2.9", "chart.js": "^3.2.1", "ng2-charts": "^2.4.2", "rxjs": "~6.6.0", "tslib": "^2.0.0", "zone.js": "~0.11.3" },
angular.json配置
{ "$schema": "./node_modules/@angular/cli/lib/config/schema.json", "version": 1, "newProjectRoot": "projects", "projects": { "graficasApp": { "projectType": "application", "schematics": { "@schematics/angular:application": { "strict": true } }, "root": "", "sourceRoot": "src", "prefix": "app", "architect": { "build": { "builder": "@angular-devkit/build-angular:browser", "options": { "allowedCommonJsDependencies": ["chart.js"], "outputPath": "dist/graficasApp", "index": "src/index.html", "main": "src/main.ts", "polyfills": "src/polyfills.ts", "tsConfig": "tsconfig.app.json", "aot": true, "assets": [ "src/favicon.ico", "src/assets" ], "styles": [ "src/styles.css" ], "scripts": [] }, "configurations": { "production": { "fileReplacements": [ { "replace": "src/environments/environment.ts", "with": "src/environments/environment.prod.ts" } ], "optimization": true, "outputHashing": "all", "sourceMap": false, "namedChunks": false, "extractLicenses": true, "vendorChunk": false, "buildOptimizer": true, "budgets": [ { "type": "initial", "maximumWarning": "500kb", "maximumError": "1mb" }, { "type": "anyComponentStyle", "maximumWarning": "2kb", "maximumError": "4kb" } ] } } }, "serve": { "builder": "@angular-devkit/build-angular:dev-server", "options": { "browserTarget": "graficasApp:build" }, "configurations": { "production": { "browserTarget": "graficasApp:build:production" } } }, "extract-i18n": { "builder": "@angular-devkit/build-angular:extract-i18n", "options": { "browserTarget": "graficasApp:build" } }, "test": { "builder": "@angular-devkit/build-angular:karma", "options": { "main": "src/test.ts", "polyfills": "src/polyfills.ts", "tsConfig": "tsconfig.spec.json", "karmaConfig": "karma.conf.js", "assets": [ "src/favicon.ico", "src/assets" ], "styles": [ "src/styles.css" ], "scripts": [] } }, "lint": { "builder": "@angular-devkit/build-angular:tslint", "options": { "tsConfig": [ "tsconfig.app.json", "tsconfig.spec.json", "e2e/tsconfig.json" ], "exclude": [ "**/node_modules/**" ] } }, "e2e": { "builder": "@angular-devkit/build-angular:protractor", "options": { "protractorConfig": "e2e/protractor.conf.js", "devServerTarget": "graficasApp:serve" }, "configurations": { "production": { "devServerTarget": "graficasApp:serve:production" } } } } } }, "defaultProject": "graficasApp" }
报错信息
- Windows CMD编译报错

- 浏览器端编译报错

请问这类图表库集成报错的最优解决方式是什么?
解决方案
本次报错的核心原因是依赖版本不匹配:ng2-charts 2.4.2仅适配chart.js 2.9.x版本,你安装的chart.js 3.2.1属于大版本迭代,API存在大量破坏性变更,直接导致类型定义找不到、配置项不兼容等问题。
按以下步骤操作即可修复:
- 卸载当前不兼容的chart.js版本
npm uninstall chart.js
- 安装适配ng2-charts 2.4.2的chart.js版本
npm install chart.js@2.9.4
- 补充datalabels插件依赖(你代码中用到了
pluginDataLabels但未引入对应依赖,不需要该功能可跳过)
npm install chartjs-plugin-datalabels@1.0.0
安装完成后在barras.component.ts头部添加引入语句:
import * as pluginDataLabels from 'chartjs-plugin-datalabels';
- 清理缓存并重启服务
删除项目根目录下的node_modules文件夹和package-lock.json文件,重新执行npm install安装依赖,之后重启ng serve即可正常编译。
额外提示:你在angular.json中添加的chart.js CommonJS依赖豁免配置是正确的,无需修改。后续集成第三方库时优先核对官方文档的依赖版本要求,严格匹配大版本号可避免绝大多数集成类报错。
内容的提问来源于stack exchange,提问作者user13987123
相关产品推荐
相关产品推荐

