grunt requirejs'define is undefined'

时间:2013-03-06 12:11:21

标签: javascript requirejs gruntjs grunt-contrib-requirejs

我正在尝试使用RequireJS使用grunt-contrib-requirejs插件优化GruntJS

问题是我的代码在优化之前工作正常,然后在优化之后,在控制台上显示Uncaught ReferenceError: define is not defined

这是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');

}

4 个答案:

答案 0 :(得分:12)

将require.js文件添加为“include”选项应该有效。

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

答案 1 :(得分:8)

由于define是一个requireJs函数,您似乎错过了加载requireJs或任何其他AMD加载程序。如果你不需要加载任何其他AMD模块然后你的编译一次,你可以使用像almond这样的轻量级装载机垫片。

答案 2 :(得分:0)

正如缺少requirejs-script之前所指出的那样。

官方要求js-page 建议你这样做(从我的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"
    }
  }
},

观察选项路径包含,这些选项对于要求定义至关重要。 只需将requireLib选项指向require.js文件即可。

请在此处查看官方答案:http://requirejs.org/docs/optimization.html#onejs

答案 3 :(得分:-1)

似乎grunt-contrib-requirejs默认情况下不会编译requirejs。您可以使用concat重新添加requirejs。

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

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