Rails 3.1 Asset pipeline i ręcznie zamawiany Javascript wymaga
Próbuję przekonwertować istniejącą aplikację na nowy układ potoku zasobów 3.1 i chcę dołączyć wiele plików dostawcy, które muszą być w określonej kolejności (podkreślenie.JS i kręgosłup będący jedną parą). W związku z tym nie mogę po prostu użyć = require_tree .
, Aby pobrać pliki dostawcy (bez zmiany nazwy każdego pliku z prefiksem. Fuj).
Poniżej znajduje się mój plik app/assets/javascripts/application.js
:
//= require modernizr-1.7 //= require jquery-1.6.1 //= require underscore-1.1.5 //= require backbone-0.3.3 //= require_tree .
Wypróbowałem każdą kombinację with / out extensions, z / out require_tree i z / out relative ścieżki i nic nie działa. Wszystkie moje pliki są w /vendor/assets/javascripts/
.
Mam wrażenie, że jestem głupi, ponieważ wydaje się to tak oczywistym przypadkiem użycia, (w tym konkretnych plików po nazwie w kolejności jest wspólne z JS, nie? że muszę robić coś idiotycznego?
5 answers
Możesz zażądać KAŻDEGO pliku w określonej kolejności, a następnie dodać:
//= require_self
Zamiast:
//= require_tree .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-25 21:25:32
Masz dwie możliwe struktury : pierwszą i drugą.
W obu poniższych przykładach wystawiasz pakiet na /assets/externals.js
.
Możesz javascript_include_tag
ten pakiet, ale możesz go również wymagać w swoim pliku application.js
.
Pierwszy
vendor/
├── assets
│ ├── javascripts
│ │ ├── externals.js
│ │ ├── modernizr-1.7.js
│ │ └── underscore-1.1.6.js
│ └── stylesheets
└── plugins
Plik externals.js
zawiera:
//= require ./underscore-1.1.6.js
//= require ./modernizr-1.7.js
Drugi
vendor/
├── assets
│ ├── javascripts
│ │ └── externals
│ │ ├── index.js
│ │ ├── modernizr-1.7.js
│ │ └── underscore-1.1.6.js
│ └── stylesheets
└── plugins
Plik index.js
zawiera:
//= require ./underscore-1.1.6.js
//= require ./modernizr-1.7.js
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-27 15:07:49
Moja odpowiedź dotyczy Rails 3.1rc4, Nie wiem czy działa tak samo z innymi wersjami.
Możesz umieścić wszystkie wymagane instrukcje w app/assets/javascripts / application.js czyPliki js znajdują się w app/assets/javascripts/ lub vendor/assets/javascripts/
Like so:
// 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
Dodałem require_tree tutaj, ponieważ mam inne pliki javascript dla moich poszczególnych kontrolerów (pages.js.kawa, użytkownicy.js.Kawa) i ogólne dla całej witryny rzeczy (site.js.kawa)
Tymczasem oto struktura plików.
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
To pozwala mi kontrolować kolejność ładowania bibliotek dostawcy (co ma duże znaczenie, Zwykle) i nie martwić się o mój wewnętrzny javascript, gdzie kolejność ma mniejsze znaczenie.
Co ważniejsze, kontroluję wszystkie polecenia require w jednym często używanym pliku, uważam, że zarówno bezpieczniejsze, jak i czystsze.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-19 15:15:44
Wierzę, że możesz umieścić library.js
w swoim in vendor/assets/javascripts
, a następnie po prostu
//= require library.js
Z twojego application.js
, nie?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-25 17:32:48
Require_tree robi dokładnie to, co mówisz. If you give it
//= require_tree .
Ładuje pliki w bieżącym katalogu, w którym wywoływane jest require_tree. If you give it
//=require_tree ../../../vendor/assets/javascripts
Wtedy dostaniesz javascript pod vendor.
Nie podobało mi się../../.. notacji, więc utworzyłem plik o nazwie vendor/assets/javascripts / vendor_application.js, który zawiera://= require_tree .
, który ładuje javascript w katalogu dostawcy.
Uwaga, Wymaga przeszukania 3 lokalizacje potoków (app, lib, vendor) dla pliku, który ma być wymagany. require_tree jest dosłowne, co prawdopodobnie jest takie, jakie powinno być.
Railscast na tym jest bardzo pomocny: http://railscasts.com/episodes/279-understanding-the-asset-pipeline
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-31 08:28:52