2013-03-06 6 views
14

Ich versuche, RequireJS mit GruntJS zu optimieren, mit dem grunt-contrib-requirejs Plugin.grunt requirejs 'define ist undefined'

Das Problem ist mein Code, um es vor der Optimierung funktioniert gut, und dann, nachdem es zu optimieren, auf der Konsole sagt es Uncaught ReferenceError: define is not defined.

Hier ist die Gruntfile.js

module.exports = function (grunt) { 
    grunt.loadNpmTasks('grunt-contrib-requirejs'); 

    grunt.initConfig({ 
    requirejs: { 
     compile : { 
      options : { 
       name : 'main', 
       baseUrl : ".", 
       mainConfigFile : "./main.js", 
       out : "./optimized.js", 
       preserveLicenseComments: false 
      } 
     } 
} 
    }) 

    grunt.registerTask('default', 'requirejs'); 

} 
+0

Wie Sie die kompilierte Datei verwenden, laden? Da 'define' eine requirJs-Funktion ist, scheint es so zu sein, dass Sie RequireJs nicht laden können. –

+0

Ja, weil 'requirejs' nicht enthalten ist. Sobald ich es geladen habe, habe ich keine Fehler. –

+1

ok wird dies als Antwort hinzufügen. –

Antwort

8

Wie define ist ein requireJs funktioniert es scheint, dass Sie verpassen requireJs oder andere AMD-Loader zu laden. Wenn Sie kein anderes AMD-Modul laden müssen, können Sie eine leichte Lade-Shim wie almond verwenden.

-1

Es scheint, dass der grunt-contrib-requiredjs requirejs standardmäßig nicht kompiliert. Sie könnten concat verwenden, um requirejs wieder hinzuzufügen.

concat : { 
    dist : { 
    src : ['./optimized.js', 'path/to/requirejs.js'], 
    dest : './optimized.js' 
    }, 
} 

grunt.loadNpmTasks('grunt-contrib-concat'); 
12

Das Hinzufügen der require.js-Datei als "include" -Option sollte funktionieren.

requirejs: { 
    compile : { 
     options : { 
      name : 'main', 
      baseUrl : ".", 
      mainConfigFile : "./main.js", 
      out : "./optimized.js", 
      preserveLicenseComments: false, 
      include: ['path/to/require.js'] 
     } 
    } 
} 
+1

Ich habe ein ähnliches Problem, aber würde nicht nur Requirejs zur Ausgabe hinzufügen? Es scheint nicht so, als ob es durch den Optimierer geht. – hybrid9

+0

Ja, es fügt RequireJS zur Ausgabe hinzu. Es ist eine einfache Lösung für das Problem, aber die Verwendung eines kleineren AMD-Laders im minimierten Skript (siehe akzeptierte Antwort) wäre ideal. –

0

Wie bereits ausgeführt, bevor der requirejs-Skript fehlt.

Dies ist die Art und Weise der offizielle requirejs-Seite Sie es (aus meiner gruntfile riss) tun schlägt vor:

requirejs: { 
    compile: { 
    options: { 
     baseUrl: "src/js", 
     mainConfigFile: 'src/js/require.config.js', 
     paths: { 
     requireLib: "vendor/require/require" 
     }, 
     include: "requireLib", 
     name: "require.config", 
     out: "dist/js/bundle.js" 
    } 
    } 
}, 

Beachten Sie die Optionen Pfade und umfassen, auch solche entscheidend sind für die erfordern zu definieren. Richten Sie die requireLib-Option nur auf Ihre require.js-Datei.

die offizielle Antwort Siehe hier: http://requirejs.org/docs/optimization.html#onejs