2013-03-06 13 views
14

Próbuję zoptymalizować RequireJS przy użyciu GruntJS, używając wtyczki grunt-contrib-requirejs.Wymagana funkcja oznaczania jest niezdefiniowana "

Problem polega na tym, że mój kod działa poprawnie przed zoptymalizowaniem go, a następnie po jego optymalizacji na konsoli jest napisane: Uncaught ReferenceError: define is not defined.

Oto 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

Jak użyć wczytać skompilowany plik? Ponieważ 'define' jest funkcją requireJs, wydaje się, że brakuje ci załadowania requireJs. –

+0

Tak, ponieważ 'requirejs' nie został uwzględniony. Po załadowaniu nie ma błędów. –

+1

ok doda to również jako odpowiedź. –

Odpowiedz

8

Jak define JEST requireJs funkcjonować wydaje pominięcia załadować requireJs lub innego ładowarka AMD. Jeśli nie musisz ładować żadnego innego modułu AMD, a następnie zastosujesz go raz, możesz użyć lekkiego shimera ładującego, takiego jak almond.

-1

Wygląda na to, że element-contrib-requirejs nie kompiluje domyślnie programu requirejs. Możesz użyć programu concat, aby ponownie dodać requirejs.

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

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

Dodanie pliku require.js jako opcji "uwzględnij" powinno działać.

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

Mam podobny problem, ale czy nie po prostu doda requirejs do wyjścia? Wygląda na to, że nie przechodzi przez optymalizator. – hybrid9

+0

Tak, dodaje parametr RequireJS do wyjścia. Jest to proste rozwiązanie problemu, ale użycie mniejszego programu ładującego AMD w skróconym skrypcie (patrz zaakceptowana odpowiedź) byłoby bardziej idealne. –

0

Jak wskazano wcześniej, brakuje skryptu requirejs.

To jest sposób oficjalne requirejs stron sugeruje to zrobić (zgrane z mojego gruntfile):

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" 
    } 
    } 
}, 

obserwować opcje ścieżki i zawierają, to są istotne dla require zostać określone. Wystarczy wskazać opcję requireLib na swoim pliku require.js.

Zobacz oficjalną odpowiedź tutaj: http://requirejs.org/docs/optimization.html#onejs

Powiązane problemy