Không thể tìm thấy tên 'yêu cầu' sau khi nâng cấp lên Angular4


120

Tôi muốn sử dụng Chart.js trong dự án Angular của mình. Trong các phiên bản Angular2 trước, tôi đã làm tốt điều này bằng cách sử dụng 'chart.loader.ts' có:

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

Sau đó, trong mã thành phần tôi chỉ

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

Nhưng sau khi nâng cấp lên cli 1.0.0 và Angular 4, tôi gặp lỗi: "Không thể tìm thấy tên 'yêu cầu'".

Để tạo lại lỗi:

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

Trong 'tsconfig.json' của tôi, tôi có

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

Và trong 'node_modules/@types/node/index.d.ts' có:

declare var require: NodeRequire;

Vì vậy, tôi bối rối.

BTW, tôi liên tục gặp cảnh báo:

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

Mặc dù tôi đã đặt "tiền tố": "" trong '.angular-cli.json' của mình. Có thể do nguyên nhân thay đổi từ 'angle-cli.json' thành '.angular-cli.json'?


Vấn đề là ở tệp tsconfig.json của bạn. Xem giải pháp tại đây: stackoverflow.com/questions/31173738/…
IndyWill vào

@IndyWill Cảm ơn, thực ra nó phải ở trong src / tsconfig.app.json. Bạn có thể viết điều này như một câu trả lời?
Thomas Wang,

Ví điện tử + góc 2/4 xem: stackoverflow.com/a/47364843/5248229
mihaa123

Câu trả lời:


232

Vấn đề (như được nêu trong bản định kiểu gặp lỗi TS2304: không thể tìm thấy tên 'request' ) là các định nghĩa kiểu cho nút không được cài đặt.

Với một dự kiến ​​được tạo ra with @angular/cli 1.x, các bước cụ thể phải là:

Bước 1 :

Cài đặt @types/nodebằng một trong các cách sau:

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

Bước 2 : Chỉnh sửa tệp src / tsconfig.app.json của bạn và thêm tệp sau vào vị trí trống "types": [], tệp này đã có ở đó:

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

Nếu tôi bỏ lỡ bất cứ điều gì, hãy ghi lại một bình luận và tôi sẽ chỉnh sửa câu trả lời của mình.


11
cũng không hoạt động cho tôi ... tôi có phải cài đặt thứ gì khác không?

1
Ngoài ra đối với tôi nó không hoạt động. Thông tin chi tiết tại đây: stackoverflow.com/questions/44421367/types-not-found
user3471528 Ngày

49
Lưu ý: Bạn cần phải thay đổi tsconfig.app.jsondưới srcthư mục thêm "types": ["node"], nó không phải là trong tsconfig gốc
BrunoLM

11
Cũng không hiệu quả với tôi. một câu trả lời khác gợi ý chỉ để thêm declare var require: any;đã giúp một cách đáng ngạc nhiên.
Paritosh

Tôi đã bỏ lỡ bước 2. Cảm ơn !!
Robbie Smith

25

Cuối cùng, tôi đã có giải pháp cho vấn đề này, hãy kiểm tra tệp mô-đun Ứng dụng của tôi:

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

Chú ý declare var require: any;trong đoạn mã trên.


1
Tôi gặp sự cố này trong tệp polyfills.ts, nhưng "khai báo var request: any;" của bạn đã sửa nó. cảm ơn
Andre

18

Sẽ hoạt động trong Angular 7+


Tôi đang đối mặt với cùng một vấn đề, tôi đã thêm

"types": ["node"]

tới tsconfig.json của thư mục gốc.

Có thêm một tsconfig.app.json trong thư mục src và tôi đã giải quyết vấn đề này bằng cách thêm

"types": ["node"]

đến tệp tsconfig.app.json dướicompilerOptions

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

14

Đối với tôi, sử dụng VSCode và Angular 5, chỉ phải thêm "nút" vào các loại trong tsconfig.app.json. Lưu và khởi động lại máy chủ.

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

Một điều gây tò mò là vấn đề này "không thể tìm thấy request (", không xảy ra khi thực hiện với ts-node


1
Làm việc như một sự quyến rũ trong Angular 6 đối với tôi.
Pic Mickael

Giải pháp này đã làm việc cho tôi trong thư viện Angular 6. Tôi cần thêm cái "types": [ "node" ],vào tsconfig.lib.jsonmặc dù.
Gus

VÀ PHỤC HỒI MÁY CHỦ. Chúa ơi, tất cả đều như vậy. Làm việc trên Angular 9. 👍
Anders 8

13

Vẫn không chắc chắn câu trả lời, nhưng một giải pháp khả thi là

import * as Chart from 'chart.js';

3

Tôi đã thêm

"types": [ 
   "node"
]

trong tôi tsconfig tập tin và nó làm việc cho tôi tsconfig.json tập tin trông giống như

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

Mặc dù mã này có thể trả lời câu hỏi nhưng bạn vẫn có thể cân nhắc thêm một vài câu giải thích vì điều này làm tăng giá trị câu trả lời của bạn cho những người dùng khác.
MBT


0

Tôi đã chuyển tsconfig.jsontệp vào một thư mục mới để cơ cấu lại dự án của mình.

Vì vậy, nó không thể giải quyết đường dẫn đến thư mục node_modules / @ styles bên trong typeRootsthuộc tính của tsconfig.json

Vì vậy, chỉ cần cập nhật đường dẫn từ

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

đến

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

Để đảm bảo rằng đường dẫn đến node_modules được giải quyết từ vị trí mới của tsconfig.json

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.