使用AMDclean和grunt

时间:2014-06-03 12:37:44

标签: requirejs gruntjs amd grunt-contrib-requirejs

我正在尝试使用requirejs和AMDClean构建一个项目,以完全消除生产版本中对amd的需求。虽然我能够让requirejs优化器将我的文件放在一起,但我无法使用amdclean从中删除require / define。这是我的requirejs代码(使用coffeescript以grunt编写):

requirejs:
      compile:
        options:
          baseUrl: './client'
          mainConfigFile: "client/main.js"
          name: 'main'
          out: 'build/main.js'

这里client / main.js是我的应用程序的入口点。我可以使用脚本标记调用此文件:

<script src="client/vendor/require.js" data-main="build/main.js"></script>

以下是带有amdclean的grunt的requirejs任务

fs = require 'fs'
amdclean = require 'amdclean'

module.exports = (grunt) ->
  'use strict'
  grunt.initConfig(

    #Read Package.json
    pkg: grunt.file.readJSON('package.json')

    #Build task
    requirejs:
      compile:
        options:
          baseUrl: './client'
          mainConfigFile: "client/main.js"
          name: 'main'
          out: 'build/main.js'
          onModuleBundleComplete: (data) ->
            outputFile = data.path
            fs.writeFileSync(outputFile, amdclean.clean(
              'filePath': 'client/main.js'
              'globalModules': []
              'wrap':
                'start': '(function(){\n',
                'end': '\n}());'
            ))

我希望能够使用此标记调用此文件:

<script src="build/main.js"></script>

哪个没有发生。它抛出一个错误说:models_MenuItem is not defined这是我通常在没有按正确的顺序加载模块时得到的错误。使用requirejs优化器和原始预构建javascript构建的文件正常工作。请帮我纠正我的amdclean配置或确定问题的确切位置。

1 个答案:

答案 0 :(得分:0)

确保正确设置filePath AMDclean选项:

'filePath': outputFile

还可能有其他几个原因:

确保将Require.js skipModuleInsertion 选项设置为 true 。默认情况下,Require.js为未包含在define()中的文件创建define()包装器。这可能会导致AMDclean出现问题。

使用AMDclean构建时,请确保您没有指向缩小的文件。这肯定会引起问题。