2017-08-07 17 views
1

私の問題は、このアドオンが別のアドオンの依存関係で使用されているときに実行するアドオンのcontentForメソッドを取得できません。ember-cliとEmber Addon依存関係チェイン内のcontentForメソッド

私の組織には、emberアプリケーションの共通のスタイル、イメージ、コンポーネントを配布するために使用する社内emberアドオンがあります。私はそのアドオンをorg-componentsと呼んでいます。我々は材料設計を採用することに決めたので、既存のアドオンと共にember-paperを使用することにしました。

人が摂取するアプリケーションで参照する必要がある依存関係の数を減らすために、org-componentsdevDependencyではなく)の従属としてember-paperを含めることをお勧めします。

は、このように私たちの依存関係の連鎖はそうのようになります:

ember-paper -> org-components -> ember-engine

ember-paperがためbody-footerに頭の中で素材アイコンやフォントのスタイルシートとpaper-wormholeのdivのカップルを注入します~/index.jsで定義されてcontentFor方法があります選択メニューのドロップダウンやトーストメッセージで使用します。理由はわかりませんが、上記のようにember-paperが依存関係に含まれている場合、contentForメソッドは実行されません。

私は別の依存関係として両方のコンポーネントが含まれている場合、その後、contentForメソッドが実行されると、期待通りに物事が働く: ember-paper -> ember-engine org-components -> ember-engine

私はそれを使用する場合ember-paperアドオンを活用することができませんだから、なぜ私が理解していますよ私たちの既存のアドオンの依存として。 contentForビルドステップが実行されない原因を教えてください。この問題を解決しようとしているときに私が覚えておくべきベストプラクティスですか?

+0

あなたの 'org-components'アドオンに' ember-paper'がどのように含まれているのでしょうか? – Dhaulagiri

答えて

0

Emberチームの助けを借りて、いつも助けてくれたロバート・ジャクソンのおかげで、この問題の解決策を見つけることができました。

Ember Slackコミュニティの助けを捧げた後、Robertはember-enginesの既存のcontentFor機能がこのユースケースを処理するためにまだ拡張されていないことを私に知らせました。彼はそれが監視であり、将来的に機能を追加する可能性が高いと認めているが、当面は彼に/lib/engine-addon.jsを追加する回避策を提供した。私はエンバー-エンジンや、これは我々が現在使用しているものよりも新しいバージョンに追加されているかどうかについてのdevのロードマップに追いついていないGist

として

options.contentFor = function(type, config) { 
    let deprecatedHooks = ['app-prefix', 'app-suffix', 'vendor-prefix', 'vendor-suffix']; 
    if (deprecatedHooks.indexOf(type) > -1) { 
    // ember-engines does not support the deprecated contentFor hooks 
    return ''; 
    } 

    let content = []; 
    if (type === 'head') { 
    let engineConfig = this.engineConfig(config.environment, {}); 
    let escapedConfig = escape(JSON.stringify(engineConfig)); 

    content = content.push(
     `<meta name="${options.name}/config/environment" content="${escapedConfig}" />` 
    ); 
    } 

    content = this.addons.reduce((content, addon) => { 
    let addonContent = addon.contentFor ? addon.contentFor(type, config, content) : null; 
    if (addonContent) { 
     return content.concat(addonContent); 
    } 

    return content; 
    }, content); 

    return content.join('\n'); 
}; 

もご利用いただけます。上記のようにEmber Slackの人々は非常に有益であり、それらの質問があれば正しい方向に向けるでしょう。

関連する問題