1

Meteor で奇妙な問題に直面していますが、解決できません。

Meteor、PeerJS、および AdapterJS (Safari や IE などのサポートされていないブラウザー用の WebRTC プラグインを提供します) を使用して WebRTC アプリを開発しています。これら 2 つのライブラリは NPM を使用してダウンロードされます: meteor npm install peerjs/adapterjs

したがって、私のビューのコントローラーには次のものがあります。

view.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 コンストラクターを呼び出すときに「console」が peerjs/util.js 関数内で定義されていないため、例外が発生します。

キャッチされていない TypeError: 未定義のプロパティ 'log' を読み取れません

不思議なことに、「peerjs」だけをrequireすると、例外はありません.require関数の順序を変更しようとしましたが、うまくいきません。「アラート」、「window.console」などの他の変数は機能し、モジュール内で定義されていますが、「コンソール」はそうではありません.. :/

どんな提案でも役に立ちます^^

前もって感謝します。

編集: node_module/peerjs/lib/util.js の最初の行にブレークポイントを追加すると、「console」変数が util.js 内で「未定義」であることがわかりますが、....呼び出し元関数内で定義されています(ファイル評価) !

EDIT2:adapterjs内のコードが何かを再定義または変更するかどうかを確認するために何か他のことを試みました:タイムアウト関数内に「require( "adapterjs")」を入れ、長い遅延(10秒)で....コンソールは内部でまだ定義されていませんピア モジュール ! しかし、require("adapterjs") にコメントすると、エラーはなく、コンソールが定義されています。必要な機能に応じて、コントローラースクリプトを実行する前にMeteorが何か特別なことをすると思います...

EDIT3: プロジェクトをテストするための git リポジトリは次のとおりです: gitlab.com 開発 コンソールを表示すると、例外が表示されます。

4

2 に答える 2

0

私自身は完全には理解していませんが、解決策を見つけました。これは、Meteor がモジュールをインポートする方法に関係しており、Peerjs はそれに違反しています。

基本的に、node_modules/peerjs/dist/peer.js をクライアント ディレクトリにコピーして、Meteor がそれを「そのまま」ロードするようにしました。

次のように main.js に小さな変更を加えます。

import './main.html';

// I placed peer.js from the node_modules/peerjs/dist/peer.js into the client folder and it works fine
// import {Peer} from 'peerjs';
import {AdapterJS as Adapter} from 'adapterjs';

Template.hello.onCreated(function helloOnCreated() {
    // counter starts at 0

    window.peer = new Peer({

そしてそれは正常に動作します:)

于 2016-10-04T20:31:59.957 に答える