web-dev-qa-db-ja.com

Angular 4にアップグレードした後、 'require'という名前が見つかりません

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」に変更したのでしょうか。

96
Thomas Wang

問題は、( 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" ]
...

私が何かを逃したならば、コメントを書き留めてください、そして私は私の答えを編集します。

184
IndyWill

最後に解決策を見つけました。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;に注目してください。

20
GsMalhotra

それでも答えはわからないが、考えられる回避策は

import * as Chart from 'chart.js';
13
Thomas Wang

私にとっては、VSCodeとAngular 5を使用して、tsconfig.app.jsonの型に "node"を追加するだけでした。サーバーを保存して再起動します。

{
    "compilerOptions": {
    ..
    "types": [
      "node"
    ]
  }
  ..
}

奇妙なことの1つは、この問題がrequire()を見つけることができないということです。tsノードで励起しても発生しません。

9
Val Martinez

私は同じ問題に直面していました、私は加えていました

"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"
  ]
}
3
Sunil Garg

追加した

"types": [ 
   "node"
]

私の tsconfig ファイルとそれは私のために働きました tsconfig.json fileはこんな感じです

  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/app",
    "baseUrl": "./",
    "module": "es2015",
    "types": [ 
      "node",
      "underscore"
    ]
  },  
2
Nizam Khan

私は自分のプロジェクトを再構築するためにtsconfig.jsonファイルを新しいフォルダーに移動しました。

そのため、tsconfig.jsonのtypeRootsプロパティ内のnode_modules/@ typesフォルダへのパスを解決できませんでした

だからパスをから更新してください

"typeRoots": [
  "../node_modules/@types"
]

"typeRoots": [
  "../../node_modules/@types"
]

Node_modulesへのパスがtsconfig.jsonの新しい場所から確実に解決されるようにするため

1
Mahesh

エラーを与えるファイルの先頭に次の行を追加します。

declare var require: any
0
Vardan Nadkarni