我已经使用Visual Studio Angular Template
创建了项目。我最近将Angular
从6升级到7,并将Typescript
更新为 3.1.6 。还将Webpack
从3.8.1升级到 3.12.0 。
现在,当我尝试使用webpack命令进行编译时,出现以下错误
ERROR in [at-loader] ./ClientApp/boot.server.ts:30:17
TS2304: Cannot find name 'setImmediate'.
此错误是从boot.server.ts代码引发的
return platformDynamicServer(providers).bootstrapModule(AppModule).then(moduleRef => {
const appRef: ApplicationRef = moduleRef.injector.get(ApplicationRef);
const state = moduleRef.injector.get(PlatformState);
const zone: NgZone = moduleRef.injector.get(NgZone);
return new Promise<RenderResult>((resolve, reject) => {
zone.onError.subscribe((errorInfo: any) => reject(errorInfo));
appRef.isStable.pipe(first(isStable => isStable)).subscribe(() => {
// Because 'onStable' fires before 'onError', we have to delay slightly before
// completing the request in case there's an error to report
setImmediate(() => {
resolve({
html: state.renderToString()
});
moduleRef.destroy();
});
});
});
});
我正在解决此问题一段时间,但没有成功。任何想法>
答案 0 :(得分:1)
我遇到了同样的问题,但是我想我知道了问题所在。我必须为节点安装键入声明文件。
在package.json中添加
"@types/node": "10.12.18",
还要确保您的tsconfig.json正确包含类型文件。如果您明确地手动包括类型文件,则可以在“类型”数组中添加“节点”:
"types": ["node"]
或使用“ typeRoots”属性:
"typeRoots": [ "node_modules/@types" ]
我更喜欢第二个选项,因为这样,您安装的所有@type软件包都将自动被IDE识别。
这个问题是针对类似的问题,那里的答案比我做的还要详细:typescript getting error TS2304: cannot find name ' require'
答案 1 :(得分:0)
您可以在setImmediate之前使用(窗口)
return new Promise<RenderResult>((resolve, reject) => {
zone.onError.subscribe((errorInfo: any) => reject(errorInfo));
appRef.isStable.first(isStable => isStable).subscribe(() => {
// Because 'onStable' fires before 'onError', we have to delay slightly before
// completing the request in case there's an error to report
(<any>window).setImmediate(() => {
resolve({
html: state.renderToString()
});
moduleRef.destroy();
});
});
});
答案 2 :(得分:-1)
对不起,我不好。从cmd或powershell运行“ npm install”命令。它应该可以解决问题。