Pregunta No se puede encontrar el nombre 'requerir' después de actualizar a Angular4


Quiero usar Chart.js dentro de mi proyecto angular. En versiones anteriores de Angular2, he estado haciendo esto bien usando un 'chart.loader.ts' que tiene:

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

Luego, en el código del componente, solo

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

Pero después de actualizar a cli 1.0.0 y Angular 4, aparece el error: "No se puede encontrar el nombre 'require'".

Para reproducir el error:

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

En mi 'tsconfig.json', tengo

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

Y en 'node_modules/@types/node/index.d.ts' hay:

declare var require: NodeRequire;

Entonces estoy confundido

Por cierto, constantemente encuentro la advertencia:

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

Aunque he configurado el "prefijo": "" en mi '.angular-cli.json'. ¿Podría porque cambiar de 'angular-cli.json' a '.angular-cli.json' la causa?


75
2018-03-29 21:02


origen


Respuestas:


El problema (como se describe en mecanografía que consigue el error TS2304: no puede encontrar el nombre 'requiere') es que las definiciones de tipo para el nodo no están instaladas.

Con un genned proyectado con @ angular / cli 1.x, los pasos específicos deberían ser:

Paso 1: instalar @ tipos / nodo con cualquiera de los siguientes:

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

Paso 2:     - edite su archivo src / tsconfig.app.json y agregue lo siguiente en lugar del archivo vacío "types": [], que ya debería estar allí:

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

Si me he perdido algo, escriba un comentario y editare mi respuesta.


135
2018-03-30 23:08



Todavía no estoy seguro de la respuesta, pero una posible solución es

import * as Chart from 'chart.js';

12
2018-03-30 15:59



Finalmente obtuve una solución para esto, verifique mi archivo del módulo de la aplicación:

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

darse cuenta declare var require: any; en el código anterior.


10
2018-05-18 11:07



En cuanto a mí, al usar VSCode y Angular 5, solo tuve que agregar "node" a los tipos en tsconfig.app.json. Guardar y reiniciar el servidor.

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

Una cosa curiosa es que este problema "no puede encontrar require (", no ocurre cuando se excuta con el nodo-ts


4
2018-04-06 16:11



Moví el tsconfig.json archivo en una nueva carpeta para reestructurar mi proyecto.

Por lo tanto, no fue posible resolver la ruta a la carpeta node_modules / @ types dentro de typeRoots propiedad de tsconfig.json

Así que simplemente actualice la ruta desde

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

a

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

Para asegurarse de que la ruta a node_modules se resuelva desde la nueva ubicación de tsconfig.json


1
2018-01-23 22:46



I added 
   "types": [ 
      "node"
    ]
in my ts.config file and its worked for me 
ts.config file look like


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


1
2018-05-22 11:05