webpack_driver 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -1
- data/lib/status-plugin.js +18 -12
- data/lib/webpack_driver/asset.rb +16 -4
- data/lib/webpack_driver/compile.rb +29 -2
- data/lib/webpack_driver/configuration/generated.rb +20 -1
- data/lib/webpack_driver/configuration.rb +28 -15
- data/lib/webpack_driver/dev_server.rb +1 -1
- data/lib/webpack_driver/process.rb +35 -20
- data/lib/webpack_driver/version.rb +1 -1
- data/templates/generated.config.js.tt +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0dabddeeea6cb7372add80de628a6171c7ff8f91
|
4
|
+
data.tar.gz: 02d915f02ce6c35b51713a85fa728c35e6f8b092
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 71fa04b99cc53dd36488abeebdc72a81216c82b35ec489ad0567f6151e09f23e3b42e895aca3ea13311441e743d84cec005cdba85fea777c496e1095f3b42ae5
|
7
|
+
data.tar.gz: 8127fbf1d6d221eaaff0d4db177d8ccd8ea5ae3e548d8af6c10b7841bcfe4e5084ff601fe9241d9d9b0f55880a77d4788b6641693c737d6f58860047a57b2d05
|
data/.gitignore
CHANGED
data/lib/status-plugin.js
CHANGED
@@ -18,13 +18,13 @@ WebpackDriverStatusPlugin.prototype.apply = function(compiler) {
|
|
18
18
|
log("dev-server", { port, host, outputPath });
|
19
19
|
}
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
21
|
+
compiler.apply(new webpack.ProgressPlugin(function (percent, msg) {
|
22
|
+
log("compile", {
|
23
|
+
"progress": percent,
|
24
|
+
"operation": msg,
|
25
|
+
"ms": Date.now() - timer
|
26
|
+
});
|
27
|
+
}));
|
28
28
|
|
29
29
|
compiler.plugin("compile", function() {
|
30
30
|
timer = Date.now();
|
@@ -38,6 +38,10 @@ WebpackDriverStatusPlugin.prototype.apply = function(compiler) {
|
|
38
38
|
log("status", "invalid");
|
39
39
|
});
|
40
40
|
|
41
|
+
compiler.plugin("after-environment", function() {
|
42
|
+
log("config", { output_path: compiler.options.output.path });
|
43
|
+
})
|
44
|
+
|
41
45
|
compiler.plugin("failed-module", function(module) {
|
42
46
|
log("failed-module", module);
|
43
47
|
});
|
@@ -64,12 +68,14 @@ WebpackDriverStatusPlugin.prototype.apply = function(compiler) {
|
|
64
68
|
log("status", "valid");
|
65
69
|
});
|
66
70
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
+
// https://gist.github.com/kisenka/b31d3dd1d1a9182dde0bb3e3efe1a038
|
72
|
+
compiler.plugin("emit", function(compilation, callback) {
|
73
|
+
const assets = compilation.getStats().toJson().assets;
|
74
|
+
assets.forEach(function(asset) {
|
75
|
+
if (asset.chunkNames.length) {
|
76
|
+
log("asset", {id: asset.chunkNames[0], file: asset.name, size: asset.size});
|
71
77
|
}
|
72
|
-
}
|
78
|
+
});
|
73
79
|
callback();
|
74
80
|
});
|
75
81
|
|
data/lib/webpack_driver/asset.rb
CHANGED
@@ -1,13 +1,25 @@
|
|
1
1
|
module WebpackDriver
|
2
2
|
|
3
3
|
class Asset
|
4
|
-
attr_reader :file, :size
|
5
4
|
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
attr_reader :id, :file, :size
|
6
|
+
attr_accessor :has_source_map
|
7
|
+
|
8
|
+
def initialize(attrs)
|
9
|
+
@id = attrs['id'].to_sym
|
10
|
+
@size = attrs['size']
|
11
|
+
@file = attrs['file']
|
9
12
|
end
|
10
13
|
|
14
|
+
def self.record(map, attrs)
|
15
|
+
id = attrs['id'].to_sym
|
16
|
+
file = attrs['file']
|
17
|
+
if map[id] && file && file.end_with?('.map')
|
18
|
+
map[id].has_source_map = true
|
19
|
+
else
|
20
|
+
map[id] = Asset.new(attrs)
|
21
|
+
end
|
22
|
+
end
|
11
23
|
end
|
12
24
|
|
13
25
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
1
3
|
module WebpackDriver
|
2
4
|
|
3
5
|
class Compile < Process
|
@@ -5,12 +7,37 @@ module WebpackDriver
|
|
5
7
|
def initialize(config)
|
6
8
|
config.environment ||= { NODE_ENV: 'production' }
|
7
9
|
super('webpack', config)
|
10
|
+
read_manifest
|
8
11
|
end
|
9
12
|
|
10
13
|
def valid?
|
11
|
-
!alive? &&
|
14
|
+
!alive? && complete? && last_status == 'success'
|
12
15
|
end
|
13
16
|
|
14
|
-
|
17
|
+
def complete?
|
18
|
+
progress == 1
|
19
|
+
end
|
20
|
+
|
21
|
+
def record_progress(progress, msg)
|
22
|
+
super
|
23
|
+
write_manifest if complete?
|
24
|
+
end
|
15
25
|
|
26
|
+
def write_manifest
|
27
|
+
manifest = {}
|
28
|
+
assets.each do | id, asset |
|
29
|
+
manifest[id] = asset.file
|
30
|
+
end
|
31
|
+
config.manifest_file.write JSON.generate manifest
|
32
|
+
end
|
33
|
+
|
34
|
+
def read_manifest
|
35
|
+
return unless config.manifest_file.exist?
|
36
|
+
manifest = JSON.parse config.manifest_file.read
|
37
|
+
manifest.each do |id, file|
|
38
|
+
asset = Asset.new({ 'id' => id, 'file' => file })
|
39
|
+
assets[asset.id] = asset
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
16
43
|
end
|
@@ -9,12 +9,31 @@ module WebpackDriver
|
|
9
9
|
|
10
10
|
class_option :config
|
11
11
|
|
12
|
+
attr_reader :config_directory, :path, :generated_directory
|
13
|
+
|
14
|
+
def set_variables
|
15
|
+
@generated_directory = options[:config].tmp_directory
|
16
|
+
@config_directory = options[:config].file.dirname
|
17
|
+
@path = generated_directory.join('generated.config.js')
|
18
|
+
end
|
19
|
+
|
12
20
|
def self.source_root
|
13
21
|
Pathname.new(__FILE__).dirname.join("..","..","..","templates")
|
14
22
|
end
|
15
23
|
|
24
|
+
|
16
25
|
def output
|
17
|
-
|
26
|
+
opts = { verbose: false, force: true }
|
27
|
+
template(
|
28
|
+
options[:config].file.relative_path_from(self.class.source_root),
|
29
|
+
options[:config].tmp_directory.join('webpack.config.js'),
|
30
|
+
opts
|
31
|
+
)
|
32
|
+
template(
|
33
|
+
'generated.config.js',
|
34
|
+
path,
|
35
|
+
opts
|
36
|
+
)
|
18
37
|
end
|
19
38
|
|
20
39
|
end
|
@@ -10,22 +10,34 @@ module WebpackDriver
|
|
10
10
|
attr_accessor :port
|
11
11
|
attr_accessor :logger
|
12
12
|
attr_accessor :compile_script
|
13
|
-
attr_accessor :
|
13
|
+
attr_accessor :tmp_directory
|
14
14
|
attr_accessor :cmd_line_flags
|
15
|
+
attr_accessor :output_path
|
15
16
|
attr_writer :environment
|
16
|
-
|
17
|
-
|
18
|
-
attr_reader :generated
|
17
|
+
attr_accessor :file
|
18
|
+
attr_accessor :directory
|
19
19
|
attr_accessor :logger
|
20
20
|
|
21
|
+
attr_reader :process
|
22
|
+
|
23
|
+
|
24
|
+
|
21
25
|
ROOT = Pathname.new(__FILE__).dirname.join('..', '..')
|
22
26
|
|
23
|
-
def initialize(
|
27
|
+
def initialize(options = {})
|
24
28
|
options.each { |k, v| send("#{k}=", v) }
|
25
|
-
@
|
26
|
-
@
|
27
|
-
@
|
28
|
-
|
29
|
+
@file = Pathname.new(file) unless file.nil?
|
30
|
+
@directory ||= Pathname.getwd
|
31
|
+
@output_path ||= @directory.join('public', 'assets')
|
32
|
+
@tmp_directory ||= @directory.join('tmp')
|
33
|
+
if file.exist?
|
34
|
+
@generated = Generated.new([], config: self)
|
35
|
+
@generated.invoke_all
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def manifest_file
|
40
|
+
output_path.join('manifiest.json')
|
29
41
|
end
|
30
42
|
|
31
43
|
def generate!
|
@@ -36,10 +48,6 @@ module WebpackDriver
|
|
36
48
|
file.exist?
|
37
49
|
end
|
38
50
|
|
39
|
-
def path
|
40
|
-
@generated.path
|
41
|
-
end
|
42
|
-
|
43
51
|
def gem_root
|
44
52
|
ROOT
|
45
53
|
end
|
@@ -49,7 +57,7 @@ module WebpackDriver
|
|
49
57
|
end
|
50
58
|
|
51
59
|
def flags
|
52
|
-
opts = ['--config', path]
|
60
|
+
opts = ['--config', @generated.path.to_s]
|
53
61
|
opts += ['--port', port] if port
|
54
62
|
opts += cmd_line_flags if cmd_line_flags
|
55
63
|
opts
|
@@ -59,6 +67,11 @@ module WebpackDriver
|
|
59
67
|
@logger ||= Logger.new(STDOUT)
|
60
68
|
end
|
61
69
|
|
62
|
-
|
70
|
+
def launch(development:)
|
71
|
+
raise "Already launched" unless @process.nil?
|
72
|
+
logger.info "Startint"
|
73
|
+
@process = development ? DevServer.new(self) : Compile.new(self)
|
74
|
+
end
|
63
75
|
|
76
|
+
end
|
64
77
|
end
|
@@ -12,20 +12,23 @@ module WebpackDriver
|
|
12
12
|
|
13
13
|
def_delegators :@proc, :alive?, :environment, :wait
|
14
14
|
|
15
|
-
attr_reader :assets, :messages
|
16
|
-
|
15
|
+
attr_reader :config, :assets, :messages, :progress, :error,
|
16
|
+
:last_compilation_message, :last_status
|
17
17
|
|
18
18
|
def initialize(script, config)
|
19
19
|
self.reset!
|
20
20
|
@config = config
|
21
21
|
args = ["./node_modules/.bin/#{script}"] + config.flags
|
22
|
-
|
22
|
+
config.logger.info("Starting webpack using command:\n#{args.join(' ')}")
|
23
23
|
@proc = ::ChildProcess.build(*args)
|
24
24
|
|
25
25
|
@proc.environment.merge!(
|
26
26
|
config.environment
|
27
27
|
)
|
28
|
-
|
28
|
+
if config.directory
|
29
|
+
config.logger.info("In directory: #{config.directory}")
|
30
|
+
@proc.cwd = config.directory
|
31
|
+
end
|
29
32
|
end
|
30
33
|
|
31
34
|
def start
|
@@ -43,8 +46,8 @@ module WebpackDriver
|
|
43
46
|
@listener.join
|
44
47
|
end
|
45
48
|
|
46
|
-
def
|
47
|
-
|
49
|
+
def in_progress?
|
50
|
+
!@error && @progress && @progress != 1
|
48
51
|
end
|
49
52
|
|
50
53
|
protected
|
@@ -52,42 +55,54 @@ module WebpackDriver
|
|
52
55
|
def reset!
|
53
56
|
@assets = Concurrent::Map.new
|
54
57
|
@messages = Concurrent::Array.new
|
55
|
-
|
56
|
-
|
57
|
-
def last_compilation_message
|
58
|
-
msg = @messages.reverse_each.detect{ |l| l['type'] == 'compile' }
|
59
|
-
msg ? msg['value'] : {}
|
58
|
+
@last_compilation_message = {}
|
60
59
|
end
|
61
60
|
|
62
61
|
def record_error(error)
|
62
|
+
@error = error
|
63
63
|
config.logger.error(
|
64
64
|
"#{error['name']}: #{error['resource']}\n#{error['message']}"
|
65
65
|
)
|
66
66
|
end
|
67
67
|
|
68
|
+
def record_progress(progress, msg)
|
69
|
+
@progress = progress
|
70
|
+
@last_compilation_message = msg['value']
|
71
|
+
end
|
72
|
+
|
68
73
|
def record_message(msg)
|
74
|
+
@messages << msg unless msg['type'] == 'progress'
|
69
75
|
case msg['type']
|
76
|
+
when 'status'
|
77
|
+
@last_status = msg['value']
|
70
78
|
when 'asset'
|
71
|
-
|
72
|
-
|
79
|
+
Asset.record(@assets, msg['value'])
|
80
|
+
when 'compile'
|
81
|
+
record_progress msg['value']['progress'], msg
|
73
82
|
when 'error'
|
74
83
|
record_error(msg['value'])
|
84
|
+
when 'config'
|
85
|
+
config.output_path = Pathname.new(msg['value']['output_path'])
|
75
86
|
else
|
76
87
|
config.logger.debug(msg)
|
77
88
|
end
|
78
|
-
@messages << msg
|
79
89
|
end
|
80
90
|
|
81
91
|
|
82
92
|
def listen_for_status_updates
|
83
93
|
Thread.new do
|
84
94
|
@output.each_line do | l |
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
95
|
+
puts l
|
96
|
+
begin
|
97
|
+
match = l.match(/^STATUS: (.*)/)
|
98
|
+
if match
|
99
|
+
record_message(JSON.parse(match[1]))
|
100
|
+
config.logger.debug(l.chomp)
|
101
|
+
else
|
102
|
+
config.logger.info(l.chomp)
|
103
|
+
end
|
104
|
+
rescue => e
|
105
|
+
config.logger.error "Exception #{e} encountered while processing line #{l}"
|
91
106
|
end
|
92
107
|
end
|
93
108
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: webpack_driver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nathan Stitt
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-05-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: knitter
|
@@ -178,7 +178,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
178
178
|
version: '0'
|
179
179
|
requirements: []
|
180
180
|
rubyforge_project:
|
181
|
-
rubygems_version: 2.
|
181
|
+
rubygems_version: 2.6.11
|
182
182
|
signing_key:
|
183
183
|
specification_version: 4
|
184
184
|
summary: Run webpack-dev-server in a sub process
|