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


120

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'に "prefix": ""を設定しましたが。原因が「angular-cli.json」から「.angular-cli.json」に変更されたためでしょうか?


問題はtsconfig.jsonファイルにあります。ここに解決策を参照してください。stackoverflow.com/questions/31173738/...
IndyWill

@IndyWillありがとう、実際にはsrc / tsconfig.app.jsonにあるはずです。これを答えとして書いていただけますか?
Thomas Wang

:電子+角度2/4を参照してくださいstackoverflow.com/a/47364843/5248229
mihaa123

回答:


232

問題(typescriptの取得エラーTS2304で概説されているように、名前 'require'が見つかりません)は、ノードのタイプ定義がインストールされていないことです。

gennedが予測される場合with @angular/cli 1.x、具体的な手順は次のとおりです。

ステップ1

次の@types/nodeいずれかでインストールします。

- npm install --save @types/node
- yarn add @types/node -D

ステップ2src / tsconfig.app.jsonファイルを編集し、空のの代わりに次の行を追加します"types": []。これはすでに存在しているはずです。

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

何かを見逃した場合は、コメントを書き込んでください。回答を編集します。


11
うまくいきませんでした...他に何かをインストールする必要がありますか?

1
また、私にとっては機能しません。詳細はこちら:stackoverflow.com/questions/44421367/types-not-found
user3471528

49
注:追加するフォルダーのtsconfig.app.json下で変更する必要がありsrcます。"types": ["node"]ルートtsconfigにはありません
BrunoLM

11
私もうまくいきませんでした。追加することだけを提案する別の答えdeclare var require: any;は驚くほど助けられました。
パリトッシュ2018年

ステップ2を逃しました。ありがとう!!
ロビースミス

25

最後に私はこれの解決策を得ました、私の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;上記のコードに注意してください。


1
polyfills.tsファイルにこの問題がありましたが、「declare var require:any;」修正しました。ありがとう
Andre

18

Angular 7以降で動作します


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

"types": ["node"]

tsconfig.jsonルートフォルダの。

srcフォルダの下にもう1つのtsconfig.app.jsonがあり、私はこれを追加して解決しました

"types": ["node"]

tsconfig.app.jsonのファイルの下でcompilerOptions

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/app",
    "types": ["node"]  ----------------------< added node to the array
  },
  "exclude": [
    "test.ts",
    "**/*.spec.ts"
  ]
}

14

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

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

奇妙なことの1つは、この問題はts-nodeを使用して実行する場合、「要求が見つかりません(」)が発生しないことです。


1
私にとってはAngular 6の魅力のように働きました。
Pic Mickael、2018

このソリューションは、Angular 6ライブラリで私に役立ちました。私は追加する必要"types": [ "node" ],tsconfig.lib.jsonかかわらず。
Gusの

サーバーを再起動します。私の良さ、それはずっとこれでした。角度9.👍に取り組ん
Anders8


3

追加した

"types": [ 
   "node"
]

私のtsconfigファイルとその働きのためにtsconfig.jsonファイルは次のようになります

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

このコードは質問に答える可能性がありますが、他のユーザーにとっての答えの価値が高まるため、いくつかの説明文を追加することを検討する場合もあります。
MBT


0

tsconfig.jsonファイルを新しいフォルダに移動して、プロジェクトを再構築しました。

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

だからからパスを更新するだけです

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.