【问题标题】:Ionic 2 cannot find module 'dgram'Ionic 2 找不到模块“dgram”
【发布时间】:2018-01-08 23:53:49
【问题描述】:

我已经安装了一个模板 Ionic 2 应用程序,想添加 NPM 包bonjour

像这样在我的组件中安装并包含包之后:

var Bonjour = require('bonjour');
var bonjour = new Bonjour();

应用程序不会运行并显示“找不到模块 dgram”

应用程序同时安装了 bonjour 包和 bonjour 类型。

问题

应用程序找不到位于 @types/node 文件中的模块 dgram。该项目正在运行TS 2.4.2,不需要对@types 的任何引用,这应该会自动获取。

我尝试了什么

我尝试通过在 ts.config.json 文件中设置 typeroots 或类型,以多种方式包含 @types 文件夹。这并没有改变任何东西。

我尝试指定类型:

"types": ["node", "bonjour"]

我尝试重新安装所有节点模块并清除缓存

我尝试在 require 语句上方的组件中包含参考路径:

/// <reference path="node_modules/@types/node/index.d.ts" />

var Bonjour = require('bonjour');
var bonjour = new Bonjour();

这一切都没有帮助。关于如何让我的应用程序正确加载此模块的任何想法?

【问题讨论】:

  • 我在 bonjour@3.5.0 上遇到了同样的问题
  • @JackD 查看下面的答案
  • 你检查你的导入路径了吗?通常情况下是路径。
  • 你成功了吗?你也可以试试这个。可能对你有用:ionicframework.com/docs/native/zeroconf

标签: node.js ionic2 bonjour


【解决方案1】:

dgram 库自 v0.1.99 起包含在 node.js 中,如 here 所示。

只要您使用 v0.1.99 之后的节点版本,您将始终定义 dgram。您的问题仅与 Typescript 类型有关。


确保您使用 npm i --save-dev @types/node 安装节点类型,并且您在 tsconfig.json 文件中包含 es6 库。

如果上一步不起作用,请在顶部添加:import * as dgram from "dgram";

如果不起作用,您可以从 here 复制模块定义自行导出。


额外提示:如果您由于某种原因不信任您的 tsconfig.json,请直接在 tsc 命令中传递 libtypes 参数,例如:tsc --lib es6 --types node -p .

【讨论】:

  • 我尝试了你所有的解决方案,但没有一个有帮助。我也尝试更改 Ionic webpack 配置文件,但问题仍然存在
  • 一定是你的环境有问题。
  • 是的,Ionic 似乎无法在浏览器端代码中使用 dgram
  • 所以他需要一个 polyfill。
【解决方案2】:

Bonjour 包有一个 DatagramPlugin,它需要 dgram 才能正常运行。在 Ionic 2 中,此包不可用。解决方案是使用 Native Zeroconf 包作为替代方案。

【讨论】:

  • 谢谢,我已经找到了!我还不能让 Zeroconf 工作(它永远不会触发任何 mDns 主机的监视)但这是另一个故事 :)
猜你喜欢
  • 2017-02-10
  • 2017-08-22
  • 1970-01-01
  • 1970-01-01
  • 2016-07-11
  • 1970-01-01
  • 1970-01-01
  • 2019-02-15
  • 1970-01-01
相关资源
最近更新 更多