5

Ich möchte Grunt verwenden, um ein Durandal-Projekt zu bauen, weil Weyland völlig undokumentiert ist und nicht so Standard wie Grunt ist.Gebäude Durandal mit Grunt (R.js + Text)

Um dies zu tun, muss die grunt Aufgabe alle js und html Dateien während der Optimierung holen, aber ich kann RequireJS nicht erreichen, um die HTML Dateien über das Textmodul einzubinden.

Es sieht aus wie Weyland kopiert die Textdateien manually, aber ich kann nicht herausfinden, was es tut, um requirejs (oder Mandel, in diesem Fall), um sie tatsächlich zu verwenden. Ich habe gesehen this question, aber es erfordert die Text-Module, um in der Aufruf verwiesen werden, die nicht in Durandal getan wird.

für My gruntfile benötigen verwendet diese Konfigurations

requirejs: { 
      build: { 
       options: {     
        name: '../lib/require/almond-custom', //to deploy with require.js, use the build's name here instead 
        insertRequire: ['main'], //needed for almond, not require 
        baseUrl: 'src/client/app', 
        out: 'build/main-built.js', 
        mainConfigFile: 'src/client/app/main.js', //needed for almond, not require 
        wrap: true, //needed for almond, not require 
        paths: { 
         'text': '../lib/require/text', 
         'durandal':'../lib/durandal/js', 
         'plugins' : '../lib/durandal/js/plugins', 
         'transitions' : '../lib/durandal/js/transitions', 
         'knockout': '../lib/knockout-2.3.0', 
         'bootstrap': '../lib/bootstrap.min', 
         'jquery': '../lib/jquery-1.9.1', 
         'Q' : '../lib/q.min' 
        }, 
        inlineText: true, 
        optimize: 'none', 
        stubModules: ['text']    
       } 
      } 
     } 
+0

Warum müssen Sie HTML-Dateien optimieren? – dcodesmith

+0

Es geht nicht darum, sie zu optimieren, sondern darum, sie zu bündeln. Das Textmodul von RequireJS macht asynchrone Aufrufe von Text, in Durandals Fall sind es HTML-Dateien, die es als Teilzeichen verwendet. Der Zweck von R.js ist es, Ihren JS in einer Datei zu bündeln, und es ist sinnvoll, den "require" -d HTML-Code für Durandal zu bündeln. Diese Operation wird unterstützt, aber in Durandas Fall sind die Anforderungen dynamisch. Ich weiß nicht, wie man dynamisches Bündeln macht oder ob es überhaupt möglich ist. – Tyrsius

Antwort

5

Vielleicht möchten Sie https://npmjs.org/package/grunt-durandal einen Versuch geben. Ich benutze dies als Teil eines gruntbasierten Build-Prozesses. Ein Beispiel finden Sie in https://github.com/RainerAtSpirit/HTMLStarterKitPro.

durandal: { 
    main: { 
     src: ['app/**/*.*', 'lib/durandal/**/*.js'], 
      options: { 
      name: '../lib/require/almond-custom', 
       baseUrl: requireConfig.baseUrl, 
       mainPath: 'app/main', 
       paths: mixIn({}, requireConfig.paths, { 'almond': '../lib/require/almond-custom.js' }), 
       exclude: [], 
       optimize: 'none', 
       out: 'build/app/main.js' 
     } 
    } 
}, 
+0

Das sieht gut aus! Die Dokumentation muss Sie wissen lassen, dass 'name' ist, wie Sie den Mandelpfad überschreiben, aber das ist ein solider Start. Danke Rainer! – Tyrsius

+0

Deshalb nennt die Dokumentation die 'grunt build' Task experimental :). – RainerAtSpirit

+0

Was macht die Optimize-Eigenschaft und welche anderen Werte werden benötigt? Ich kann anscheinend keine Informationen darüber finden. – Norbert

2

Als mögliche Alternative zu Grunt würde ich bei Mimosa suchen vorschlagen. Es ist nicht so weit verbreitet wie Grunt, aber es ist gut dokumentiert und benötigt viel weniger Konfiguration und wenn Sie mit dem Durandal-Skelett beginnen, wird alles für Sie einschließlich Inlining HTML konfiguriert.

Durandal empfiehlt es auch und zeigt, wie mit ihm zu beginnen: http://durandaljs.com/pages/get-started/

Sie make start Entwicklung zu starten, laufen und make dist es haben alles für die Freigabe verpacken.