django-bower icon indicating copy to clipboard operation
django-bower copied to clipboard

jquery install example only works with link to dist/jquery.js

Open stuaxo opened this issue 11 years ago • 8 comments

I installed jquery, but

/static/jquery/jquery.js did not work, however /static/jquery/dist/jquery.js did work - is this a configuration issue on my side ?

stuaxo avatar Mar 04 '14 15:03 stuaxo

The same for angular-ui - I have to use angular-ui/build/angular-ui.js

It's a bit confusing, I have to check each component to find it's files.

stuaxo avatar Mar 04 '14 16:03 stuaxo

I'm new to bower, but just wondering if the finder should be able to use the 'main' component of bower.json ?

In the jquery case, it points to dist/jquery.js

So, the finder should possibly be able to return it if you do jquery/jquery.js ?

stuaxo avatar Mar 04 '14 19:03 stuaxo

@stuaxo main could be an array such as is the case with Bootstrap. How would you propose that the finder behaves then?

gsong avatar Mar 06 '14 20:03 gsong

Ah, interesting .. I'm very new to bower .. (as of 3 days ago in fact).

How about template tags instead ?

{% bower_scripts %}

  • would expands to script tags, pointing to any .javascript it finds

To find out if something is javascript, python mimetypes could be used at installation time:

import mimetypes
mimetypes.guess_type("bootstap.js")
('application/javascript', None)

{% bower_stylesheets %}

Could do the same for stylesheets.

These could have options to limit them to certain bower apps

{% bower_scripts "angularjs", "ng-grid" %}

(I'm not entirely sure if that notation will work for templates, but basically some way of passing the script names).

stuaxo avatar Mar 07 '14 11:03 stuaxo

I don't think an automatic way of discovery is the way to go, since there's no guarantee how each bower package structures its code and artifacts. I think the best you can hope for is to manually add your own mapping to alias the package structure, something like:

BOWER_COMPONENTS_MAPPING = {
    'jquery': 'jquery/dist',
    'angular': 'angular-ui/build',
    'bootstrap': 'bootstrap-sass-official/vendor/assets',
}

I would hook that into the behavior for djangobower.finders.BowerFinder (or your own custom finder) for it to know how to untangle the aliases, or fall back to searching within os.path.join(BOWER_COMPONENTS_ROOT, bower_components).

For certain purposes, template tags are too late, such as django-pipeline.

Your other options are:

  1. Add those paths to your STATICFILES_DIRS:
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'my_project/assets'),
    os.path.join(BOWER_COMPONENTS_ROOT, 'bower_components/jquery/dist'),
    os.path.join(BOWER_COMPONENTS_ROOT, 'bower_components/angular-ui/build'),
    os.path.join(BOOTSTRAP_ROOT, 'bower_components/bootstrap-sass-official/vendor/assets'),
)

But you'll have to be pretty sure that the packages don't collide with each other in terms of their component names. 2. Use something like Vendorer, which gives you the chance to manipulate the directory structure however you want (I haven't tested this code, but you get the idea).

file 'build/jquery.zip',
     'https://github.com/jquery/jquery/archive/2.1.0.zip' do |fp|
  build_dir = File.dirname(fp)
  unzipped_dir = File.join(build_dir, 'jquery-2.1.0')
  static_dir = 'bower_components/jquery'

  system "cd #{build_dir} && unzip -o #{File.basename(fp)}"
  system "rm -rf #{static_dir}"
  system "mkdir -p #{static_dir}"
  system "cp -r #{unzipped_dir}/dist/* #{static_dir}"
end

gsong avatar Mar 07 '14 14:03 gsong

Ahh.. yes, I didn't think about the fact that something listed in main could call resources not listed.

Once I've added more bower dependencies to my project I might have a go at auto discovery and see if I can make it work.

stuaxo avatar Mar 07 '14 14:03 stuaxo

Good luck! ✌️

On Mar 7, 2014, at 6:26 AM, Stuart Axon [email protected] wrote:

Ahh.. yes, I didn't think about the fact that something listed in main could call resources not listed.

Once I've added more bower dependencies to my project I might have a go at auto discovery and see if I can make it work.

— Reply to this email directly or view it on GitHub.

gsong avatar Mar 07 '14 15:03 gsong

Please change the documentation of django-bower and replace the path in the example line < script type="text/javascript" src='{% static 'jquery/jquery.js' %}'> with 'jquery/dist/jquery.min.js'

It may avoid some initial frustration with this great package and everyone understands that one has to look for the exact path inside bower_components.

MHellmund avatar Aug 29 '14 13:08 MHellmund