Не удается найти имя 'require' после обновления до Angular4
Я хочу использовать 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"?
6 ответов
Проблема (как описано в сообщении о получении машинного сообщения TS2304: не удается найти имя 'require') заключается в том, что определения типа для узла не установлены.
Для проекции, созданной с помощью @angular/cli 1.x, следует выполнить следующие шаги:
Шаг 1: установите @types/node с одним из следующих:
- npm install --save @types/node
- yarn add @types/node
Шаг 2: - отредактируйте ваш файл src/tsconfig.app.json и добавьте следующее вместо пустого "types": []
, который уже должен быть там:
...
"types": [ "node" ],
"typeRoots": [ "../node_modules/@types" ]
...
Если я что-то пропустил, напишите комментарий, и я отредактирую свой ответ.
Я столкнулся с той же проблемой, я добавил
"types": ["node"]
в tsconfig.json корневой папки.
В папке src был еще один tsconfig.app.json, и я решил эту проблему, добавив
"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"
]
}
Наконец, я получил решение для этого, проверьте мой файл модуля приложения:
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.app.json. Сохраните и перезагрузите сервер.
{
"compilerOptions": {
..
"types": [
"node"
]
}
..
}
Любопытно, что эта проблема "не может найти require (") не возникает при исключении из ts-node
Все еще не уверен, что ответ, но возможный обходной путь
import * as Chart from 'chart.js';
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"
]
},
Добавьте в верхнюю часть файла следующую строку, которая сообщает об ошибке:
declare var require: any
Я переместил tsconfig.json
файл в новую папку, чтобы реструктурировать мой проект.
Так что не удалось определить путь к папке node_modules/@types внутри typeRoots
свойство tsconfig.json
Так что просто обновите путь от
"typeRoots": [
"../node_modules/@types"
]
в
"typeRoots": [
"../../node_modules/@types"
]
Чтобы просто убедиться, что путь к node_modules разрешен из нового местоположения tsconfig.json