Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Supporting require.js configs #60

Closed
Juice10 opened this issue Sep 29, 2014 · 3 comments
Closed

Supporting require.js configs #60

Juice10 opened this issue Sep 29, 2014 · 3 comments

Comments

@Juice10
Copy link

Juice10 commented Sep 29, 2014

I'm trying to bundle moment.js with my project without it polluting the global scope.
I'm using amdclean to clean up all the AMD references and require in moment in the correct places throughout my bundled file.

To get moment running I need to supply the following config to requirejs:
Source: http://momentjs.com/docs/#/use-it/require-js/

require.config({
    config: {
        moment: {
            noGlobal: true
        }
    }
});

How can I get this working with AMDClean?

Here is some sample code I ripped from moment.js

require.config({
    config: {
        moment: {
            noGlobal: true
        }
    }
});

define('moment', function(require, exports, module) {
  if(module.config && module.config() && module.config().noGlobal === true) {
    // release the global variable
    console.log('released');
  }
  return 'moment moment moment moment';
});

And this is what amdclean gives me

;(function() {
var moment;
require.config({ config: { moment: { noGlobal: true } } });
moment = function (exports) {
  if (module.config && module.config() && module.config().noGlobal === true) {
    // release the global variable
    console.log('released');
  }
  return 'moment moment moment moment';
}();
}());
@gfranko
Copy link
Owner

gfranko commented Oct 8, 2014

With the AMDclean 2.3.0 release, the config option is now supported (when you pass it to the amdclean.clean() method).

Unfortunately, the way moment.js is written, this AMDclean update does not release the global moment property. Please create a ticket for moment.js to support releasing the global moment property when a project is built into one file (it does not even work if you bundle everything into one file and include Require.js).

Thanks and let me know if you have any questions!

@gfranko gfranko closed this as completed Oct 8, 2014
@jhchill666
Copy link

Any update on this, from either side?

I'm having a heap of problems with RequireJS, AmdClean and Moment.

On some build boxes, everything works as expected, and on identical other boxes, get moment is undefined all over the place.

On the boxes that work, amdclean yeilds the following:

_moment_ = function (require, exports, module) {
      if (module.config && module.config() && module.config().noGlobal === true) {
        // release the global variable
        globalScope.moment = oldGlobalMoment;
      }
      return moment;
    }({}, {}, module.moment);

And on non-working builds:

moment = function (require, exports, module) {
      if (module.config && module.config() && module.config().noGlobal === true) {
        // release the global variable
        globalScope.moment = oldGlobalMoment;
      }
      return moment;
    }({}, {}, module.moment);

As you can see, the working version wraps the moment variable in underscores, _moment_.

Why does AmdClean does this on some boxes and not on others? Is there a way to ensure it is wrapped?

@joshdick
Copy link

I'm running into similar issues while trying to use the RequireJS Optimizer and AMDclean 2.7.0 to bundle moment.js 2.10.6 into a project.

My project is wrapped with a UMD wrapper which is very similar to the one that appears in moment.js. When moment.js is bundled into the built file, I end up seeing ReferenceError: moment is not defined when my built file is loaded as an AMD module. It appears that moment's UMD wrapper causes it to register as an anonymous AMD module when it appears inside another UMD wrapper, rather than exporting itself as a global.

It looks like this could be related to moment/moment#1574 or some of the other issues mentioned in it?

@gfranko or @ichernev, I'm curious if either of you have any suggestions or insights? Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants