Angularプロジェクト内でChart.jsを使用したいです。以前のAngular 2バージョンでは、 '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でエラーTS2304が発生する:「必須」という名前が見つかりません で概説されているように)ノードの型定義がインストールされていないことです。
予測された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" ]
...
私が何かを逃したならば、コメントを書き留めてください、そして私は私の答えを編集します。
最後に解決策を見つけました。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の型に "node"を追加するだけでした。サーバーを保存して再起動します。
{
"compilerOptions": {
..
"types": [
"node"
]
}
..
}
奇妙なことの1つは、この問題がrequire()を見つけることができないということです。tsノードで励起しても発生しません。
私は同じ問題に直面していました、私は加えていました
"types": ["node"]
ルートフォルダの tsconfig.json へ。
tsconfig.app.json / src フォルダがもう1つあり、これを追加することでこれを解決しました。
"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"
]
}
追加した
"types": [
"node"
]
私の tsconfig ファイルとそれは私のために働きました tsconfig.json fileはこんな感じです
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"baseUrl": "./",
"module": "es2015",
"types": [
"node",
"underscore"
]
},
私は自分のプロジェクトを再構築するためにtsconfig.json
ファイルを新しいフォルダーに移動しました。
そのため、tsconfig.jsonのtypeRoots
プロパティ内のnode_modules/@ typesフォルダへのパスを解決できませんでした
だからパスをから更新してください
"typeRoots": [
"../node_modules/@types"
]
に
"typeRoots": [
"../../node_modules/@types"
]
Node_modulesへのパスがtsconfig.jsonの新しい場所から確実に解決されるようにするため
エラーを与えるファイルの先頭に次の行を追加します。
declare var require: any