Skip to content
This repository was archived by the owner on Mar 23, 2024. It is now read-only.

Commit 1ebd184

Browse files
committed
Add detection and proper handling of Bower-based modules
1 parent 3b70693 commit 1ebd184

File tree

1 file changed

+28
-17
lines changed

1 file changed

+28
-17
lines changed

lib/tasks/requirejs-rails_tasks.rake

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,12 @@ namespace :requirejs do
3434

3535
requirejs = ActiveSupport::OrderedOptions.new
3636

37-
task :clean => ["requirejs:setup"] do
37+
task clean: ["requirejs:setup"] do
3838
FileUtils.remove_entry_secure(requirejs.config.source_dir, true)
3939
FileUtils.remove_entry_secure(requirejs.driver_path, true)
4040
end
4141

42-
task :setup => ["assets:environment"] do
42+
task setup: ["assets:environment"] do
4343
unless defined?(Sprockets)
4444
warn "Cannot precompile assets if sprockets is disabled. Please set config.assets.enabled to true"
4545
exit
@@ -72,41 +72,52 @@ OS X Homebrew users can use 'brew install node'.
7272
end
7373

7474
namespace :precompile do
75-
task :all => ["requirejs:precompile:prepare_source",
76-
"requirejs:precompile:generate_rjs_driver",
77-
"requirejs:precompile:run_rjs",
78-
"requirejs:precompile:digestify_and_compress"]
75+
task all: ["requirejs:precompile:prepare_source",
76+
"requirejs:precompile:generate_rjs_driver",
77+
"requirejs:precompile:run_rjs",
78+
"requirejs:precompile:digestify_and_compress"]
7979

8080
# Invoke another ruby process if we're called from inside
8181
# assets:precompile so we don't clobber the environment
8282
#
8383
# We depend on test_node here so we'll fail early and hard if node
8484
# isn't available.
85-
task :external => ["requirejs:test_node"] do
85+
task external: ["requirejs:test_node"] do
8686
ruby_rake_task "requirejs:precompile:all"
8787
end
8888

89-
# copy all assets to tmp/assets
90-
task :prepare_source => ["requirejs:setup",
91-
"requirejs:clean"] do
89+
# Copy all assets to the temporary staging directory.
90+
task prepare_source: ["requirejs:setup",
91+
"requirejs:clean"] do
92+
bower_json_pattern = Regexp.new("\\A(.*)/bower\\.json\\z")
93+
js_ext = requirejs.env.extension_for_mime_type("application/javascript")
94+
9295
requirejs.config.source_dir.mkpath
9396

9497
requirejs.env.each_logical_path do |logical_path|
95-
next unless requirejs.config.asset_allowed?(logical_path)
96-
if asset = requirejs.env.find_asset(logical_path)
97-
filename = requirejs.config.source_dir + asset.logical_path
98+
m = bower_json_pattern.match(logical_path)
99+
bower_logical_path = m && "#{m[1]}#{js_ext}"
100+
101+
next \
102+
if !(requirejs.config.asset_allowed?(logical_path) || bower_logical_path)
103+
104+
asset = requirejs.env.find_asset(logical_path)
105+
106+
if asset
107+
# If a `bower.json` was found, then substitute the logical path for the parsed module name.
108+
filename = requirejs.config.source_dir.join(bower_logical_path || asset.logical_path)
98109
filename.dirname.mkpath
99110
asset.write_to(filename)
100111
end
101112
end
102113
end
103114

104-
task :generate_rjs_driver => ["requirejs:setup"] do
115+
task generate_rjs_driver: ["requirejs:setup"] do
105116
requirejs.builder.generate_rjs_driver
106117
end
107118

108-
task :run_rjs => ["requirejs:setup",
109-
"requirejs:test_node"] do
119+
task run_rjs: ["requirejs:setup",
120+
"requirejs:test_node"] do
110121
requirejs.config.build_dir.mkpath
111122
requirejs.config.target_dir.mkpath
112123
requirejs.config.driver_path.dirname.mkpath
@@ -119,7 +130,7 @@ OS X Homebrew users can use 'brew install node'.
119130

120131
# Copy each built asset, identified by a named module in the
121132
# build config, to its Sprockets digestified name.
122-
task :digestify_and_compress => ["requirejs:setup"] do
133+
task digestify_and_compress: ["requirejs:setup"] do
123134
requirejs.config.build_config['modules'].each do |m|
124135
asset_name = "#{requirejs.config.module_name_for(m)}.js"
125136
built_asset_path = requirejs.config.build_dir.join(asset_name)

0 commit comments

Comments
 (0)