0

J'ai du mal à comprendre le usemin (Préparer), décrit ici: useminusemin ne pas remplacer les chemins dans les <- charmille: js -> blocs

Ce que je comprends est que le usemin, vous pouvez combiner plusieurs fichiers en un seul fichier, ce qui serait une bonne idée lors de la construction de votre application JS. Je comprends aussi le flux comment vous devez l'utiliser, par exemple:

// simple build task 
grunt.registerTask('build', [ 
    'useminPrepare', 
    'concat:generated', 
    'cssmin:generated', 
    'uglify:generated', 
    'filerev', 
    'usemin' 
]); 

Alors si vous avez ce code:

<!-- build:js js/app.js --> 
<script src="js/app.js"></script> 
<script src="js/controllers/thing-controller.js"></script> 
<script src="js/models/thing-model.js"></script> 
<script src="js/views/thing-view.js"></script> 
<!-- endbuild --> 

La tâche concat regrouperait tous ces fichiers dans un seul fichier, appelé application .js, et le mettre dans un dossier .tmp. Ensuite, la tâche uglify prendrait le fichier app.js du dossier .tmp, écraserait tous les js et le placerait dans le dossier dist. Disons qu'avant useminPrepare, j'ai eu une autre tâche, qui traduit le fichier html original (index.html) également en dossier dist. Maintenant, lorsque la tâche usemin démarre, je l'ai configuré pour utiliser le dossier dist, et il devrait remplacer les anciens blocs par une référence à l'application générée. Alors maintenant, dans le code HTML dans le dossier dist, la même partie devrait ressembler à ceci:

<script src="js/app.js"></script> 

Est-ce exact? Alors maintenant, il ne devrait plus y avoir de balises de commentaires? Maintenant, j'ai un problème lié à l'usemin. La situation est la suivante: Au début html, je balises de commentaire pour bower_components (bower-install) à l'intérieur des balises usemin comme ceci:

<!-- build:js js/app.js --> 
<script src="js/app.js"></script> 
<script src="js/controllers/thing-controller.js"></script> 
<!-- bower:js --> 
<script src="bower_components/something/some_bower_component.js"></script> 
<script src="bower_components/something/some_bower_component.js"></script> 
<script src="bower_components/something/some_bower_component.js"></script> 
<!-- endbower --> 
<script src="js/models/thing-model.js"></script> 
<script src="js/views/thing-view.js"></script> 
<!-- endbuild --> 

Avec ce paramètre, tout semble fonctionner bien jusqu'à ce que la tâche usemin à la fin. La tâche usemin est maintenant incapable de remplacer les blocs de code. J'ai identifié la raison pour laquelle cela ne peut pas. C'est parce que j'ai ces blocs de commentaire plus bas. Donc, si je fais séparément les premières tâches, alors transférez le code à dist, puis supprimez ces balises de commentaire de bower, et faites le reste des balises dans la construction, alors tout fonctionne bien. Je veux résoudre ceci afin que je puisse exécuter toutes les tâches directement. Comment pourrais-je résoudre ceci? Pourquoi usemin échoue-t-il s'il voit des blocs de commentaire? Pourrais-je changer les options usemin pour ignorer les blocs de commentaire? Ou devrais-je écrire une tâche de grognement, qui va supprimer ces blocs de commentaires particuliers après que les composants de la tondeuse soient injectés et que le html ait été transféré à dist? Les versions que j'ai sont:

"grunt-bower-install": "~0.7.0", 
"grunt-concurrent": "~0.4.1", 
"grunt-contrib-clean": "~0.5.0", 
"grunt-contrib-coffee": "~0.7.0", 
"grunt-contrib-compass": "~0.6.0", 
"grunt-contrib-concat": "~0.3.0", 
"grunt-contrib-connect": "~0.5.0", 
"grunt-contrib-copy": "~0.4.1", 
"grunt-contrib-cssmin": "~0.7.0", 
"grunt-contrib-htmlmin": "~0.1.3", 
"grunt-contrib-uglify": "~0.2.0", 
"grunt-usemin": "~2.0.0", 

Répondre

0

Voir cette réponse: grunt usemin doesnt affect the html file(index.html)

Je viens juste de ce problème par moi-même et mon solvatation était de convertir toutes les fins de ligne en fin de ligne de style unix (lf) et éviter les fenêtres de fin de ligne dans n'importe quel fichier converti par grunt usemin