requirejsr.jsrequirejs-text

RequireJS Optimizer throws ReferenceError: text is not defined


I have been using r.js to attempt to minify a fairly large project and I'm having trouble with the text plugin. I am using node.js and a build file that goes as follows:

Build File

({

    name: '../main',

    baseUrl: '../../js/app',

    appDir: "./app",

    dir: 'build',

    paths: {

        jquery: '../lib/jquery/jquery-1.10.2.min',
        underscore: '../lib/underscore/underscore-min',
        backbone: '../lib/backbone/backbone-min',
        text: '../lib/require/text',
        picker: '../lib/pickadate/picker',
        pickerDate: '../lib/pickadate/picker.date',
        pickerLegacy: '../lib/pickadate/legacy'
    },

    mainConfigFile : '../js/main.js'

})

Main Config File

requirejs.config({

    baseUrl: 'js/app',

    paths: {

        jquery: '../lib/jquery/jquery-1.10.2.min',
        underscore: '../lib/underscore/underscore-min',
        backbone: '../lib/backbone/backbone-min',
        text: '../lib/require/text',
        picker: '../lib/pickadate/picker',
        pickerDate: '../lib/pickadate/picker.date',
        pickerLegacy: '../lib/pickadate/legacy'
    },

    shim: {
        picker: ['jquery', 'pickerLegacy'],
        pickerDate: {
            deps: ['jquery', 'picker'],
            exports: 'DatePicker'
        },
        backbone: {
            deps: ['underscore', 'jquery'],
            exports: 'Backbone'
        },
        underscore: {
            exports: '_'
        },
        text : {
            exports : 'text'
        }
    }

});

The references above are all verified correct. Whenever I try to compile this, I get the following output in the console:

node r.js -o app.build.js

Tracing dependencies for: ../main
ReferenceError: text is not defined
In module tree:
    ../main
      app
        router
          views/pages/home
            views/panel/allStoresPanel
              text

Error: ReferenceError: text is not defined
In module tree:
    ../main
      app
        router
          views/pages/home
            views/panel/allStoresPanel
              text

    at eval (eval at <anonymous> (C:\code\Web\DixonsDashboard\deploy\_compiler\r.js:23699:64), <anonymous>:1:1)

I have no idea why it finds text to be undefined. The path to it is definitely correct - the site works like a charm in it's current expanded format. I have tried all of the options available to r.js and none of them seem to make any difference.

If I delete the file, I get a "No such file or directory" error, so it looks like it's finding the file OK.

Can anybody point out what I'm missing here?


Solution

  • You only configure shim for plugins that are not AMD compatible. The "text" plugin is already AMD compatible so running it through the shim mechanism actually breaks it.


    I've just tested with a simplified version of your code: including text in the shim section does show "ReferenceError: text is not defined", removing it makes the build work fine.