2016-05-12 36 views
-1

Ich habe einige Schwierigkeiten mit Grunt als Teil unseres Build-Prozesses. Wir verwenden einen TeamCity-Server, um vor der Bereitstellung einen grunt-Befehl auszuführen. Im Wesentlichen möchten wir in der Lage sein, nichtminimierte js und css einzutragen und dann Grunt dazu zu bringen, es vor der Bereitstellung für uns zu minimieren.Kann ich Grunt.js auf dem Build-Server ausführen, ohne Abhängigkeiten in jedem Build zu installieren?

Das Problem, das ich habe, ist, dass TeamCity für jeden Build den Inhalt des Build-Dateisystems löscht und es aus GIT entfernt (das ist gut, da es alte Dateien stoppt, wenn wir sie nicht wollen) . Grunt scheint insist that all dependencies are installed locally to the GruntFile.js though.

Dies bedeutet, dass ich für jeden Build npm install ausführen muss. Das dauert Ewigkeiten und verlangsamt unseren Deployment-Prozess wirklich (nicht zu erwähnen, dass unser Proxy-Server dies nicht zu haben scheint, wenn er durch Team City läuft ...)

Ich würde gerne irgendwie die die Abhängigkeiten installieren global und nur einmal herunterladen (sie ändern sich selten) und einfach diese heruntergeladenen Abhängigkeiten verwenden, jedes Mal wenn wir bauen. Aber ich kann mir nicht vorstellen, wie ich das machen soll?

spielte ich mit dem Gedanken, in den node_modules Ordnern überprüft, aber dann merkte ich, diese enthielten 8800 Dateien: O Also ich nicht die GIT-Repository mit diesem verschmutzen würde es vorziehen.

Hier ist der package.json zu zeigen, was Abhängigkeiten haben wir:

{ 
    "name": "name", 
    "title": "title", 
    "description": "description", 
    "version": "0.0.1", 
    "engines": { 
    "node": ">=0.8" 
    }, 
    "scripts": { 
    "test": "grunt assemble" 
    }, 
    "dependencies": { 
    "assemble": "^0.4.42", 
    "css-parse": "^1.5.3", 
    "globule": "^0.2.0", 
    "grunt": "~0.4.2", 
    "grunt-combine-media-queries": "^1.0.19", 
    "grunt-contrib-clean": "^0.6.0", 
    "grunt-contrib-concat": "^0.3.0", 
    "grunt-contrib-connect": "^0.6.0", 
    "grunt-contrib-copy": "~0.5.0", 
    "grunt-contrib-cssmin": "^0.10.0", 
    "grunt-contrib-jshint": "^0.8.0", 
    "grunt-contrib-less": "^0.9.0", 
    "grunt-contrib-uglify": "^0.3.3", 
    "grunt-contrib-watch": "^0.5.3", 
    "grunt-cssshrink": "0.0.5", 
    "grunt-lesslint": "^1.1.7", 
    "grunt-modernizr": "^0.5.2", 
    "grunt-prettify": "^0.3.5", 
    "grunt-replace": "^0.6.2", 
    "grunt-stripmq": "0.0.3", 
    "handlebars-helper-repeat": "^0.2.0", 
    "load-grunt-tasks": "^0.2.1", 
    "pretty": "^0.1.2", 
    "time-grunt": "^0.2.10" 
    }, 
    "keywords": [ 
    "assemble", 
    "templates", 
    "handlebars", 
    "site generator", 
    "site builder", 
    "grunt" 
    ] 
} 

ich dies oben nicht wirklich festgelegt haben und die meisten meiner Kenntnis von Grunzen, Stengeln Knoten aus ein paar Tagen Forschung so ich m nicht 100% sicher, warum das so konfiguriert ist wie es ist. Offen für bessere Vorschläge, wenn etwas verblüffend falsch ist?

+0

Ja, es ist besser, auf jedem Build neu zu installieren. Nun, wenn es wirklich langsam ist, und angenommen, es ist ein Netzwerkproblem, wie wäre es mit der Einrichtung eines eigenen npm-Cache-Servers auf Ihrem LAN? http://willcodefor.beer/setup-your-own-npm-cache-server/ –

+0

TBH, ich habe auf grunt, seine 56Mb Abhängigkeiten aufgegeben, die so groß sind, dass das Windows-Dateisystem mir einige nicht anzeigen lassen wird von ihnen! Ich werde YuiCompress von Powershell ausführen und damit fertig sein. – Liam

Antwort

2

Möglicherweise möchten Sie auch Artifact dependencies konfigurieren.

Damit meine ich; Sie können eine separate Build-Konfiguration, die zwei Dinge schaffen:

  • npm install zu holen über die alle 8K Dateien
  • speichert den node_modules Ordner als ein Artefakt (als Archiv gepackt, warum nicht?)

Diese Konfiguration könnte dann einige trigger rules konfiguriert haben, um den Build zu starten, wenn sich etwas in der Datei package.json ändert.

Dann hängt Ihre Hauptkonfiguration, die Sie im Moment haben, von der ersten ab. Es werden dann Artifacts-Regeln konfiguriert, um node_modules zu holen, und das war's.

+0

Ziemlich gute Idee, ich werde mich wirklich darum kümmern – Liam