1

Ember CLI に Bower 経由で SockJS を含めようと必死です。私は可能な限りドキュメントをフォローしました。これらはほとんどうまくいくように見えた手順です:

  • "sockjs-client": "0.3.4"に追加bower.json
  • 走ったbower install
  • に以下を追加Brocfile.js

    app.import('vendor/sockjs-client/lib/index.js', { 'sockjs': [ 'sockjs' ] });

  • import { SockJS as SockJS } from 'sockjs';私のモジュールに追加されました。他にもいろいろな組み合わせを試してみimport SockJS from 'sockjs';た...

これは少なくともコンパイルされ、ember serverエラーなしで実行されるようです。ただし、ブラウザーでページを開くとすぐに、次のエラーが表示されます。

Uncaught ReferenceError: SockJS is not defined

エラーを示す作成されたソースは、次のようになります。

SockJS = (function(){
              var _document = document;
              var _window = window;
              var utils = {};

<!-- include lib/reventtarget.js -->
<!-- include lib/simpleevent.js -->
<!-- include lib/eventemitter.js -->
<!-- include lib/utils.js -->
<!-- include lib/dom.js -->
<!-- include lib/dom2.js -->
<!-- include lib/sockjs.js -->
<!-- include lib/trans-websocket.js -->
<!-- include lib/trans-sender.js -->
<!-- include lib/trans-jsonp-receiver.js -->
<!-- include lib/trans-jsonp-polling.js -->
<!-- include lib/trans-xhr.js -->
<!-- include lib/trans-iframe.js -->
<!-- include lib/trans-iframe-within.js -->
<!-- include lib/info.js -->
<!-- include lib/trans-iframe-eventsource.js -->
<!-- include lib/trans-iframe-xhr-polling.js -->
<!-- include lib/trans-iframe-htmlfile.js -->
<!-- include lib/trans-polling.js -->
<!-- include lib/trans-receiver-eventsource.js -->
<!-- include lib/trans-receiver-htmlfile.js -->
<!-- include lib/trans-receiver-xhr.js -->
<!-- include lib/test-hooks.js -->
                  return SockJS;
          })();

Ember CLIにSockJSを含める正しい方法は何ですか?

編集

さらに試行錯誤した後、ブラウザの観点から次のように動作するようになりました。

Brocoli.js:

app.import('vendor/bower-sockjs-client/sockjs.js', {
  'sockjs-client': ['sockjs-client']
});
module.exports = app.toTree();

bower.json:

  "dependencies": {
    "handlebars": "~1.3.0",
    "jquery": "^1.11.1",
    "qunit": "~1.12.0",
    "ember-qunit": "~0.1.5",
    "ember": "1.5.1",
    "ember-resolver": "~0.1.1",
    "loader": "stefanpenner/loader.js#1.0.0",
    "ember-cli-shims": "stefanpenner/ember-cli-shims#0.0.2",
    "ember-load-initializers": "stefanpenner/ember-load-initializers#0.0.2",
    "ember-qunit-notifications": "^0.0.1",
    "ember-cli-test-loader": "rjackson/ember-cli-test-loader#0.0.2",
    "bower-sockjs-client": "0.3.4"
  }

また、モジュール内ではまったくインポートされません。

これにより、Ember CLI は多くの不平を言います:'SockJS' is not defined.ただし、少なくとも今のところは機能します。私がやっていることに何か問題がありますか、それとも Ember CLI のバグですか?

4

3 に答える 3

3

私はあなたがすでにこれを解決していることを知っています。しかし、ここで何がうまくいかないかについての説明があります。私も問題を抱えていたので、ボンネットの下で何が起こっているのか見てみようと思いました.

bower「sockjs-client」経由でダウンロードしたライブラリには、配布ファイルが含まれていません。自分でビルドする必要があります。このためには、makeコマンドが必要です。Linux または Mac を使用している場合は、既にお持ちです。Windows の場合は、ダウンロードするcygwinか、mingw

sockjs をビルドするには、ターミナルで vendor/sockjs-client/ に移動し、コマンドを実行します。

npm install
make build

これにより、sockjs.min.js と sockjs.js の 2 つのファイルが生成されます。

これで、このファイルを Brocfile.js に含めることができます

app.import('vendor/sockjs-client/sockjs.min.js');

SockJSグローバル変数として利用できるようになりました。現在使用しているパッケージ「bower-sockjs-client」は、dist ファイルを共有する単なるフォークです。それを使用している場合は、最新であることを確認してください。

はグローバルであるためSockJS、ファイルに追加する必要がありjshintrcます。

{
  "predef": {
    "document": true,
    "window": true,
    "Demo1ENV": true,
    "SockJS": true
  }
}

インポートが機能しない理由 -

パッケージをインポートできない理由は、SockJS が amd にある種の UMD 構文を使用しているためです。次のチェックを行って、amd 構文を使用できるかどうかを確認します。

typeof define == "function" && define.amd

ember-cli は最小限の loader.js を使用して amd モジュールをロードしdefine.amd、設定されていないため、上記のコードでは false と評価されます。loader.js ファイルを変更しても、SockJS の amd 定義は ES6 トランスパイラーと互換性がありません。ES6 トランスパイラーは、モジュールが「デフォルト」キーにエクスポートされることを想定しています。

import sockjs from 'sockjs';  will become something like
var sockjs = _dependency_1['default'];
but SockJS is _dependency_1, _dependency_1['default'] will be undefined.
于 2014-06-23T15:44:47.167 に答える
0

同様の問題があったので、予想される sockjs 構文などを追加する Ember のアドオンを開発しました。

ember-sockjs

于 2015-04-06T07:20:57.213 に答える