我正在尝试部署我的第一个角度应用程序但在执行部署期间,在命令的中间:
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内容
答案 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