一尘不染

“未定义窗口中的错误” webpack webpack上的一般错误--mode = production --env.prod

node.js

我正在尝试部署我的第一个有角度的应用程序,但是在执行部署过程中,在命令中间:

node node_modules/webpack/bin/webpack.js --mode=production --env.prod

(又名webpack --mode=production --config webpack.config.js --env.prod

我收到一个一般性错误,该错误不会为我提供以下信息:

Hash: 7b126cdcbdda85d6b0f304152e501136ec85ed58
Version: webpack 4.6.0
Child
    Hash: 7b126cdcbdda85d6b0f3
    Time: 13298ms
    Built at: 2018-04-23 12:27:51
     1 asset
    Entrypoint main-client = main-client.js

    ERROR in window is not defined
Child
    Hash: 04152e501136ec85ed58
    Time: 13281ms
    Built at: 2018-04-23 12:27:51
     1 asset
    Entrypoint main-server = main-server.js

    ERROR in window is not defined

主服务器和主客户端都是webpack生成的文件,在我的代码中“窗口”的唯一用法是执行window.history.back()命令,但即使对其进行注释,仍然会出现错误。

有人知道如何解决吗?

我的webpack版本是4.6.0 我的webpack.config.js内容如下:
||
===> 更新 -不必要的webpack.config.js内容与问题本身无关


阅读 344

收藏
2020-07-07

共1个答案

一尘不染

这可能是原因,因为您window直接在代码中的某处引用。这不是最佳实践!有时,(服务器端)未定义窗口对象并导致此问题。如果第三方库使用该库,则相同。

因此,请首先检查您的代码,找到直接在其中使用window的位置,然后将PLATFORMID包裹在该示例中:

 import { PLATFORM_ID } from '@angular/core';

 import { isPlatformBrowser, isPlatformServer } from '@angular/common';



 constructor(@Inject(PLATFORM_ID) private platformId: Object) { ... }



 ngOnInit() {

   if (isPlatformBrowser(this.platformId)) {

      // Client only code.

      ...

   }

   if (isPlatformServer(this.platformId)) {

     // Server only code.

     ...

   }

 }

或者,如果找不到,则可能是库仍在使用它。在github上检查此问题,它将比我更好地解释问题:

https://github.com/webpack/react-
starter/issues/37

希望这对您有帮助=)

PS:当我必须实现服务器端渲染时,同样的问题。我window在代码中使用了“
随处可见”。从那一刻起,当我不得不使用它时,我总是会找到另一种方法来做同样的事情。

您也可以尝试将target: "web"webpack.config.js 放入其中


提出问题的人的编辑

另请参见github上的此问题,它提供了此问题的解决方案:https
:
//github.com/webpack/webpack/issues/7112

2020-07-07