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

时间:2018-04-23 12:50:28

标签: node.js angular webpack


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

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

(A.K.A。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内容

1 个答案:

答案 0 :(得分:3)

这可能是因为您直接在代码中的某个地方引用了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 EVERYWHERE。从那一刻起,当我必须使用它时,我总能找到另一种方法来做同样的事情。

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

来自提出问题的人编辑

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