10

Brocfile (またはその他の場所) のビルドからフォルダーを除外する方法はありますか。ユースケースはパッケージングで、ポッド内のサブアプリで作成されたアプリがあります。例えば。

/app/modules/components
/app/modules/app1
/app/modules/app2
/app/modules/app3

環境が「開発」に設定されている場合、またはたとえばのみに設定されている場合に、それらをすべてビルドしたいと思います。環境が「app1」の場合は「app1」。助言がありますか?

ブロッコリーファイルリムーバー、ブロッコリーファネル、ブロッコリーマージツリーのさまざまな組み合わせを試しましたが、役に立ちませんでした.

var removeFile = require('broccoli-file-remover');

module.exports = removeFile(app.toTree(), {
    paths: ['app/modules/pod1/', 'app/modules/pod2/']
});
4

3 に答える 3

4

ああ、実際にこれについて明確に考えた後、すべてが前の例で期待したとおりに実際に機能しています。

私は明らかに十分な注意を払っていませんでした。app.toTree()すべてがすでに構築および連結されているため、この操作を実行するには遅すぎます。

幸いなことに、ember-cli を使用すると、アドオンはライフサイクルのさまざまなマイルストーンで適切なツリーを変更できます。

現在利用可能なフックの詳細については、https : //github.com/ember-cli/ember-cli/blob/master/ADDON_HOOKS.md を参照してください。

トリックを行うフックはAddon.prototype.postprocessTree. 2 つの選択肢があります。スタンドアロンのアドオンをビルドするember addonか、軽量のレポ内アドオンを作成できますember g in-repo-addon。通常、このような状況では、2 番目のプロジェクトを必要としないため、リポジトリ内アドオンを好みますが、それ以外は同じです。

  1. ember g in-repo-addon remove
  2. 経由でブロッコリーシチューをインストールする必要がありますnpm install --save broccoli-stew
  3. それを含めますvar stew = require('broccoli-stew')
  4. アドオンにフック postprocessTree を追加します
  5. postprocessTree が重要なタイプの場合は、broccoli-stew を使用して、重要でなくなったディレクトリを削除します。

結果のプル リクエスト: https://github.com/WooDzu/ember-exclude-pod/pull/1

注:template後処理で利用可能なタイプの 1 つではなかったことに気付いたので、追加しました: https://github.com/ember-cli/ember-cli/pull/4263 (次の ember-cli リリースの一部になるはずです) )

Addon.prototype.preprocessTree注:ビルドする前にファイルを無視するため、追加のフックが本当に必要です 。関連する問題を開きました: https://github.com/ember-cli/ember-cli/issues/4262

上記のステップの出力

var stew = require('broccoli-stew');

module.exports = {
  name: 'remove',

  isDevelopingAddon: function() {
    return true;
  },

  postprocessTree: function(type, tree){
    if (type === 'js' || type === 'template')   {
      return stew.rm(tree, '*/modules/pod{1,2}/**/*');
    } else {
      return tree;
    }
  }

};
于 2015-06-09T19:44:14.787 に答える
3

ブロッコリーシチューの rm がこれを正しく処理すると確信しています。

https://github.com/stefanpenner/broccoli-stew/blob/master/lib/rm.js#L4-L40非常によく似たシナリオをテストするテストもあります: https://github.com/stefanpenner/broccoli-シチュー/ブロブ/マスター/テスト/rm-test.js#L48-L57

var stew = require('broccoli-stew');
module.exports = stew.rm(app.tree(), 'app/modules/{pod1,pod2}');

これで問題が解決しない場合は、気軽にブロッコリー シチューの問題を開いてください。ただし、必ず実行例を提供してください

于 2015-06-07T18:44:55.757 に答える
0

これは本当に遅いですが、これを行うための Broccoli プラグインを作成しました。https://www.npmjs.com/package/broccoli-rmで入手できます。

(秘訣は、除外されたパスがフォルダーであるかどうかを検出し、グロブ一致を使用して、コピー中にフォルダーの子がシンボリック リンクされないようにすることです。)

var rm = require('broccoli-rm');
var input = app.toTree();
module.exports = output = rm([input], {
   paths: ['app/modules/pod1', 'app/modules/pod2']
});
于 2016-07-17T00:33:39.753 に答える