Rails 3.1 asset pipeline et manuellement commandé nécessite Javascript
Je suis en train de convertir une application existante pour la nouvelle 3.1 asset pipeline de mise en page, et que vous souhaitez inclure beaucoup de vendeur de fichiers qui doivent être dans un ordre spécifique, (underscore.js et de la colonne vertébrale étant une paire). En tant que tel, je ne peux pas simplement utiliser un = require_tree .
à tirer dans mon fournisseur de fichiers, de (sans le renommer chaque fichier avec un préfixe. Beurk).
La suite est dans ma app/assets/javascripts/application.js
fichier:
//= nécessitent modernizr-1.7 //= besoin de jquery-1.6.1 //= demander un trait de soulignement-1.1.5 //= nécessitent colonne vertébrale-0.3.3 //= require_tree .
J'ai essayé toutes les combinaisons de avec/hors extensions, avec la require_tree et avec/les chemins relatifs, et rien ne fonctionne. L'ensemble de mon fournisseur de fichiers sont en /vendor/assets/javascripts/
.
Je sens que je suis stupide parce que cela semble être une évidente cas d'utilisation, (y compris les fichiers par nom dans l'ordre est commun avec JS, non?) que je doit faire quelque chose d'idiot?
- Romain Tribus a la bonne réponse, je voulais juste ajouter qu'au lieu de 'nécessite jquery-1.6.1" vous pouvez le faire exigent "jquery" et il va tirer à partir d'un joyau au lieu de cela, il est installé avec 3.1 par défaut
Vous devez vous connecter pour publier un commentaire.
Vous pouvez exiger de chaque fichier dans l'ordre particulier et ensuite ajouter:
au lieu de:
Vous avez deux possibilités de structure : la première et la deuxième.
Avec les deux exemples suivants, vous exposer un forfait à
/assets/externals.js
.Vous pouvez
javascript_include_tag
ce paquet, mais vous pouvez aussi avoir besoin de votreapplication.js
fichier.La première
Le fichier
externals.js
contient :La seconde
Le fichier
index.js
contient :No route matches [GET] "/assets/externals.js"
require_tree
: vous pouvez nommer les fichiers avec un préfixe :a_underscore-1.1.6.js
,b_modernizr-1.7.js
, etc.Ma réponse s'applique à Rails 3.1rc4, je ne sais pas si il fonctionne de la même manière avec les autres versions.
Vous pouvez effectivement mettre toutes exiger des déclarations dans app/assets/javascripts/application.js si oui ou non l' .js fichiers sont dans le dossier app/assets/javascripts/ou fournisseur/assets/javascripts/
Comme suit:
J'ai inclus require_tree ici parce que j'ai d'autres fichiers javascript pour mes différents contrôleurs (les pages.js.le café, les utilisateurs.js.le café) et de manière générale pour l'ensemble du site des trucs (le site.js.le café)
En attendant, voici la structure du fichier.
Cela me permet de contrôler l'ordre de chargement des fournisseurs des bibliothèques (ce qui est très important, en général) et ne pas vous soucier de l'intérieur de ma javascript, où l'ordre généralement moins important.
Le plus important, je contrôle tous les états exigent souvent utilisé dans un délai d'un fichier, je trouve que la fois plus sûr et plus propre.
//= require
vos dépendances que lorsqu'ils sont réellement nécessaires. En général, je pense que les Rails 3.1 mode d'organisation du JS n'est pas assez fine pour bien conçu applications.Je crois que vous pouvez mettre un
library.js
dans votrevendor/assets/javascripts
et puis tout simplementde votre
application.js
, non?vendor/assets/javascripts
require_tree fait exactement ce que vous lui dites. Si vous lui donnez
il charge les fichiers dans le répertoire courant où require_tree est appelé. Si vous lui donnez
vous obtiendrez alors le javascript vendeur.
Je n'ai pas aimé le ../../.. notation, j'ai donc créé un fichier appelé vendor/assets/javascripts/vendor_application.js qui contient:
Qui charge le javascript dans le répertoire vendor.
Note, nécessitent la recherche de l'3 pipeline emplacements (app, lib, vendeur) pour le fichier d'exiger. require_tree est littérale, ce qui est probablement la façon dont il devrait être.
La railscast sur ce point est très utile: http://railscasts.com/episodes/279-understanding-the-asset-pipeline