Je veux utiliser Chart.js dans mon projet Angular . Dans les versions précédentes de Angular2, je le faisais bien en utilisant un 'chart.loader.ts' qui a
export const { Chart } = require('chart.js');
Ensuite, dans le code composant je viens
import { Chart } from './chart.loader';
Mais après la mise à niveau vers cli 1.0.0 et Angular 4, le message d'erreur suivant s'affiche: "Impossible de trouver le nom 'require'".
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 'node_modules/@types/node/index.d.ts', il y a:
declare var require: NodeRequire;
Donc je suis confus.
BTW, je rencontre constamment l'avertissement:
[tslint] The selector of the component "OverviewComponent" should have prefix "app"(component-selector)
Bien que j'ai défini le "préfixe": "" dans mon '.angular-cli.json'. Pourrait-il changer la cause de «angular-cli.json» en «.angular-cli.json»?
Le problème (comme indiqué dans TypeScript rencontre l'erreur TS2304: impossible de trouver le nom 'require' ), c'est que les définitions de type du noeud ne sont pas installées.
Avec un with @angular/cli 1.x
prévu, les étapes spécifiques devraient être:
Étape 1:
Installez @types/node
avec l’un des éléments suivants:
- npm install --save @types/node
- yarn add @types/node -D
Étape 2: Modifiez votre fichier src/tsconfig.app.json et ajoutez ce qui suit à la place du "types": []
vide, qui devrait déjà s'y trouver:
...
"types": [ "node" ],
"typeRoots": [ "../node_modules/@types" ]
...
Si j'ai oublié quelque chose, notez un commentaire et je modifierai ma réponse.
Enfin, j'ai 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 { }
Notez declare var require: any;
dans le code ci-dessus.
Toujours pas sûr de la réponse, mais une solution de contournement possible est
import * as Chart from 'chart.js';
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
J'ai ajouté
"types": [
"node"
]
dans mon tsconfig fichier et ça a fonctionné pour moi tsconfig.json file ressemble à
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"baseUrl": "./",
"module": "es2015",
"types": [
"node",
"underscore"
]
},
J'ai déplacé le fichier tsconfig.json
dans un nouveau dossier pour restructurer mon projet.
Il n'a donc pas été en mesure de résoudre le chemin d'accès au dossier node_modules/@ types dans la propriété typeRoots
de tsconfig.json
Il suffit donc de mettre à jour le chemin depuis
"typeRoots": [
"../node_modules/@types"
]
à
"typeRoots": [
"../../node_modules/@types"
]
Pour s'assurer que le chemin d'accès à node_modules est résolu à partir du nouvel emplacement du fichier tsconfig.json
Ajoutez la ligne suivante en haut du fichier qui donne l'erreur:
declare var require: any
Je faisais face au même problème, j'ajoutais
"types": ["node"]
vers tsconfig.json du dossier racine.
Il y avait un autre dossier tsconfig.app.json sous src et j'ai résolu le problème en ajoutant
"types": ["node"]
vers tsconfig.app.json fichier sous compilerOptions
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"types": ["node"] ----------------------< added node to the array
},
"exclude": [
"test.ts",
"**/*.spec.ts"
]
}