我正在尝试使用 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 配置或找出问题所在。