Cannot find name 'require' after upgrading to Angular4
Solution 1
The problem (as outlined in typescript getting error TS2304: cannot find name ' require') is that the type definitions for node are not installed.
With a projected genned with @angular/cli 1.x
, the specific steps should be:
Step 1:
Install @types/node
with either of the following:
- npm install --save @types/node
- yarn add @types/node -D
Step 2:
Edit your src/tsconfig.app.json file and add the following in place of the empty "types": []
, which should already be there:
...
"types": [ "node" ],
"typeRoots": [ "../node_modules/@types" ]
...
If I've missed anything, jot a comment and I'll edit my answer.
Solution 2
Will work in Angular 7+
I was facing the same issue, I was adding
"types": ["node"]
to tsconfig.json of root folder.
There was one more tsconfig.app.json under src folder and I got solved this by adding
"types": ["node"]
to tsconfig.app.json file under compilerOptions
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"types": ["node"] ----------------------< added node to the array
},
"exclude": [
"test.ts",
"**/*.spec.ts"
]
}
Solution 3
Finally I got solution for this, check my App module file :
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 { }
Notice declare var require: any;
in the above code.
Solution 4
Still not sure the answer, but a possible workaround is
import * as Chart from 'chart.js';
Solution 5
As for me, using VSCode and Angular 5, only had to add "node" to types in tsconfig.app.json. Save, and restart the server.
{
"compilerOptions": {
..
"types": [
"node"
]
}
..
}
One curious thing, is that this problem "cannot find require (", does not happen when excuting with ts-node
Thomas Wang
Updated on June 21, 2020Comments
-
Thomas Wang almost 4 years
I want to use Chart.js within my Angular project. In previous Angular2 versions, I have been doing this well by using a 'chart.loader.ts' which has:
export const { Chart } = require('chart.js');
Then in the component code I just
import { Chart } from './chart.loader';
But after upgrading to cli 1.0.0 and Angular 4, I get the error: "Cannot find name 'require'".
To reproduce the 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
In my 'tsconfig.json', I have
"typeRoots": [ "node_modules/@types" ],
And in 'node_modules/@types/node/index.d.ts' there is:
declare var require: NodeRequire;
So I'm confused.
BTW, I constantly encounter the warning:
[tslint] The selector of the component "OverviewComponent" should have prefix "app"(component-selector)
Though I have set the "prefix": "" in my '.angular-cli.json'. Could it because changing from 'angular-cli.json' to '.angular-cli.json' the cause?
-
Admin about 7 yearswell didnt work for me... do i have to install something else?
-
user3471528 almost 7 yearsAlso for me it doesn't work. Details here: stackoverflow.com/questions/44421367/types-not-found
-
BrunoLM almost 7 yearsNote: You have to change
tsconfig.app.json
undersrc
folder adding"types": ["node"]
, it is not in the root tsconfig -
Andre over 6 yearsI had this issue in the polyfills.ts file, but your "declare var require: any;" fixed it. thanks
-
Paritosh about 6 yearsDidn't work for me either. another answer suggesting just to add
declare var require: any;
helped surprisingly. -
MBT almost 6 yearsWhile this code might answer the question you still might consider adding a few explanatory sentences as this increases the value of your answer for other users.
-
Robbie Smith almost 6 yearsI missed step 2. Thanks!!
-
Artanis Zeratul almost 6 yearsit worked for me but I have to remove "typeRoots": [ "../node_modules/@types" ], I am using Angular 5.
-
Pic Mickael over 5 yearsWorked like a charm in Angular 6 for me.
-
Gus over 5 yearsThis solution worked for me in an Angular 6 library. I needed to add the
"types": [ "node" ],
to thetsconfig.lib.json
though. -
Kon about 5 years@BrunoLM you are a lifesaver!
-
httpete over 4 yearsin angular 8 I just added "types": [ "node" ] to tsconfig.app.json and it worked.
-
Anders8 almost 4 yearsAND RESTART SERVER. My goodness, it was this all along. Working on Angular 9. 👍
-
Nasenbaer over 3 yearsIt did not work for me at step
- yarn add @types/node -D
becauseyarn
is not a known command. Windows 10, Angular 10. -
Vinicius over 3 yearsI needed to restart the
ng server
to have this working -
Buchi about 2 yearssimple and easy, solved my problem angular 12