2013-04-07 9 views
7

にすべてをラップするのですか?バージョン0.6.0以降、meteorは各javascriptファイルを(function(){...})にラップします。これは、自分のjavascriptファイルには理にかなっています。しかし、第三者図書館ではありません。例えば。私はcrypto-jsからsha3.jsを使用しています。この。クライアント/ libにあります。これは0.5.9まで完璧でした。しかし、現在、sha3の機能はもう利用できません。なぜmeteor 0.6.0は(function(){...})

このラッピングはオフにできますか?

答えて

4

機能の閉鎖は最初の2つの主な理由のために(とのみ、サーバー上の)サーバー側で導入されました:で、これについてもう少し議論がある

  • スコープの変数があるが、それは技術的にNpm.require機能
のために必要だった単純な変数名
  • を維持しながら、変数の衝突を回避するための素晴らしい方法

    ノード/メーターキー機能の1つは、クライアントとサーバー上で同じファイルを実行できることです。そのため、変数スコープはクライアントとサーバーの両方で同じ動作をする必要があり、Meteorにクライアント上の関数クロージャも含まれている理由です。

    ラッピングをオフにすることはできません(Meteor/toolsコードを変更せずに)。

    linker branchの作業ですぐに改善されます(変数名に基づいてファイルの依存関係が自動的に解決されます)。1.適切な順序でjavascriptファイルをインクルードします。2.グローバルスコープの変数必要があります。

    今のところ、グローバルスコープにする必要があるオブジェクトを手動でエクスポートする必要があります。

  • 2

    Meteor 0.6.0 introduces NPM compatibilityのように、最終的に正式にNPM Modulesを使用して流星パッケージに追加されます。問題は、グローバルスコープでは、パッケージが基本的にプロジェクトのファイルであるかのようにカウントされるため、変数宣言の際に競合が発生することです。

    これはサーバーサイドコードにのみ影響しますが、クライアントサイドのコードはもはや互換性がないため、クライアントサイドのコードもまた一貫性のためにスコープされます。

    解決策は、あなたが提案したように変数をグローバル化することです。@を追加するか、またはjavacriptのvarを削除してください。

    私も、スコープのファイルが自動的に依存関係をスキャンすることを可能にするのに良い解決策は、流星のlinkerブランチで作業中です(X-編集可能&エースエディタのような)クライアント側のlibsのカップルと、このイライラを見つけながらそれらは正しく自動的に表示されます。 https://groups.google.com/forum/?fromgroups=#!topic/meteor-talk/gYgYhv88nB4

    3

    あなたはadd_filesに文書化されていないbareオプション(旧raw)を使用することができます:

    api.add_files([ 
        'sha3.js' 
    ], 'client', {bare: true}); 
    

    をそして、それは追加されたファイル(複数可)をラップしないであろう。

    +0

    こんにちはMitar、 このコードを追加する場所、およびAPIは何ですか? –

    +0

    あなたのpackage.jsファイル。[パッケージのドキュメント](http://docs.meteor.com/#writingpackages)を参照してください。 – Mitar

    関連する問題