Angular4'e yükselttikten sonra 'gerekli' adı bulunamıyor


120

Angular projemde Chart.js kullanmak istiyorum. Önceki Angular2 sürümlerinde, aşağıdakilere sahip bir 'chart.loader.ts' kullanarak bunu iyi yapıyordum:

export const { Chart } = require('chart.js');

Sonra bileşen kodunda sadece

import { Chart } from './chart.loader';

Ama cli 1.0.0 ve Angular 4'e yükselttikten sonra, "'Require' adı bulunamıyor" hatası alıyorum.

Hatayı yeniden oluşturmak için:

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" dosyamda,

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

Ve 'node_modules/@types/node/index.d.ts' içinde:

declare var require: NodeRequire;

Yani kafam karıştı.

BTW, sürekli şu uyarıyla karşılaşıyorum:

[tslint] The selector of the component "OverviewComponent" should have prefix "app"(component-selector)

".Angular-cli.json" da "prefix": "" ayarlamış olsam da. Bunun nedeni, 'angular-cli.json' yerine '.angular-cli.json' olarak değişmesi olabilir mi?


Sorun tsconfig.json dosyanızdadır.
Çözüme

@IndyWill Teşekkürler, aslında src / tsconfig.app.json içinde olmalı. Bunu bir cevap olarak yazabilir misin?
Thomas Wang

Elektron + açısal 2/4 için bkz .: stackoverflow.com/a/47364843/5248229
mihaa123

Yanıtlar:


232

Sorun ( typecript hatası TS2304 alırken ana hatlarıyla belirtildiği gibi : 'gerekli' adı bulunamıyor ), düğüm için tür tanımlarının kurulu olmamasıdır.

Öngörülen bir oluşumla with @angular/cli 1.x, belirli adımlar şöyle olmalıdır:

1. Adım :

@types/nodeAşağıdakilerden biriyle yükleyin :

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

Adım 2 : src / tsconfig.app.json dosyanızı düzenleyin ve "types": []zaten orada olması gereken boş yerine aşağıdakileri ekleyin :

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

Bir şeyi kaçırdıysam, bir yorum yazın ve cevabımı düzenleyeceğim.


11
benim için işe yaramadı ... başka bir şey yüklemem gerekiyor mu?

1
Ayrıca benim için işe yaramıyor. Ayrıntılar burada: stackoverflow.com/questions/44421367/types-not-found
user3471528

49
Not: Klasör ekleme tsconfig.app.jsonaltında değiştirmeniz gerekiyor, tsconfig kökünde değilsrc"types": ["node"]
BrunoLM

11
Benim için de işe yaramadı. sadece eklemeyi öneren başka bir cevap declare var require: any;şaşırtıcı bir şekilde yardımcı oldu.
Paritosh

2. adımı kaçırdım. Teşekkürler !!
Robbie Smith

25

Sonunda bunun için bir çözüm buldum, Uygulama modülü dosyamı kontrol edin:

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;Yukarıdaki kodda dikkat edin .


1
Polyfills.ts dosyasında bu sorunu yaşadım, ancak sizin "declare var require: any;" onu düzeltti. teşekkürler
Andre

18

Angular 7+ ile çalışacak


Ben de aynı sorunla karşı karşıyaydım, ekliyordum

"types": ["node"]

için tsconfig.json kök klasörünün.

Src klasörü altında bir tane daha tsconfig.app.json vardı ve bunu ekleyerek çözdüm

"types": ["node"]

için tsconfig.app.json dosya undercompilerOptions

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

14

Bana gelince, VSCode ve Angular 5 kullanarak, tsconfig.app.json'daki türlere yalnızca "düğüm" eklemek yeterliydi. Kaydedin ve sunucuyu yeniden başlatın .

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

İlginç bir şey, bu sorunun "gerekli bulamamasıdır (", ts-node ile excuting yapıldığında olmaz


1
Benim için Angular 6'da bir cazibe gibi çalıştı.
Pic Mickael

Bu çözüm benim için bir Angular 6 kitaplığında çalıştı. Ben eklemek için gerekli "types": [ "node" ],etmek tsconfig.lib.jsonolsa.
Gus

VE SUNUCUYU YENİDEN BAŞLATIN. Tanrım, başından beri buydu. Açısal 9 üzerinde çalışıyor. 👍
Anders8

13

Hala cevabından emin değilim, ancak olası bir çözüm

import * as Chart from 'chart.js';

3

ekledim

"types": [ 
   "node"
]

tsconfig dosyamda ve benim için çalıştı tsconfig.json dosyası şuna benziyor

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

Bu kod soruyu yanıtlasa da, birkaç açıklayıcı cümle eklemeyi düşünebilirsiniz çünkü bu, diğer kullanıcılar için yanıtınızın değerini artırır.
MBT

1

Hatayı veren dosyanın üstüne aşağıdaki satırı ekleyin:

declare var require: any

0

tsconfig.jsonProjemi yeniden yapılandırmak için dosyayı yeni bir klasöre taşıdım .

Dolayısıyla typeRoots, tsconfig.json özelliği içindeki node_modules / @ types klasörüne giden yolu çözemedi .

Bu nedenle, yolu

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

için

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

Yalnızca node_modules yolunun tsconfig.json dosyasının yeni konumundan çözüldüğünden emin olmak için

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.