I am trying to build a project with requirejs and AMDClean to completely remove the need for amd in the production version. Although I am able to get the requirejs optimizer to put my files together I am not able to remove require/define from it using amdclean. Here is my requirejs code (written in grunt using coffeescript):
requirejs:
compile:
options:
baseUrl: './client'
mainConfigFile: "client/main.js"
name: 'main'
out: 'build/main.js'
Here client/main.js is the entry point to my application.I can call this file using the script tag:
<script src="client/vendor/require.js" data-main="build/main.js"></script>
Here is the requirejs task for grunt with amdclean
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}());'
))
I expect to be able to call this file using this tag:
<script src="build/main.js"></script>
Which is not happening. It throws an error saying: models_MenuItem is not defined which is the error I usually get when the modules are not loaded in the right order. The file built with requirejs optimizer and the original pre-build javascript work normally. Please help me correct my amdclean configuration or identify where the problem really is.
Make sure to set your
filePathAMDclean option correctly:There could also be a couple of other reasons:
Make sure to set the Require.js skipModuleInsertion option to true. By default, Require.js creates a
define()wrapper for files that are not wrapped in adefine(). This can cause issues with AMDclean.Make sure you are not pointing to minified files when building with AMDclean. This will definitely cause issues.