【问题标题】:Error Javascript ReferenceError: require is not defined in miIO Device Library错误 Javascript ReferenceError: 要求未在 miIO 设备库中定义
【发布时间】:2019-01-03 15:46:48
【问题描述】:

我尝试使用来自 https://github.com/aholstenson/miio 的 miIO 库,但是当我尝试使用它时出现错误 ReferenceError: require is not defined

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
<script type="text/javascript">

    const mio = require('./lib');

  mio.device({ address: '192.168.31.148' })
  .then(device => console.log('Connected to', device))
  .catch(err => handleErrorHere);

</script>
</body>
</html>

谁能帮我解释一下为什么这段代码出错了?

【问题讨论】:

  • 是的,它是一个 NodeJS 模块,这意味着它在 Node(在服务器上)中运行,而不是在浏览器中。 miio is MIT-licensed and requires at least Node 6.6.0.
  • @Deiv — Browserify 不会将大多数对 Node API 的依赖转变为在浏览器中工作的东西。

标签: javascript


【解决方案1】:

您链接到的文档说:

miio 已获得 MIT 许可,并且至少需要 Node 6.6.0。

您正试图在网络浏览器而不是 Node 中运行它。

你需要在 Node 中运行它。

【讨论】:

    【解决方案2】:

    如果您想在没有 nodejs 的情况下使用 require,那么您需要使用 Browserify/RequireJS,如以下问题所述:How to use JS require() without Node.js

    【讨论】:

    • OP 想要使用他们找到的库。对require 的支持是不够的。它还需要处理网络数据包的能力。这在只能执行 HTTP 和 Web 套接字的 Web 浏览器中是不可能的。
    • 那里的答案提到您可以使用这些来加载模块以在浏览器中使用。请参阅此具体答案:stackoverflow.com/a/21818631/7207514
    • 该问题专门针对require 的使用,并允许您在浏览器中使用require。正如我之前的评论中提到的,支持require 并不足以解决问题带来的问题。如果您在浏览器中require 某些内容无法在浏览器中运行,那么它仍然无法运行
    • 解决问题怎么不够? OP 遇到了 require 问题,要解决这个问题并加载他们必须使用 RequireJS 或其他类似工具的模块。您只是在说问题是什么,但我正在链接一个可以帮助解决问题的解决方案。显然它不会使用 require 运行,但这将允许 OP 按照他们明确希望实现的方式加载模块。
    • 在他们修复并加载模块之后......它仍然无法工作,因为该模块需要浏览器不支持的其他东西。您不是在链接到解决方案,而是在链接到一个红鲱鱼,它只会发现一个无法在浏览器中修复的不同错误(但同一问题的另一个症状)。
    猜你喜欢
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 2020-11-08
    • 2022-06-15
    • 2015-06-12
    相关资源
    最近更新 更多