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

120

Я хочу использовать Chart.js в моем проекте Angular. В предыдущих версиях Angular2 я хорошо справлялся с этим, используя «chart.loader.ts», который имеет:

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)

Хотя я установил «префикс»: «» в моем '.angular-cli.json'. Могло ли это из-за перехода с angular-cli.json на .angular-cli.json причина?

Томас Ван
источник
Проблема в вашем файле tsconfig.json. См. Решение здесь: stackoverflow.com/questions/31173738/…
IndyWill
@IndyWill Спасибо, на самом деле он должен быть в src / tsconfig.app.json. Вы можете написать это в качестве ответа?
Thomas Wang
Для электронов + угловых 2/4 см .: stackoverflow.com/a/47364843/5248229
mihaa123

Ответы:

232

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

В случае спроектированной генерации with @angular/cli 1.xконкретные шаги должны быть следующими:

Шаг 1 :

Установите @types/nodeлюбое из следующих средств:

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

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

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

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

IndyWill
источник
11
ну, у меня не сработало ... мне нужно установить что-то еще?
1
Также для меня это не работает. Подробности здесь: stackoverflow.com/questions/44421367/types-not-found
user3471528 08
49
Примечание: вы должны изменить tsconfig.app.jsonпри srcдобавлении папки "types": ["node"], ее нет в корневом tsconfig
BrunoLM
11
У меня тоже не получилось. другой ответ, предлагающий просто добавить, на declare var require: any;удивление помог.
Паритош
Я пропустил шаг 2. Спасибо !!
Робби Смит
25

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

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;на приведенный выше код.

GsMalhotra
источник
1
У меня была эта проблема в файле polyfills.ts, но ваш "declare var require: any;" починил это. спасибо
Андре
18

Будет работать в Angular 7+


Я столкнулся с той же проблемой, я добавлял

"types": ["node"]

в tsconfig.json корневой папки.

Был еще один tsconfig.app.json под Src папки , и я получил решил эту проблему путем добавления

"types": ["node"]

в файл tsconfig.app.json вcompilerOptions

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/app",
    "types": ["node"]  ----------------------< added node to the array
  },
  "exclude": [
    "test.ts",
    "**/*.spec.ts"
  ]
}
Сунил Гарг
источник
14

Как по мне, при использовании VSCode и Angular 5 нужно было только добавить «узел» к типам в tsconfig.app.json. Сохраните и перезапустите сервер.

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

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

Валь Мартинес
источник
1
В Angular 6 у меня все получилось отлично.
Pic Mickael
Это решение сработало для меня в библиотеке Angular 6. Мне нужно было добавить "types": [ "node" ],к этому tsconfig.lib.json.
Gus
И ПЕРЕЗАПУСТИТЕ СЕРВЕР. Боже мой, это было все время. Работаем над Angular 9. 👍
Anders8
13

Все еще не уверен в ответе, но возможное решение:

import * as Chart from 'chart.js';
Томас Ван
источник
3

я добавил

"types": [ 
   "node"
]

в моем файле tsconfig, и он работал у меня, файл tsconfig.json выглядит как

  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/app",
    "baseUrl": "./",
    "module": "es2015",
    "types": [ 
      "node",
      "underscore"
    ]
  },  
Низам Хан
источник
Хотя этот код может ответить на вопрос, вы все же можете рассмотреть возможность добавления нескольких пояснительных предложений, поскольку это увеличивает ценность вашего ответа для других пользователей.
ОБТ
1

Добавьте в верхнюю часть файла следующую строку, которая сообщает об ошибке:

declare var require: any
Вардан Надкарни
источник
0

Я переместил tsconfig.jsonфайл в новую папку, чтобы реструктурировать свой проект.

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

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

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

в

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

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

Махеш
источник