jwhitley / requirejs-rails

RequireJS support for your Rails 3 or 4 application
MIT License
592 stars 201 forks source link

Misunderstanding about `modules` in requirejs.yml #190

Open StevenLangbroek opened 10 years ago

StevenLangbroek commented 10 years ago

I think I'm misunderstanding the modules node in requirejs.yml. The documentation says:

Pulled in via a dynamic require() call. Modules which are solely referenced by a dynamic require() call (i.e. a call not optimized by r.js) must be specified in the modules section in order to produce a correct build.

I've added a couple of modules in our requirejs.yml, like so:

modules:
  - name: 'main'
  - name: 'dash/dash'
  - name: 'page_controllers/applications'
  - name: 'page_controllers/category_blacklists'
  - name: 'page_controllers/companies'
  - name: 'page_controllers/mediations'
  - name: 'page_controllers/offer_filters'

However, when i set RAILS_ENV=production, and run $ bundle exec rake assets:precompile, they do not get compiled. The only file that gets optimised by r.js seems to be the main module. The page_controller modules are dynamically called in main.js, but those calls fail as they're not in public/assets. Any thoughts as to what's going on here?

carsomyr commented 10 years ago

@StevenLangbroek You'll have to provide an example app for me to see what's going on. The description is not enough.

StevenLangbroek commented 10 years ago

@carsomyr I can't give you access to our repo (private). I'm not using the almond build, i tried settings digest to false in our deploy script, i've tried adding the modules to the priority node, but it just never compiles any other modules through r.js than the one we're loading through a requirejs_include_tag. Is that intended behavior?

StevenLangbroek commented 10 years ago

Ok, so I found out what's going on:

Our modules are in app/assets/javascripts/page_controllers. If I put them in app/assets/javascripts, and remove the folder name from requirejs.yml modules list, it works as expected.

So before:

modules:
  - name: 'main'
  - name: 'dash/dash'
  - name: 'page_controllers/applications'
  - name: 'page_controllers/category_blacklists'
  - name: 'page_controllers/companies'
  - name: 'page_controllers/mediations'
  - name: 'page_controllers/offer_filters'

after:

modules:
  - name: 'main'
  - name: 'dash'
  - name: 'controller_applications'
  - name: 'controller_category_blacklists'
  - name: 'controller_companies'
  - name: 'controller_mediations'
  - name: 'controller_offer_filters'

Think this is quite the caveat, and should maybe go into README.md. Thoughts?

carsomyr commented 10 years ago

@StevenLangbroek That helps! I thought this issue was fixed a long time ago, but I'll take a second look.

eduardojmatos commented 10 years ago

@StevenLangbroek @carsomyr do you know if this is happening with paths too?