【问题标题】:npm package doesn't work as expected in MeteorJS applicationnpm 包在 MeteorJS 应用程序中无法按预期工作
【发布时间】:2018-05-14 22:49:47
【问题描述】:

我正在尝试使用simple-peer 包如下:

var Peer = require('simple-peer');

var peer = new Peer({});

peer.on('signal', function(data) {
  console.log(JSON.stringify(data));
});

我没有在控制台打印任何内容,并出现以下错误:

SCRIPT5009:“缓冲区”未定义

注意:我的项目是聊天应用程序,在发送短信时可以正常工作,但是在我添加上述代码后,聊天就不能正常工作了。

我正在使用其他 npm 包,例如 socket.io,它们运行良好。

我在这里做错了什么?

【问题讨论】:

    标签: node.js meteor npm


    【解决方案1】:

    因为 Buffer 是一个供服务器端使用的全局 Node,所以您需要包含一个 polyfill 才能在客户端使用相同的库。

    Meteor 使用 meteor-node-stubs 包让这一切变得简单。安装它:

    meteor npm install --save meteor-node-stubs
    

    请注意,这些并不小,可能会显着增加您的捆绑包大小。请留意它的影响力,以便您决定使用此特定包装是否值得增加重量。

    为确保它对期望它的模块可用,您可能需要在初始化 simple-peer 之前将其添加到 window

    window.Buffer = require('buffer').Buffer
    

    将此添加到您的主 js 文件(或第一个运行的文件中)

    【讨论】:

    • 添加“meteor-node-stubs”包后我仍然得到 Buffer is undefined
    • :(添加节点存根后,您是否尝试过其他答案的解决方案?您可能需要window.Buffer = require('buffer').Buffer,所以simple-peer可以找到它。只需要在加载模块之前执行它...
    • 谢谢,我没有正确使用它。你的澄清对我帮助很大
    【解决方案2】:

    根据nodejs缓冲区文档...

    Buffer 类在 Node.js 中是全局的,因此不太可能 需要使用 require('buffer').Buffer。

    但您可能需要添加一行

    var Buffer = require('buffer').Buffer
    

    使其可用于此模块。 Meteor 不在最新版本的节点上 - 升级到 1.6 也可以解决问题。

    【讨论】:

    • 我正在使用 Meteor 1.6。我尝试添加“var Buffer = require('buffer').Buffer”,但它并没有为我解决问题
    猜你喜欢
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 2020-08-17
    • 2015-10-17
    • 1970-01-01
    相关资源
    最近更新 更多