rake-uglifier 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/rake/uglifier_task.rb +121 -0
- metadata +78 -0
@@ -0,0 +1,121 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/tasklib'
|
3
|
+
require 'uglifier'
|
4
|
+
|
5
|
+
module Rake
|
6
|
+
class UglifierTask < Rake::TaskLib
|
7
|
+
# A Hash containing the options to give to uglifier
|
8
|
+
attr_accessor :uglifier_options
|
9
|
+
|
10
|
+
# The name of the task, defaults to :minify
|
11
|
+
attr_accessor :name
|
12
|
+
|
13
|
+
# The logger to use
|
14
|
+
attr_accessor :logger
|
15
|
+
|
16
|
+
# A list of regexps that should match any assets to compile
|
17
|
+
# Defaults to all file ending in .js
|
18
|
+
attr_accessor :assets
|
19
|
+
|
20
|
+
# A booleaning indicating whether or not to create source maps
|
21
|
+
attr_accessor :create_source_map
|
22
|
+
|
23
|
+
# The path to the root directory where the assets are located.
|
24
|
+
attr_reader :assets_path
|
25
|
+
def assets_path=(path)
|
26
|
+
@assets_path = File.join(path, '')
|
27
|
+
end
|
28
|
+
|
29
|
+
def initialize(name=:minify)
|
30
|
+
@name = name
|
31
|
+
@logger = Logger.new($stderr)
|
32
|
+
@logger.level = Logger::INFO
|
33
|
+
@uglifier_options = {}
|
34
|
+
@assets = [/.*\.js/ ]
|
35
|
+
@create_source_map = true
|
36
|
+
|
37
|
+
yield self if block_given?
|
38
|
+
|
39
|
+
define
|
40
|
+
end
|
41
|
+
|
42
|
+
def define
|
43
|
+
desc "#{name.to_s.capitalize} assets"
|
44
|
+
task name do
|
45
|
+
find_assets do |asset|
|
46
|
+
minify_asset(asset)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def minify_asset(asset)
|
52
|
+
path = File.dirname(asset)
|
53
|
+
name = File.basename(asset)
|
54
|
+
pretty_name = asset.chomp[assets_path.length..-1]
|
55
|
+
|
56
|
+
original_name = "orig-#{name}"
|
57
|
+
original_file = File.join(path, original_name)
|
58
|
+
pretty_original_name = original_file[assets_path.length..-1]
|
59
|
+
|
60
|
+
source_map_name = name.chomp(File.extname(name)) + ".map"
|
61
|
+
source_map_file = File.join(path, source_map_name)
|
62
|
+
|
63
|
+
File.rename(asset, original_file)
|
64
|
+
if create_source_map
|
65
|
+
logger.debug("Renamed #{pretty_name} -> #{pretty_original_name}")
|
66
|
+
end
|
67
|
+
|
68
|
+
uglified = source_map = nil
|
69
|
+
ms = benchmark do
|
70
|
+
File.open(original_file, 'rb:UTF-8') do |f|
|
71
|
+
uglifier = Uglifier.new(uglifier_options.merge(
|
72
|
+
output_filename: name,
|
73
|
+
source_filename: original_name))
|
74
|
+
if create_source_map
|
75
|
+
uglified, source_map = uglifier.compile_with_map(f.read)
|
76
|
+
else
|
77
|
+
uglified = uglifier.compile(f.read)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
logger.debug("Minified #{pretty_name}) (#{ms}ms)")
|
83
|
+
|
84
|
+
logger.info("Writing #{asset}")
|
85
|
+
File.open(asset, 'wb+:UTF-8') do |f|
|
86
|
+
f.write(uglified)
|
87
|
+
if create_source_map
|
88
|
+
f.write("\n//@ sourceMappingURL=#{source_map_name}")
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
if create_source_map
|
93
|
+
logger.info("Writing #{source_map_file}")
|
94
|
+
File.open(source_map_file, 'wb+:UTF-8') do |f|
|
95
|
+
f.write(source_map)
|
96
|
+
end
|
97
|
+
else
|
98
|
+
File.delete(original_file)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
private
|
103
|
+
|
104
|
+
def find_assets(path=nil, &block)
|
105
|
+
path = assets_path if path == nil
|
106
|
+
Dir[File.join(path, '**/*.js')]
|
107
|
+
.reject {|f| File.directory?(f) }
|
108
|
+
.each do |f|
|
109
|
+
assets.each do |asset|
|
110
|
+
block.call(f) if asset =~ f
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def benchmark
|
116
|
+
start_time = Time.now.to_f
|
117
|
+
yield
|
118
|
+
((Time.now.to_f - start_time) * 1000).to_i
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
metadata
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rake-uglifier
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Nicklas Ansman
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-01-20 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: uglifier
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
description: A rake task for compressing assets with uglifier. It can also create
|
47
|
+
source maps.
|
48
|
+
email: nicklas@wrapp.com
|
49
|
+
executables: []
|
50
|
+
extensions: []
|
51
|
+
extra_rdoc_files: []
|
52
|
+
files:
|
53
|
+
- lib/rake/uglifier_task.rb
|
54
|
+
homepage: http://rubygems.org/gems/rake-uglifier
|
55
|
+
licenses: []
|
56
|
+
post_install_message:
|
57
|
+
rdoc_options: []
|
58
|
+
require_paths:
|
59
|
+
- lib
|
60
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
68
|
+
requirements:
|
69
|
+
- - ! '>='
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '0'
|
72
|
+
requirements: []
|
73
|
+
rubyforge_project:
|
74
|
+
rubygems_version: 1.8.24
|
75
|
+
signing_key:
|
76
|
+
specification_version: 3
|
77
|
+
summary: Rake uglifier
|
78
|
+
test_files: []
|