2013-10-01 4 views
7

Ich verwalte ein Projekt in angularjs, mit der Standard-Verzeichnisstruktur, mit Ausnahme der App-Verzeichnis, die Versionierung verwendet (dh. "App/0.0.0 /", "app/0.1.0 /" etc ..).Wie verwende ich die Eigenschaft "version" in package.json als das Verzeichnis der App in grunt?

Ich versuche package.json Datei „Version“ Eigenschaft verwenden Grunt die richtige Verzeichnis zu laden, damit ich nicht von Hand haben, um den Pfad in gruntfile.js App zu ändern, aber aus irgendeinem Grund, den ich erhalte " Kann nicht "/" wenn ich "grunt server" ausführen.

besser, dies zu erklären, hier ist eine Probe meiner gruntfile.js:

var yeomanConfig = { 
app: 'app/<% pkg.version %>/', 
dist: 'dist' 
... 

grunt.initConfig({ 
    yeoman: yeomanConfig, 
    pkg: grunt.file.readJSON('package.json'), 
... 

Wenn ich manuell die Eigenschaft App ändern „app/0.0.0“ es funktioniert wie ein Charme also bin ich Das zu raten hat etwas mit dem Templating zu tun.

Irgendwelche Ideen?

Vielen Dank für die Hilfe.

Edit: Danke für die Korrektur Andreas und Matjaz, aber das Problem nicht lösen und gibt die gleichen Fehler ... Dies das Problem für mich löst aber ohne das Template-System:

var pkgVersion = grunt.file.readJSON('package.json').version; 
// configurable paths 
var yeomanConfig = { 
    app: 'app/'+pkgVersion, 
    dist: 'dist' 
}; 

Es ist ziemlich hässlich, aber es funktioniert. Auf eine richtige Lösung hoffen.

+0

Was ist mit '<% ​​= pkg.version%>'? Beachten Sie die "=" –

+0

Danke Ich habe versehentlich das "=" fallen gelassen, aber selbst nach der Korrektur bleibt das Problem bestehen. – onearmfrog

Antwort

3

Daten <%= verwenden, um echo:

<%= pkg.version %> 
13

Der beste Weg, dieses Szenario zu behandeln ist, dass in der grunt.initConfig die package.json definieren

grunt.initConfig({ 
    pkg: grunt.file.readJSON("package.json") 
}) 

Nach der Initialisierung über die Sie verwenden können die Eigenschaften von package.json in der Datei grunt.js.

<%= pkg.version %> 
<%= pkg.homepage %> 
+0

Das ist genau das, was ich tue .. Das Templating-System scheint nicht zu funktionieren grunt.initConfig daher können Sie nicht <% %> verwenden. – onearmfrog

+0

Wenn es außerhalb von grunt.initConfig nicht funktioniert, versuche es in einer Variablen zu speichern und wiederzuverwenden. – kartikluke

2

ich verlängern die appConfig mit dem Namen und Version:

var appConfig = { 
    app: require('./bower.json').appPath || 'app', 
    name: require('./package.json').name || 'angularapp', 
    version: require('./package.json').version || '1.0.0', 
    dist: 'dist' 
}; 

Dann können Sie die Variablen wie folgt zugreifen:

<%= yeoman.name %> 
<%= yeoman.version %> 

Für mich eine saubere Lösung mit einem optionalen Rückfall.

Verwandte Themen