Skip to content
This repository has been archived by the owner on Jun 10, 2018. It is now read-only.

require_directory doesn't work like expected #183

Closed
ream88 opened this issue Sep 5, 2011 · 21 comments
Closed

require_directory doesn't work like expected #183

ream88 opened this issue Sep 5, 2011 · 21 comments

Comments

@ream88
Copy link

ream88 commented Sep 5, 2011

Hey guys,

I have following problem with sprockets: http://stackoverflow.com/questions/7312653/sprockets-require-directory-problem

@josh
Copy link
Contributor

josh commented Sep 6, 2011

./ means in the current directory.

If you want

 /*
  *= require_directory ./yahoo
  */

It would have to be a file in vendor/assets/javascripts.

@josh josh closed this as completed Sep 6, 2011
@jacob-carlborg
Copy link

I'm having the same issue. I don't see why require_directory and require_tree needs a relative path where require does not. I mean, I can do:

//= require foo

And have foo.js in vendor/assets/javascripts. But the same doesn't work for require_directory or require_tree. Why can't I do like this:

//= require_tree bar

And it will find the bar directory in vendor/assets/javascripts? An alternative would be to have specific requires for the vendor and lib directories. This is the current workaround I'm using:

app/assets/javascripts/application.js:

//= require foo

vendor/assets/javascripts/foo.js:

//= require_tree ./foo

@ream88
Copy link
Author

ream88 commented Sep 6, 2011

Thank you @josh, seems I need some kind of proxy file located in my vendor/assets/stylesheets directory. Like a yahoo.css included in my application.css:

/*
 *= require_directory ./yahoo
 */

@hadiS
Copy link

hadiS commented Sep 7, 2011

I totally agree with @jacob-carlborg and thanks for the workaround.

@jerryshen
Copy link

I have the problem too,
I want to require a directory in vendor/assets/javascripts/foo
require ./foo

got require_directory argument must be a relative path

@jacob-carlborg
Copy link

I think this issue should be reopened because several other have the same problem.

@jerryshen
Copy link

sorry , type wrong, should be

require_directory ./foo

got require_directory argument must be a relative path

@alanrubin
Copy link

Got to the same issue : My use case is that I'm going to configure a load_path at runtime (depending on the plugin I'm using), so in the main file I need to configure "require_directory stores", and stores js files will be added depending on the load_path I have configured.

Please think about reopening and fixing this issue.

@fourcolors
Copy link

I agree, this should not be only relative for require_directory, please consider reopening.

@TatianaTyu
Copy link

I got this "require_directory argument must be a relative path" issue as well. Solved without proxies by specifying:
*= require_tree ../../../vendor/assets/stylesheets/.
It was not obvious to me, though, as I thought the path should be somehow relative to vendor/assets directory, not the manifest file, hence a lot of trial and error.

@milushov
Copy link

milushov commented Aug 3, 2012

same problem

@jeffchuber
Copy link

+1

1 similar comment
@runemadsen
Copy link

+1

@JamesHagerman
Copy link

Has this still not been addressed? This is obviously a continuing issue...

@JamesHagerman
Copy link

After a bit more research, I understand this issue a bit more:

This:
*= require_directory ./derp
Equates to looking for files in:
app/assets/stylesheets/derp

While this:
//= require_directory ./derp
Looks in:
app/assets/javascripts/derp

So, required_directory does not handle the "vendor" directory tree at all.

This still seems like an issue but whatever...

@pichotweb
Copy link

It don't work for me too, i think the './' was a reference for all the directories who rails see like 'assets', does not matter where is our assets if is in 'vendor', 'lib' or any directory we have set in our config file.

For me, this is a open issue.

@fmy
Copy link

fmy commented May 8, 2013

+1

1 similar comment
@LeEnno
Copy link

LeEnno commented May 26, 2013

+1

@LeEnno
Copy link

LeEnno commented May 26, 2013

The official Rails way to solve this is a little like @jacob-carlborg suggested and is described here.

In app/assets/javascripts/application.js:

//= require foo

In vendor/assets/javascripts/foo/index.js:

//= require_tree .

As long as the file is called index.js everything will work. All files inside of vendor/assets/javascripts/foo will be included.


Nevertheless I think we have a bug here. require_directory and require_tree should look in vendor/assets directory, just like require does.

@dv
Copy link

dv commented Apr 6, 2014

So, @josh you referenced another bug report here, but there still is no explanation why require_directory et al can't work as described here. Is there a technical reason, or is it just out of purity considerations?

To me, and apparently a lot of other people, it seems logical and more intuitive that a require_directory and require_tree should look in all load paths including vendor/assets, exactly like require does. It doesn't make sense, from a UI perspective, that there would be any difference between these two types of directives in where it searches for files.

@pcasaretto
Copy link

👍 @dv

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

No branches or pull requests