Impossibile trovare il nome "require" dopo l'aggiornamento ad Angular4


120

Voglio usare Chart.js all'interno del mio progetto Angular. Nelle precedenti versioni di Angular2, l'ho fatto bene usando un 'chart.loader.ts' che ha:

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

Quindi nel codice del componente ho appena

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

Ma dopo l'aggiornamento a cli 1.0.0 e Angular 4, ottengo l'errore: "Impossibile trovare il nome 'require'".

Per riprodurre l'errore:

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

Nel mio "tsconfig.json", ho

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

E in 'node_modules/@types/node/index.d.ts' c'è:

declare var require: NodeRequire;

Quindi sono confuso.

A proposito, incontro costantemente l'avvertimento:

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

Anche se ho impostato il "prefisso": "" nel mio '.angular-cli.json'. Potrebbe essere perché il passaggio da "angular-cli.json" a ".angular-cli.json" è la causa?


Il problema è nel file tsconfig.json. Vedere la soluzione qui: stackoverflow.com/questions/31173738/...
IndyWill

@IndyWill Thanks, in realtà dovrebbe essere in src / tsconfig.app.json. Puoi scrivere questo come risposta?
Thomas Wang

Per elettrone + angolare 2/4 vedere: stackoverflow.com/a/47364843/5248229
mihaa123

Risposte:


232

Il problema (come descritto nel dattiloscritto che ottiene l'errore TS2304: impossibile trovare il nome "require" ) è che le definizioni del tipo per il nodo non sono installate.

Con un genned proiettato with @angular/cli 1.x, i passaggi specifici dovrebbero essere:

Passaggio 1 :

Installa @types/nodecon uno dei seguenti:

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

Passaggio 2 : modifica il file src / tsconfig.app.json e aggiungi quanto segue al posto del vuoto "types": [], che dovrebbe già essere lì:

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

Se mi sono perso qualcosa, annota un commento e modifico la mia risposta.


11
bene non ha funzionato per me ... devo installare qualcos'altro?

1
Anche per me non funziona. Dettagli qui: stackoverflow.com/questions/44421367/types-not-found
user3471528

49
Nota: è necessario modificare tsconfig.app.jsonnella srccartella l'aggiunta "types": ["node"], non è nella radice tsconfig
BrunoLM

11
Non ha funzionato neanche per me. un'altra risposta che suggerisce solo di aggiungere ha declare var require: any;aiutato sorprendentemente.
Paritosh

Ho saltato il passaggio 2. Grazie !!
Robbie Smith

25

Finalmente ho la soluzione per questo, controlla il mio file del modulo dell'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 { }

Avviso declare var require: any;nel codice sopra.


1
Ho riscontrato questo problema nel file polyfills.ts, ma il tuo "declare var require: any;" aggiustato. grazie
Andre

18

Funzionerà in Angular 7+


Stavo affrontando lo stesso problema, stavo aggiungendo

"types": ["node"]

a tsconfig.json della cartella principale.

C'era un altro tsconfig.app.json nella cartella src e ho risolto questo problema aggiungendo

"types": ["node"]

al file tsconfig.app.json incompilerOptions

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

14

Per quanto mi riguarda, usando VSCode e Angular 5, dovevo solo aggiungere "node" ai tipi in tsconfig.app.json. Salva e riavvia il server.

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

Una cosa curiosa è che questo problema "non può trovare require (", non si verifica quando si eccita con ts-node


1
Ha funzionato come un incantesimo in Angular 6 per me.
Pic Mickael

Questa soluzione ha funzionato per me in una libreria Angular 6. Avevo bisogno di aggiungere "types": [ "node" ],il tsconfig.lib.jsonperò.
Gus

E RIAVVIARE IL SERVER. Santo cielo, è sempre stato questo. Lavorando su Angular 9. 👍
Anders8

13

Non sono ancora sicuro della risposta, ma una possibile soluzione alternativa è

import * as Chart from 'chart.js';

3

Ho aggiunto

"types": [ 
   "node"
]

nel mio file tsconfig e ha funzionato per me il file tsconfig.json assomiglia

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

Sebbene questo codice possa rispondere alla domanda, potresti comunque considerare l'aggiunta di alcune frasi esplicative poiché ciò aumenta il valore della tua risposta per gli altri utenti.
MBT

1

Aggiungi la seguente riga all'inizio del file che dà l'errore:

declare var require: any

0

Ho spostato il tsconfig.jsonfile in una nuova cartella per ristrutturare il mio progetto.

Quindi non è stato possibile risolvere il percorso della cartella node_modules / @ types all'interno della typeRootsproprietà di tsconfig.json

Quindi aggiorna il percorso da

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

per

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

Per assicurarsi solo che il percorso di node_modules sia risolto dalla nuova posizione di tsconfig.json

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.