Andreas Köberle
Andreas Köberle

Reputation: 110912

RequireJs Module in node always returns undefined when using in a grunt task

I've a small config file that I need in frontend and in my grunt task.

js/config.js:

define(function() {
  return [
    {
      id: 'demo',
      displayName: 'Demo'
    }
  ];
});

I can load the file in frontend without problems it also work in node. var requirejs = require('requirejs');

requirejs.config({
  nodeRequire: require,
  baseUrl: './js'
});   
var config = requirejs('config')

But when I try to load the same file in a grunt task it returns undefined:

requirejs.config({
  nodeRequire: require,
  baseUrl: './js'
});   
grunt.registerTask('lala', function  () {
  var config = requirejs('config')
});

Upvotes: 0

Views: 1461

Answers (2)

Andreas Köberle
Andreas Köberle

Reputation: 110912

The problem was that the I require requireJs outside of the module.exports function. So this works after all:

module.exports = function(grunt) {

  var requirejs = require('requirejs');

  requirejs.config({
    nodeRequire: require,
    baseUrl: './js/cfe/app/platforms/as'
  });

  grunt.registerTask('lala', function  () {
    var config = requirejs('config')
  });
}

Upvotes: 1

jgillich
jgillich

Reputation: 76209

This code works for me. First I've installed requirejs:

cd /path/to/code/directory
npm install requirejs

Then in my app.js:

var requirejs = require('requirejs');

requirejs.config({
  nodeRequire: require,
  baseUrl: './js'
});   

var config = requirejs('config');
console.log(config);

And in the js/config.js:

define(function() {
  return [
    {
      id: 'demo',
      displayName: 'Demo'
    }
  ];
});

When I run it, I get the correct result:

$ node app.js
[ { id: 'demo', displayName: 'Demo' } ]

I'm using Node v0.10.1.

Upvotes: 0

Related Questions