130 votes

Impossible de trouver le nom 'requis' après la mise à niveau vers Angular4

Je veux utiliser Chart.js dans mon Angulaire du projet. Dans les précédentes Angular2 versions, j'ai été de le faire à l'aide d'un tableau.loader.ts":

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

Ensuite dans le code du composant je viens de

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

Mais après la mise à jour de la cli 1.0.0 et Angulaire 4, j'obtiens l'erreur: "Impossible de trouver le nom de 'besoin'".

Pour reproduire l'erreur:

ng new newapp
cd newapp
npm install chart.js --save
echo "export const { Chart } = require('chart.js');" >> src/app/chart.loader.ts
ng serve

Dans mon " tsconfig.json", j'ai

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

Et dans "l'node_modules/@types/node/index.d.ts" il y a:

declare var require: NodeRequire;

Donc, je suis confus.

BTW, je ne cesse de rencontrer l'avertissement:

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

Si j'ai mis le "préfixe": "" dans mon".angulaire de la cli.json". Pourrait-il raison de changer de " angulaires-cli.json' pour '.angulaire de la cli.json " la cause?

248voto

IndyWill Points 2077

Le problème (comme indiqué dans le tapuscrit d'erreur TS2304: impossible de trouver le nom de 'besoin'), c'est que les définitions de type de nœud ne sont pas installés.

Avec une prévision de genned with @angular/cli 1.x, les mesures spécifiques devraient être:

Étape 1:

Installez @types/node avec l'une des opérations suivantes:

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

Étape 2: Modifier vos src/tsconfig.app.json fichier et ajoutez le code suivant à la place du vide "types": [], ce qui devrait déjà être là:

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

Si j'ai oublié quelque chose, faites un commentaire et je vais modifier ma réponse.

34voto

Sunil Garg Points 4004

Je faisais face au même problème, j'ajoutais

 "types": ["node"]
 

tsconfig.json du dossier racine.

Il y avait un autre tsconfig.app.json dans le dossier src et j'ai résolu ceci en ajoutant

 "types": ["node"]
 

dans le fichier tsconfig.app.json sous compilerOptions

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

25voto

GsMalhotra Points 989

Enfin, j'ai trouvé la solution, consultez mon fichier de module d'application:

 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 { }
 

Avis declare var require: any; dans le code ci-dessus.

15voto

Thomas Wang Points 816

Toujours pas sûr de la réponse, mais une solution de contournement possible est

 import * as Chart from 'chart.js';
 

15voto

Val Martinez Points 389

Quant à moi, en utilisant VSCode et Angular 5, il suffisait d’ajouter "noeud" aux types dans tsconfig.app.json. Enregistrez et redémarrez le serveur.

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

Une chose curieuse, est que ce problème "ne peut pas trouver besoin (", ne se produit pas lors de l'exécution avec ts-node

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X