我想在我的 Angular 项目中使用 Chart.js。在以前的 Angular2 版本中,我通过使用具有以下功能的“chart.loader.ts”一直做得很好:
export const { Chart } = require('chart.js');
然后在组件代码中我只是
import { Chart } from './chart.loader';
但升级到 cli 1.0.0 和 Angular 4 后,我收到错误消息:“找不到名称 'require'”。
要重现错误:
ng new newapp
cd newapp
npm install chart.js --save
echo "export const { Chart } = require('chart.js');" >> src/app/chart.loader.ts
ng serve
在我的“tsconfig.json”中,我有
"typeRoots": [
"node_modules/@types"
],
在 'node_modules/@types/node/index.d.ts' 中有:
declare var require: NodeRequire;
所以我很困惑。
顺便说一句,我经常遇到警告:
[tslint] The selector of the component "OverviewComponent" should have prefix "app"(component-selector)
虽然我在'.angular-cli.json'中设置了“前缀”:“”。难道是因为从 'angular-cli.json' 更改为 '.angular-cli.json' 的原因?
问题(如 typescript getting error TS2304: cannot find name ' require' 中所述)是未安装节点的类型定义。
对于预计生成的 with @angular/cli 1.x
,具体步骤应为:
步骤1:
使用以下任一方式安装 @types/node
:
- npm install --save @types/node
- yarn add @types/node -D
第 2 步:编辑您的 src/tsconfig.app.json 文件并添加以下内容来代替应该已经存在的空 "types": []
:
...
"types": [ "node" ],
"typeRoots": [ "../node_modules/@types" ]
...
如果我错过了什么,请写下评论,我会编辑我的答案。
将在 Angular 7+ 中工作
我面临同样的问题,我正在添加
"types": ["node"]
到根文件夹的 tsconfig.json。
src 文件夹下还有一个 tsconfig.app.json ,我通过添加解决了这个问题
"types": ["node"]
到 compilerOptions
下的 tsconfig.app.json 文件
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"types": ["node"] ----------------------< added node to the array
},
"exclude": [
"test.ts",
"**/*.spec.ts"
]
}
最后我得到了解决方案,检查我的 App 模块文件:
import { BrowserModule } from '@angular/platform-browser';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { MaterialModule } from '@angular/material';
import 'hammerjs';
import { ChartModule } from 'angular2-highcharts';
import * as highcharts from 'highcharts';
import { HighchartsStatic } from 'angular2-highcharts/dist/HighchartsService';
import { AppRouting } from './app.routing';
import { AppComponent } from './app.component';
declare var require: any;
export function highchartsFactory() {
const hc = require('highcharts');
const dd = require('highcharts/modules/drilldown');
dd(hc);
return hc;
}
@NgModule({
declarations: [
AppComponent,
],
imports: [
BrowserModule,
FormsModule,
HttpModule,
AppRouting,
BrowserAnimationsModule,
MaterialModule,
ChartModule
],
providers: [{
provide: HighchartsStatic,
useFactory: highchartsFactory
}],
bootstrap: [AppComponent]
})
export class AppModule { }
注意上面代码中的 declare var require: any;
。
仍然不确定答案,但可能的解决方法是
import * as Chart from 'chart.js';
至于我,使用 VSCode 和 Angular 5,只需将“节点”添加到 tsconfig.app.json 中的类型。保存并重新启动服务器。
{ "compilerOptions": { .. "types": [ "node" ] } .. }
一件奇怪的事情是,这个问题“找不到 require (”,在使用 ts-node 执行时不会发生
"types": [ "node" ],
添加到 tsconfig.lib.json
。
我添加了
"types": [
"node"
]
在我的 tsconfig 文件中,它为我工作的 tsconfig.json 文件看起来像
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"baseUrl": "./",
"module": "es2015",
"types": [
"node",
"underscore"
]
},
在给出错误的文件顶部添加以下行:
declare var require: any
我将 tsconfig.json
文件移动到一个新文件夹中以重组我的项目。
所以它无法解析 tsconfig.json 的 typeRoots
属性内的 node_modules/@types 文件夹的路径
所以只需更新路径
"typeRoots": [
"../node_modules/@types"
]
至
"typeRoots": [
"../../node_modules/@types"
]
仅确保从 tsconfig.json 的新位置解析 node_modules 的路径
src
文件夹下的tsconfig.app.json
添加"types": ["node"]
,它不在根 tsconfigdeclare var require: any;
的答案令人惊讶。