我在 Meteor 上遇到了一个奇怪的问题,我无法解决:
我正在使用 Meteor、PeerJS 和 AdapterJS 开发一个 WebRTC 应用程序(它们为 Safari 或 IE 等不受支持的浏览器提供了一个 WebRTC 插件)。这两个库是使用 NPM 下载的:meteor npm install peerjs/adapterjs
所以在我看来的控制器中,我有:
视图.js
//import Peer from 'peerjs'; => same error with "import"
//import AdapterJS from 'adapterjs';
Template.view.onRendered(function(){
AdapterJS = require("adapterjs");
Peer = require("peerjs");
//var peerkey="..."
var peer = new Peer({
key: peerkey, // get a free key at http://peerjs.com/peerserver
debug: 3,
config: {'iceServers': [
{ url: 'stun:stun.l.google.com:19302' },
{ url: 'stun:stun1.l.google.com:19302' },
]}
});
但是当我运行我的控制器时,我得到一个异常,因为调用 peerjs 构造函数时在 peerjs/util.js 函数中未定义“控制台”:
未捕获的类型错误:无法读取未定义的属性“日志”
奇怪的是,当我只需要“peerjs”时,没有例外......我试图改变 require 函数的顺序,但它不起作用。其他变量,如“alert”、“window.console”工作并在模块内定义,但“console”不是..:/
任何建议都可以帮助^^
提前致谢。
编辑:如果我在 node_module/peerjs/lib/util.js 的第一行添加一个断点,我看到“console”变量在 util.js 中是“未定义的”但是....它是在调用者函数中定义的(文件评估)!
EDIT2:我尝试了其他方法来检查adapterjs中的代码是否重新定义或更改了某些内容:我将'require(“adapterjs”)'放在超时函数中,延迟很长(10秒),并且......控制台内部仍未定义对等模块!但是当我评论 require("adapterjs") 时,没有错误,控制台被定义了!我认为 Meteor 在运行控制器脚本之前根据需要的功能做了一些特别的事情......
EDIT3:这是一个测试项目的 git repo:gitlab.com 如果您显示开发控制台,您将看到异常。