当前位置: 首页 > 面试题库 >

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

张淳
2023-03-14
问题内容

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

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内容与问题本身无关


问题答案:

这可能是原因,因为您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



 类似资料:
  • 问题内容: 我知道Node.js中不存在,但是我在客户端和服务器上都使用React和相同的代码。我用来检查是否存在的任何方法都可以使我: 未捕获ReferenceError:未定义窗口 如何解决我做不到的事实? 问题答案: Sawtaytoes知道了。我将运行您在componentDidMount()中拥有的任何代码,并将其包含在以下内容中: 如果在React渲染组件时仍未创建窗口对象,则始终可以

  • 问题内容: 我正在学习python并出现此错误。我可以找出错误在哪里什么在代码中。 , 。 当我运行程序 它输出你叫什么名字?(我输入d) 这给出了错误 这是来自Python 3的Absolute Beginners的示例代码。 问题答案: 在Python 2.x中,期望的是Python表达式,这意味着如果你键入d它,它将把它解释为名为d 的变量。如果你输入,那就可以了。 你可能真正想要的2.x是

  • 我安装了新系统(Ubuntu20.04),我安装了LAMP和克隆的Laravel项目。我创建了数据库博客,我想迁移,但我有这个错误。 SQLSTATE[HY000]:一般错误:1449指定为定义者的用户('mysql.infoschema'@'localhost')不存在(SQL:select*from information\u schema.tables,其中table\u schema=bl

  • 问题内容: 我收到了这个令人讨厌的错误,尽管我知道为什么要得到它,但我终生无法找到解决方案。 查询包含占位符()。但是要添加这些LIMIT占位符,我需要使用手动方法(),因为否则引擎会将它们转换为字符串。 我没有收到无效的参数数量错误,因此所有占位符均已正确绑定(我认为)。 查询: 除最后两个LIMIT(我与之手动绑定)外,所有占位符值均位于$ criteria中。 问题答案: 您不能使用 和 。

  • 问题内容: 我正在使用dlopen在运行时加载共享库 在该共享库中,我引用了另一个共享库“ SharedLibarary2.so”中定义的const char *。 可执行文件和两个库都是使用-rdynamic构建的。 但是使用dlopen时,我仍然收到运行时错误:“ / usr / lib / SharedLibarary1.so:未定义符号”,并指向损坏的const char *具有未定义符号

  • 问题内容: 我在PHP中收到以下错误 注意未定义的偏移量1:在C:\ wamp \ www \ includes \ imdbgrabber.php第36行中 这是导致它的PHP代码: 错误是什么意思? 问题答案: 如果找不到匹配项,则为空数组。因此,您应该在访问之前检查是否找到了匹配项,例如: