52

既存のアプリを新しい 3.1 アセット パイプライン レイアウトに変換しようとしており、特定の順序にする必要がある多くのベンダー ファイルを含めたいと考えています (underscore.js とバックボーンが 1 つのペアです)。そのため、a を使用= require_tree .してベンダー ファイルを取り込むことはできません (各ファイルの名前をプレフィックスで変更する必要はありません。うーん)。

以下は私のapp/assets/javascripts/application.jsファイル内にあります:

//= modernizr-1.7 が必要
//= jquery-1.6.1 が必要
//= アンダースコア 1.1.5 が必要
//= バックボーン 0.3.3 が必要
//= require_tree .

拡張機能の有無、require_tree の有無、および相対パスの有無のすべての組み合わせを試しましたが、何も機能しません。私のベンダー ファイルはすべて/vendor/assets/javascripts/.

これは非常に明白なユースケースのように見えるので(JSでは特定のファイルを名前で含めるのが一般的ですよね?)、ばかげたことをしているに違いないので、私はばかげているように感じますか?

4

5 に答える 5

29

各ファイルを特定の順序で要求してから、次を追加できます。

//= require_self

それ以外の:

//= require_tree .
于 2011-06-26T08:15:17.967 に答える
8

私の答えは Rails 3.1rc4 に適用されます。他のバージョンと同じように機能するかどうかはわかりません。

実際には、.js ファイルが app/assets/javascripts/ または vendor/assets/javascripts/ にあるかどうかに関係なく、すべての require ステートメントを app/assets/javascripts/application.js に配置できます。

そのようです:

// this is in app/assets/javascripts/application.js

//= require modernizr-2.0
//= require jquery
//= require jquery_ujs
//= require jqueryui-1.8.12
//= require jquery.easing-1.3
//= require jquery.noisy
//= require jquery.jslide-1.0
//= require respond
//= require smoke
//= require_tree

ここに require_tree を含めたのは、個々のコントローラー (pages.js.coffee、users.js.coffee) 用の他の JavaScript ファイルと、サイト全体のもの (site.js.coffee) 用の一般的な JavaScript ファイルがあるためです。

一方、ファイル構造は次のとおりです。

app/
├── assets
│   ├── javascripts
│   │   ├── application.js
│   │   ├── pages.js.coffee
│   │   ├── users.js.coffee
│   │   └── site.js.coffee
│   └── stylesheets
└── plugins

vendor/
├── assets
│   ├── javascripts
│   │   ├── jquery.easing-1.3.js
│   │   ├── jquery.jslide-1.0.js
│   │   ├── jquery.noisy.js
│   │   ├── jqueryui-1.8.12.js
│   │   ├── modernizr-2.0.js
│   │   ├── respond.js
│   │   └── smoke.js
│   └── stylesheets
└── plugins

これにより、ベンダー ライブラリのロード順序を制御できるようになり (通常、これは非常に重要です)、通常は順序が重要ではない内部 JavaScript について心配する必要がなくなります。

さらに重要なことは、よく使用される 1 つのファイル内ですべての require ステートメントを制御することです。

于 2011-07-19T15:15:44.423 に答える
6

私はあなたがlibrary.jsあなたの中に入れてvendor/assets/javascripts、それから簡単にできると信じています

//= require library.js

あなたからapplication.js、いいえ?

于 2011-06-06T12:09:52.577 に答える
4

require_tree は、あなたが言うことを正確に行います。あげたら

//= require_tree .

require_tree が呼び出された現在のディレクトリにファイルをロードします。あげたら

//=require_tree ../../../vendor/assets/javascripts

次に、ベンダーの下にある JavaScript を取得します。

../../.. 表記が気に入らなかったので、次の内容を含む vendor/assets/javascripts/vendor_application.js というファイルを作成しました。

//= require_tree .

これにより、ベンダー ディレクトリの下に JavaScript が読み込まれます。

require は、require するファイルの 3 つのパイプラインの場所 (アプリ、ライブラリ、ベンダー) を検索することに注意してください。require_tree はリテラルであり、おそらくそうあるべきです。

これに関する Railscast は非常に役立ちます: http://railscasts.com/episodes/279-understanding-the-asset-pipeline

于 2011-12-31T08:28:52.467 に答える