【问题标题】:Using AMDclean with grunt将 AMDclean 与 grunt 一起使用
【发布时间】:2014-07-23 19:13:25
【问题描述】:

我正在尝试使用 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 标签调用这个文件:

<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 配置或找出问题所在。

【问题讨论】:

    标签: requirejs gruntjs amd grunt-contrib-requirejs


    【解决方案1】:

    确保正确设置filePath AMDclean 选项:

    'filePath': outputFile
    

    还有其他几个原因:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-31
      • 2015-03-06
      • 2017-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多