Не удается найти имя 'require' после обновления до Angular4


Я хочу использовать диаграммы.js в рамках моего углового проекта. В предыдущих версиях Angular2 я делал это хорошо, используя 'chart.погрузчик.ц', у которого есть:

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

затем в коде компонента я просто

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

но после обновления до cli 1.0.0 и Angular 4, я получаю ошибку:"не могу найти имя 'require'".

чтобы воспроизвести ошибку:

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', у меня есть

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

и в 'node_modules / @types/node / index.d. ts ' есть:

declare var require: NodeRequire;

так что я в замешательстве.

кстати, я постоянно сталкиваюсь с предупреждением:

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

хотя я установил "префикс": "" в моем '.угловой-кли.json'. Может это потому, что меняется от ' angular-cli.json 'to'.угловой-кли.json ' причина?

6 82

6 ответов:

проблема (как описано в typescript получение ошибки TS2304: не удается найти имя 'require'), что определения типа узла, не установлены.

С запроектированным genned с @angular / cli 1.х, конкретные шаги должны быть:

Шаг 1: установите @types / node с любым из следующих параметров:

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

Шаг 2: - отредактировать файл src/tsconfig.приложение.JSON-файл и добавьте следующий на месте пусто "types": [], который уже должен быть там:

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

Если я что-то пропустил, запишите комментарий, и я отредактирую свой ответ.

все еще не уверен в ответе, но возможный обходной путь

import * as Chart from 'chart.js';

наконец, я получил решение для этого, проверьте мой файл модуля приложения :

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; в коде выше.

Что касается меня, используя VSCode и Angular 5, нужно было только добавить "узел" к типам в tsconfig.приложение.формат JSON. сохранить и перезагрузить сервер.

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

одна любопытная вещь, заключается в том, что эта проблема "не может найти require (" , не происходит при excuting с ts-node

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"
    ]
  },  

Я переехала в tsconfig.json файл в новую папку для реструктуризации моего проекта.

поэтому он не смог разрешить путь к папке node_modules / @types внутри typeRoots свойство tsconfig.json

так что просто обновите путь от

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

до

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

чтобы просто убедиться, что путь к node_modules разрешен из нового местоположения tsconfig.json