【问题标题】:grunt requirejs 'define is undefined'grunt requirejs '定义未定义'
【发布时间】:2013-03-06 12:11:20
【问题描述】:

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

问题是我的代码在优化之前运行良好,然后在优化之后,在控制台上显示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');

}

【问题讨论】:

  • 如何使用加载编译后的文件?由于define 是一个requireJs 函数,您似乎错过了加载requireJs。
  • 是的,这是因为 requirejs 不包括在内。一旦我加载它,没有错误。
  • ok 也会添加这个作为答案。
  • @OtskimanotSqilal 你是如何包含它的?您是否将其添加为单独的脚本标签或将缩小后的脚本放入 data-main?
  • @OtskimanotSqilal & Andreas 正如前面的评论者所问的,你到底是怎么做到的?是在 main.js 文件中引用了 require lib,还是您修改了 Gruntfile?我也有同样的问题。

标签: javascript requirejs gruntjs grunt-contrib-requirejs


【解决方案1】:

将 require.js 文件添加为“包含”选项应该可以工作。

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

【讨论】:

  • 我也有类似的问题,但那不就是在输出中添加 requirejs 吗?它似乎没有通过优化器。
  • 是的,它确实将 RequireJS 添加到了输出中。这是解决问题的一个简单方法,但在缩小脚本中使用更小的 AMD 加载程序(请参阅已接受的答案)会更理想。
【解决方案2】:

由于define 是一个 requireJs 函数,您似乎错过了加载 requireJs 或任何其他 AMD 加载程序。如果您不需要加载任何其他 AMD 模块,那么您只需编译一次,您可以使用轻量级加载程序垫片,例如 almond

【讨论】:

    【解决方案3】:

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

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

    观察 pathsinclude 选项,它们对于定义 require 至关重要。 只需将 requireLib 选项指向您的 require.js 文件即可。

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

    【讨论】:

      【解决方案4】:

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

      concat : {
        dist : {
          src : ['./optimized.js', 'path/to/requirejs.js'],
          dest : './optimized.js'
        },
      }
      
      grunt.loadNpmTasks('grunt-contrib-concat');
      

      【讨论】:

        猜你喜欢
        • 2016-01-21
        • 1970-01-01
        • 2013-12-13
        • 2013-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多