更新Webpack并Angular收到错误后,找不到名称'setImmediate'

时间:2018-12-04 23:07:21

标签: angular typescript webpack

我已经使用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();
                });
            });
        });
    });

我正在解决此问题一段时间,但没有成功。任何想法>

3 个答案:

答案 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”命令。它应该可以解决问题。