opal-webpack-loader 0.5.0 → 0.5.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.
- checksums.yaml +4 -4
- data/bin/owl-install +8 -0
- data/lib/opal-webpack-loader/compile_server.rb +6 -5
- data/lib/opal-webpack-loader/installer_cli.rb +305 -0
- data/lib/opal-webpack-loader/rails_view_helper.rb +4 -0
- data/lib/opal-webpack-loader/templates/Procfile.erb +1 -0
- data/lib/opal-webpack-loader/templates/application.js.erb +25 -0
- data/lib/opal-webpack-loader/templates/application_common.js.erb +8 -0
- data/lib/opal-webpack-loader/templates/application_debug.js.erb +13 -0
- data/lib/opal-webpack-loader/templates/application_ssr.js.erb +23 -0
- data/lib/opal-webpack-loader/templates/debug.js.erb +145 -0
- data/lib/opal-webpack-loader/templates/development.js.erb +130 -0
- data/lib/opal-webpack-loader/templates/initializer.rb.erb +11 -0
- data/lib/opal-webpack-loader/templates/opal_loader.rb.erb +9 -0
- data/lib/opal-webpack-loader/templates/package.json.erb +17 -0
- data/lib/opal-webpack-loader/templates/production.js.erb +107 -0
- data/lib/opal-webpack-loader/version.rb +1 -1
- data/lib/opal-webpack-loader/view_helper.rb +4 -0
- data/lib/opal-webpack-loader.rb +26 -24
- data/spec/fixtures/flattering/Gemfile +10 -0
- data/spec/fixtures/flattering/app_loader.rb +8 -0
- data/spec/fixtures/flattering/config.ru +22 -0
- data/spec/installer_spec.rb +96 -0
- data/spec/owl_spec.rb +86 -0
- data/spec/spec_helper.rb +16 -0
- metadata +105 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e6c50ef73a0bbe4d3c9d4ed8cb9078866e5d3bc9472f0bb30c088aa34fa13d95
|
4
|
+
data.tar.gz: ecb28e8ef777e9e6615e1dc96efa86873ef822cd440c9d1721a13ca167cbfdb3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1e87b208b7d296bc16d0f67a15a15a065d006c31f3e526fea78c2a19b3515eeb99ae246e1a9753b3016ce88bfd3637d1ba4305b970ecf54d803a33a79fed6633
|
7
|
+
data.tar.gz: 503e8c96600c0e7fe31a92a6c8d38f78db59b5ff2a5a5893161ea8942f226b91cc648be872eaa9f1db176162ef25f2094df437afd6f84bab13cac8b8d416a564
|
data/bin/owl-install
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'erb'
|
3
|
+
# require 'active_support/core_ext/string'
|
4
|
+
require 'thor'
|
5
|
+
require 'oj'
|
6
|
+
require_relative '../lib/opal-webpack-loader/installer_cli'
|
7
|
+
require_relative '../lib/opal-webpack-loader/version'
|
8
|
+
OpalWebpackLoader::Installer::CLI.start(ARGV)
|
@@ -43,9 +43,9 @@ module OpalWebpackCompileServer
|
|
43
43
|
result['source_map']['names'] = result['source_map']['names'].map(&:to_s)
|
44
44
|
end
|
45
45
|
result['required_trees'] = c.required_trees
|
46
|
-
Oj.dump(result)
|
46
|
+
Oj.dump(result, {})
|
47
47
|
rescue Exception => e
|
48
|
-
Oj.dump({ 'error' => { 'name' => e.class, 'message' => e.message, 'backtrace' => e.backtrace } })
|
48
|
+
Oj.dump({ 'error' => { 'name' => e.class, 'message' => e.message, 'backtrace' => e.backtrace } }, {})
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
@@ -66,6 +66,7 @@ module OpalWebpackCompileServer
|
|
66
66
|
dir_entries.each do |entry|
|
67
67
|
next if entry == '.'
|
68
68
|
next if entry == '..'
|
69
|
+
next unless entry
|
69
70
|
absolute_path = File.join(path, entry)
|
70
71
|
if File.directory?(absolute_path)
|
71
72
|
more_path_entries = get_load_path_entries(absolute_path)
|
@@ -78,13 +79,13 @@ module OpalWebpackCompileServer
|
|
78
79
|
end
|
79
80
|
|
80
81
|
def self.get_load_paths
|
81
|
-
load_paths = if File.exist?('bin
|
82
|
+
load_paths = if File.exist?(File.join('bin', 'rails'))
|
82
83
|
%x{
|
83
84
|
bundle exec rails runner "puts (Rails.configuration.respond_to?(:assets) ? (Rails.configuration.assets.paths + Opal.paths).uniq : Opal.paths)"
|
84
85
|
}
|
85
86
|
else
|
86
87
|
%x{
|
87
|
-
bundle exec ruby -e 'require "bundler/setup"; Bundler.require; set :run, false if defined? Sinatra; puts Opal.paths'
|
88
|
+
bundle exec ruby -e 'if File.exist?("app_loader.rb"); require "./app_loader.rb"; else; require "bundler/setup"; Bundler.require; set :run, false if defined? Sinatra; end; puts Opal.paths'
|
88
89
|
}
|
89
90
|
end
|
90
91
|
if $? == 0
|
@@ -102,7 +103,7 @@ module OpalWebpackCompileServer
|
|
102
103
|
end
|
103
104
|
cache_obj = { 'opal_load_paths' => load_path_lines, 'opal_load_path_entries' => load_path_entries }
|
104
105
|
Dir.mkdir(OpalWebpackCompileServer::OWL_CACHE_DIR) unless Dir.exist?(OpalWebpackCompileServer::OWL_CACHE_DIR)
|
105
|
-
File.write(OpalWebpackCompileServer::OWL_LP_CACHE, Oj.dump(cache_obj))
|
106
|
+
File.write(OpalWebpackCompileServer::OWL_LP_CACHE, Oj.dump(cache_obj, {}))
|
106
107
|
load_path_lines
|
107
108
|
else
|
108
109
|
raise 'Error getting load paths!'
|
@@ -0,0 +1,305 @@
|
|
1
|
+
module OpalWebpackLoader
|
2
|
+
module Installer
|
3
|
+
TARGETS = %w[development.js production.js test.js]
|
4
|
+
DEV_START_COMMAND = 'yarn run development'
|
5
|
+
DEV_SM_START_COMMAND = 'yarn run sourcemaps'
|
6
|
+
|
7
|
+
class CLI < Thor
|
8
|
+
desc "iso", "Install owl configuration into a existing isomorfeus project, meant to be called from the isomorfeus installer only."
|
9
|
+
# Showing directories and files relevant to iso owl:
|
10
|
+
# project_root
|
11
|
+
# +- config.ru # rack app starter
|
12
|
+
# +- config # webpack and other config
|
13
|
+
# +- owl.rb # owl.configuration
|
14
|
+
# +- isomorfeus
|
15
|
+
# +- components
|
16
|
+
# +- imports # javascript entrypoints, import other components etc.
|
17
|
+
# +- application.js
|
18
|
+
# +- application_common.js
|
19
|
+
# +- application_debug.js
|
20
|
+
# +- application_ssr.js
|
21
|
+
# +- isomorfeus_loader.rb
|
22
|
+
# +- models
|
23
|
+
# +- operations
|
24
|
+
# +- policies
|
25
|
+
# +- styles
|
26
|
+
# +- css
|
27
|
+
# +- log
|
28
|
+
# +- node_modules
|
29
|
+
# +- package.json
|
30
|
+
# +- Procfile
|
31
|
+
# +- public
|
32
|
+
# +- assets # compiled assets and other things
|
33
|
+
# +- spec
|
34
|
+
# +- tmp
|
35
|
+
def iso
|
36
|
+
@asset_output_directory = File.join('public', 'assets')
|
37
|
+
@js_entrypoints_directory = File.join('isomorfeus', 'imports')
|
38
|
+
@conf_rel_prefix = '..'
|
39
|
+
@js_rel_prefix = '..'
|
40
|
+
@opal_directory = 'isomorfeus'
|
41
|
+
@styles_directory = File.join(@opal_directory, 'styles')
|
42
|
+
@webpack_config_directory = 'webpack'
|
43
|
+
create_common_directories
|
44
|
+
create_isomorfeus_directories
|
45
|
+
install_webpack_config
|
46
|
+
create_file_from_template('initializer.rb.erb', File.join('config', 'owl_init.rb'), {})
|
47
|
+
add_gem
|
48
|
+
print_message
|
49
|
+
end
|
50
|
+
|
51
|
+
desc "flat", "Install owl configuration into a existing project with a flat structure, execute from the projects root directory."
|
52
|
+
# <<~TEXT
|
53
|
+
# Showing directories and files relevant to owl:
|
54
|
+
# project_root
|
55
|
+
# +- owl_init.rb # initializer for owl
|
56
|
+
# +- javascripts # javascript entries directory
|
57
|
+
# +- node_modules # directory for node modules
|
58
|
+
# +- opal # directory for opal application files, can be changed with -o
|
59
|
+
# +- package.json # package config for npm/yarn and their scripts
|
60
|
+
# +- public
|
61
|
+
# +- assets # directory for compiled output files
|
62
|
+
# +- styles # directory for stylesheets
|
63
|
+
# +- webpack # directory for webpack configuration files
|
64
|
+
# +- Procfile # config file for foreman
|
65
|
+
#
|
66
|
+
# TEXT
|
67
|
+
option :opal_name, required: false, type: :string, default: 'opal', aliases: '-o', desc: <<~TEXT
|
68
|
+
Set directory name for Opal source files.
|
69
|
+
Example: owl-installer rails -o isomorfeus # will use project_root/app/isomorfeus for opal files
|
70
|
+
TEXT
|
71
|
+
|
72
|
+
def flat
|
73
|
+
@asset_output_directory = File.join('public', 'assets')
|
74
|
+
@js_entrypoints_directory = File.join('javascripts')
|
75
|
+
@conf_rel_prefix = '..'
|
76
|
+
@js_rel_prefix = '..'
|
77
|
+
@opal_directory = options[:opal_name]
|
78
|
+
@styles_directory = 'styles'
|
79
|
+
@webpack_config_directory = 'webpack'
|
80
|
+
create_directory(@styles_directory)
|
81
|
+
create_common_directories
|
82
|
+
install_common_things
|
83
|
+
create_file_from_template('initializer.rb.erb', 'owl_init.rb', {})
|
84
|
+
add_gem
|
85
|
+
print_message
|
86
|
+
puts "Make sure to require the owl initializer, e.g. `require './owl_init'`, in your projects startup file."
|
87
|
+
end
|
88
|
+
|
89
|
+
desc "rails", "Install owl configuration into a existing rails project, execute from the projects root directory."
|
90
|
+
# <<~TEXT
|
91
|
+
# Showing directories and files relevant to owl:
|
92
|
+
# project_root
|
93
|
+
# +- app
|
94
|
+
# +- assets
|
95
|
+
# +- javascripts # javascript entries directory
|
96
|
+
# +- styles # directory for stylesheets
|
97
|
+
# +- opal # directory for opal application files, can be changed with -o
|
98
|
+
# +- config
|
99
|
+
# +- webpack # directory for webpack configuration files
|
100
|
+
# +- initializers
|
101
|
+
# +- owl.rb # initializer for owl
|
102
|
+
# +- node_modules # directory for node modules
|
103
|
+
# +- package.json # package config for npm/yarn and their scripts
|
104
|
+
# +- public
|
105
|
+
# +- assets # directory for compiled output files
|
106
|
+
# +- Procfile # config file for foreman
|
107
|
+
#
|
108
|
+
# TEXT
|
109
|
+
option :opal_name, required: false, type: :string, default: 'opal', aliases: '-o', desc: <<~TEXT
|
110
|
+
Set directory name for Opal source files.
|
111
|
+
Example: owl-installer rails -o isomorfeus # will use project_root/app/isomorfeus for opal files
|
112
|
+
TEXT
|
113
|
+
|
114
|
+
def rails
|
115
|
+
@asset_output_directory = File.join('public', 'assets')
|
116
|
+
@js_entrypoints_directory = File.join('app', 'assets', 'javascripts')
|
117
|
+
@conf_rel_prefix = File.join('..', '..')
|
118
|
+
@js_rel_prefix = File.join('..', '..', '..')
|
119
|
+
@opal_directory = File.join('app', options[:opal_name])
|
120
|
+
@styles_directory = File.join('app', 'assets', 'stylesheets')
|
121
|
+
@webpack_config_directory = File.join('config', 'webpack')
|
122
|
+
create_directory('app')
|
123
|
+
create_directory(@styles_directory)
|
124
|
+
create_common_directories
|
125
|
+
install_common_things
|
126
|
+
create_file_from_template('initializer.rb.erb', File.join('config', 'initializers', 'opal_webpack_loader.rb'), {})
|
127
|
+
add_gem
|
128
|
+
print_message
|
129
|
+
end
|
130
|
+
|
131
|
+
private
|
132
|
+
|
133
|
+
def create_directory(directory)
|
134
|
+
unless Dir.exist?(directory)
|
135
|
+
puts "Creating directory #{directory}."
|
136
|
+
FileUtils.mkdir_p(directory)
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
def create_common_directories
|
141
|
+
create_directory(@webpack_config_directory)
|
142
|
+
create_directory(@js_entrypoints_directory)
|
143
|
+
create_directory(@opal_directory)
|
144
|
+
create_directory(@asset_output_directory)
|
145
|
+
end
|
146
|
+
|
147
|
+
def create_isomorfeus_directories
|
148
|
+
create_directory(File.join('isomorfeus', 'components'))
|
149
|
+
create_directory(File.join('isomorfeus', 'models'))
|
150
|
+
create_directory(File.join('isomorfeus', 'operations'))
|
151
|
+
create_directory(File.join('isomorfeus', 'policies'))
|
152
|
+
create_directory(File.join('isomorfeus', 'styles'))
|
153
|
+
end
|
154
|
+
|
155
|
+
def install_common_things
|
156
|
+
install_webpack_config
|
157
|
+
install_package_json
|
158
|
+
install_js_entries
|
159
|
+
install_opal_entry
|
160
|
+
install_procfile
|
161
|
+
end
|
162
|
+
|
163
|
+
def install_js_entries
|
164
|
+
erb_hash = { opal_dir: File.join(@js_rel_prefix, @opal_directory), opal_name: options[:opal_name] }
|
165
|
+
create_file_from_template('application.js.erb', File.join(@js_entrypoints_directory, 'application.js'), erb_hash)
|
166
|
+
create_file_from_template('application_common.js.erb', File.join(@js_entrypoints_directory, 'application_common.js'),erb_hash)
|
167
|
+
create_file_from_template('application_debug.js.erb', File.join(@js_entrypoints_directory, 'application_debug.js'), erb_hash)
|
168
|
+
create_file_from_template('application_ssr.js.erb', File.join(@js_entrypoints_directory, 'application_ssr.js'), erb_hash)
|
169
|
+
end
|
170
|
+
|
171
|
+
def install_opal_entry
|
172
|
+
create_file_from_template('opal_loader.rb.erb', File.join(@opal_directory, "#{options[:opal_name]}_loader.rb"), {})
|
173
|
+
end
|
174
|
+
|
175
|
+
def install_package_json
|
176
|
+
if File.exist?('package.json')
|
177
|
+
gem_package_json_template = File.read(File.join(templates_path, 'package.json.erb'))
|
178
|
+
gem_package_json = Oj.load(gem_package_json_template, mode: :strict)
|
179
|
+
package_json_file = File.read('package.json')
|
180
|
+
package_json = Oj.load(package_json_file, mode: :strict)
|
181
|
+
package_json["scripts"] = {} unless package_json.has_key?("scripts")
|
182
|
+
package_json["scripts"]["debug"] = debug_script
|
183
|
+
package_json["scripts"]["development"] = development_script
|
184
|
+
package_json["scripts"]["production_build"] = production_script
|
185
|
+
package_json["devDependencies"] = {} unless package_json.has_key?("devDependencies")
|
186
|
+
package_json["devDependencies"]["compression-webpack-plugin"] = gem_package_json["devDependencies"]["compression-webpack-plugin"]
|
187
|
+
package_json["devDependencies"]["opal-webpack-loader"] = OpalWebpackLoader::VERSION
|
188
|
+
package_json["devDependencies"]["webpack"] = gem_package_json["devDependencies"]["webpack"]
|
189
|
+
package_json["devDependencies"]["webpack-cli"] = gem_package_json["devDependencies"]["webpack-cli"]
|
190
|
+
package_json["devDependencies"]["webpack-dev-server"] = gem_package_json["devDependencies"]["webpack-dev-server"]
|
191
|
+
package_json["devDependencies"]["webpack-manifest-plugin"] = gem_package_json["devDependencies"]["webpack-manifest-plugin"]
|
192
|
+
File.write('package.json', Oj.dump(package_json, mode: :strict))
|
193
|
+
puts "Updated package.json, updated scripts and owl dependencies"
|
194
|
+
else
|
195
|
+
erb_hash = {
|
196
|
+
debug_script: debug_script,
|
197
|
+
development_script: development_script,
|
198
|
+
production_script: production_script,
|
199
|
+
owl_version: OpalWebpackLoader::VERSION
|
200
|
+
}
|
201
|
+
create_file_from_template('package.json.erb', 'package.json', erb_hash)
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
def install_procfile
|
206
|
+
if File.exist?('Procfile')
|
207
|
+
procfile = File.read('Procfile')
|
208
|
+
has_webpack = false
|
209
|
+
lines = procfile.lines
|
210
|
+
lines.each do |line|
|
211
|
+
has_webpack = true if line.start_with?('webpack')
|
212
|
+
end
|
213
|
+
unless has_webpack
|
214
|
+
lines << 'webpack: yarn run development'
|
215
|
+
File.write('Procfile', lines.join("\n"))
|
216
|
+
end
|
217
|
+
else
|
218
|
+
create_file_from_template('Procfile.erb', 'Procfile',{})
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
def debug_script
|
223
|
+
"bundle exec opal-webpack-compile-server start webpack-dev-server --config #{File.join(@webpack_config_directory, 'debug.js')}"
|
224
|
+
end
|
225
|
+
|
226
|
+
def development_script
|
227
|
+
"bundle exec opal-webpack-compile-server start webpack-dev-server --config #{File.join(@webpack_config_directory, 'development.js')}"
|
228
|
+
end
|
229
|
+
|
230
|
+
def production_script
|
231
|
+
"bundle exec opal-webpack-compile-server start webpack --config=#{File.join(@webpack_config_directory, 'production.js')}"
|
232
|
+
end
|
233
|
+
|
234
|
+
def install_webpack_config
|
235
|
+
erb_hash = {
|
236
|
+
asset_output_directory: File.join(@conf_rel_prefix, @asset_output_directory),
|
237
|
+
js_entry: File.join(@conf_rel_prefix, @js_entrypoints_directory, 'application.js'),
|
238
|
+
js_common_entry: File.join(@conf_rel_prefix, @js_entrypoints_directory, 'application_common.js'),
|
239
|
+
js_debug_entry: File.join(@conf_rel_prefix, @js_entrypoints_directory, 'application_debug.js'),
|
240
|
+
js_ssr_entry: File.join(@conf_rel_prefix, @js_entrypoints_directory, 'application_ssr.js'),
|
241
|
+
opal_directory: File.join(@conf_rel_prefix, @opal_directory),
|
242
|
+
stylesheets_directory: File.join(@conf_rel_prefix, @styles_directory),
|
243
|
+
}
|
244
|
+
create_file_from_template('debug.js.erb', File.join(@webpack_config_directory, 'debug.js'), erb_hash)
|
245
|
+
create_file_from_template('development.js.erb', File.join(@webpack_config_directory, 'development.js'), erb_hash)
|
246
|
+
create_file_from_template('production.js.erb', File.join(@webpack_config_directory, 'production.js'), erb_hash)
|
247
|
+
end
|
248
|
+
|
249
|
+
def templates_path
|
250
|
+
File.realpath(File.join(File.dirname(File.realpath(__FILE__)), 'templates'))
|
251
|
+
end
|
252
|
+
|
253
|
+
def create_file_from_template(template_path, target_file_path, data_hash)
|
254
|
+
template = ERB.new(File.read(File.join(templates_path, template_path), mode: 'r'))
|
255
|
+
result = template.result_with_hash(data_hash)
|
256
|
+
if File.exist?(target_file_path)
|
257
|
+
ext = '_owl_new'
|
258
|
+
puts "#{target_file_path} exists, not overwriting, creating #{target_file_path + ext} instead."
|
259
|
+
else
|
260
|
+
ext = ''
|
261
|
+
puts "Creating #{target_file_path}."
|
262
|
+
end
|
263
|
+
|
264
|
+
File.write(target_file_path + ext, result, mode: 'w')
|
265
|
+
end
|
266
|
+
|
267
|
+
def add_gem
|
268
|
+
# TODO
|
269
|
+
# STDERR.puts File.read('Gemfile')
|
270
|
+
# STDERR.puts OpalWebpackLoader::VERSION
|
271
|
+
# `bundle add opal-webpack-loader -v "#{OpalWebpackLoader::VERSION}" --skip-install`
|
272
|
+
# specifying a version results in a bundler printing a error and not adding the gem
|
273
|
+
end
|
274
|
+
|
275
|
+
def print_message
|
276
|
+
puts <<~TEXT
|
277
|
+
|
278
|
+
Add the following lines to your Gemfile:
|
279
|
+
|
280
|
+
gem 'opal', github: 'janbiedermann/opal', branch: 'es6_import_export'
|
281
|
+
gem 'opal-webpack-loader', '~> #{OpalWebpackLoader::VERSION}'
|
282
|
+
|
283
|
+
owl currently works only with above opal branch. If you have a existing "gem 'opal'", please replace it with above line.
|
284
|
+
|
285
|
+
Also check above output for files ending in '_owl_new' and merge their contents with the existing files.
|
286
|
+
|
287
|
+
After that run according to your preference either:
|
288
|
+
|
289
|
+
yarn install
|
290
|
+
|
291
|
+
or:
|
292
|
+
|
293
|
+
npm install
|
294
|
+
|
295
|
+
and then:
|
296
|
+
|
297
|
+
bundle install
|
298
|
+
|
299
|
+
For further instructions see http://github.com/isomorfeus/opal-webpack-loader
|
300
|
+
|
301
|
+
TEXT
|
302
|
+
end
|
303
|
+
end
|
304
|
+
end
|
305
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
webpack: yarn run development
|
@@ -0,0 +1,25 @@
|
|
1
|
+
// entry file for the browser environment
|
2
|
+
// import npm modules that are valid to use only in the browser
|
3
|
+
// for example modules which depend on the window or document objects of the browser
|
4
|
+
//
|
5
|
+
// example:
|
6
|
+
//
|
7
|
+
// import ReactDOM from 'react-dom';
|
8
|
+
// global.ReactDOM = ReactDOM;
|
9
|
+
|
10
|
+
// import modules common to browser and server side rendering (ssr)
|
11
|
+
// environments from application_common.js
|
12
|
+
import './application_common.js';
|
13
|
+
|
14
|
+
// import and load opal ruby files
|
15
|
+
import init_app from '<%= opal_dir %>/<%= opal_name %>_loader.rb';
|
16
|
+
init_app();
|
17
|
+
Opal.load('<%= opal_name %>_loader');
|
18
|
+
|
19
|
+
|
20
|
+
// allow for hot reloading
|
21
|
+
if (module.hot) {
|
22
|
+
module.hot.accept('./application.js', function() {
|
23
|
+
console.log('Accepting the updated application.js!');
|
24
|
+
})
|
25
|
+
}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
// import here all npm modules that are common to browser and server side rendering (ssr) environments
|
2
|
+
// modules should not depend on the window or document objects of the browser
|
3
|
+
// use global to make sure they are available globally
|
4
|
+
//
|
5
|
+
// example:
|
6
|
+
//
|
7
|
+
// import * as Redux from 'redux';
|
8
|
+
// global.Redux = Redux;
|
@@ -0,0 +1,13 @@
|
|
1
|
+
// entry file for the browser debugging environment
|
2
|
+
|
3
|
+
// import application.js
|
4
|
+
import './application.js';
|
5
|
+
|
6
|
+
// space additional modules for debugging or helper code
|
7
|
+
|
8
|
+
// allow for hot reloading
|
9
|
+
if (module.hot) {
|
10
|
+
module.hot.accept('./application_debug.js', function() {
|
11
|
+
console.log('Accepting the updated application_debug.js!');
|
12
|
+
})
|
13
|
+
}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
// entry file for the server side rendering environment (ssr)
|
2
|
+
// import npm modules that are only valid to use in the server side rendering environment
|
3
|
+
// for example modules which depend on objects provided by node js
|
4
|
+
//
|
5
|
+
// example:
|
6
|
+
//
|
7
|
+
// import ReactDOMServer from 'react-dom/server';
|
8
|
+
// global.ReactDOMServer = ReactDOMServer;
|
9
|
+
|
10
|
+
// import modules common to browser and server side rendering (ssr)
|
11
|
+
// environments from application_common.js
|
12
|
+
import './application_common.js';
|
13
|
+
|
14
|
+
// import and load opal ruby files
|
15
|
+
import init_app from '<%= opal_dir %>/<%= opal_name %>_loader.rb';
|
16
|
+
init_app();
|
17
|
+
Opal.load('<%= opal_name %>_loader');
|
18
|
+
|
19
|
+
if (module.hot) {
|
20
|
+
module.hot.accept('./application_ssr.js', function() {
|
21
|
+
console.log('Accepting the updated application_ssr.js!');
|
22
|
+
})
|
23
|
+
}
|
@@ -0,0 +1,145 @@
|
|
1
|
+
// require requirements used below
|
2
|
+
const path = require('path');
|
3
|
+
const webpack = require('webpack');
|
4
|
+
const OwlResolver = require('opal-webpack-loader/resolver'); // to resolve ruby files
|
5
|
+
|
6
|
+
module.exports = {
|
7
|
+
context: path.resolve(__dirname, '<%= opal_directory %>'),
|
8
|
+
mode: "development",
|
9
|
+
optimization: {
|
10
|
+
minimize: false // dont minimize for debugging
|
11
|
+
},
|
12
|
+
performance: {
|
13
|
+
maxAssetSize: 20000000,
|
14
|
+
maxEntrypointSize: 20000000
|
15
|
+
},
|
16
|
+
// use one of these below for source maps
|
17
|
+
devtool: 'source-map', // this works well, good compromise between accuracy and performance
|
18
|
+
// devtool: 'cheap-eval-source-map', // less accurate
|
19
|
+
// devtool: 'inline-source-map', // slowest
|
20
|
+
// devtool: 'inline-cheap-source-map',
|
21
|
+
entry: {
|
22
|
+
application: [path.resolve(__dirname, '<%= js_debug_entry %>')],
|
23
|
+
application_ssr: [path.resolve(__dirname, '<%= js_ssr_entry %>')]
|
24
|
+
},
|
25
|
+
output: {
|
26
|
+
// webpack-dev-server keeps the output in memory
|
27
|
+
filename: '[name].js',
|
28
|
+
path: path.resolve(__dirname, '<%= asset_output_directory %>'),
|
29
|
+
publicPath: 'http://localhost:3035/assets/'
|
30
|
+
},
|
31
|
+
resolve: {
|
32
|
+
plugins: [
|
33
|
+
// this makes it possible for webpack to find ruby files
|
34
|
+
new OwlResolver('resolve', 'resolved')
|
35
|
+
],
|
36
|
+
alias: {
|
37
|
+
'react-dom': 'react-dom/profiling',
|
38
|
+
'schedule/tracing': 'schedule/tracing-profiling',
|
39
|
+
}
|
40
|
+
},
|
41
|
+
plugins: [
|
42
|
+
// both for hot reloading
|
43
|
+
new webpack.NamedModulesPlugin(),
|
44
|
+
new webpack.HotModuleReplacementPlugin()
|
45
|
+
],
|
46
|
+
module: {
|
47
|
+
rules: [
|
48
|
+
{
|
49
|
+
// loader for .scss files
|
50
|
+
// test means "test for for file endings"
|
51
|
+
test: /.scss$/,
|
52
|
+
use: [
|
53
|
+
{
|
54
|
+
loader: "style-loader",
|
55
|
+
options: {
|
56
|
+
hmr: true
|
57
|
+
}
|
58
|
+
},
|
59
|
+
{
|
60
|
+
loader: "css-loader",
|
61
|
+
options: {
|
62
|
+
sourceMap: true, // set to false to speed up hot reloads
|
63
|
+
minimize: false // set to false to speed up hot reloads
|
64
|
+
}
|
65
|
+
},
|
66
|
+
{
|
67
|
+
loader: "sass-loader",
|
68
|
+
options: {
|
69
|
+
includePaths: [path.resolve(__dirname, '<%= stylesheets_directory %>')],
|
70
|
+
sourceMap: true // set to false to speed up hot reloads
|
71
|
+
}
|
72
|
+
}
|
73
|
+
]
|
74
|
+
},
|
75
|
+
{
|
76
|
+
// loader for .css files
|
77
|
+
test: /.css$/,
|
78
|
+
use: [
|
79
|
+
{
|
80
|
+
loader: "style-loader",
|
81
|
+
options: {
|
82
|
+
hmr: true
|
83
|
+
}
|
84
|
+
},
|
85
|
+
{
|
86
|
+
loader: "css-loader",
|
87
|
+
options: {
|
88
|
+
sourceMap: true, // set to false to speed up hot reloads
|
89
|
+
minimize: false // set to false to speed up hot reloads
|
90
|
+
}
|
91
|
+
}
|
92
|
+
]
|
93
|
+
},
|
94
|
+
{
|
95
|
+
test: /.(png|svg|jpg|gif)$/,
|
96
|
+
use: [
|
97
|
+
'file-loader'
|
98
|
+
]
|
99
|
+
},
|
100
|
+
{
|
101
|
+
test: /.(woff|woff2|eot|ttf|otf)$/,
|
102
|
+
use: [
|
103
|
+
'file-loader'
|
104
|
+
]
|
105
|
+
},
|
106
|
+
{
|
107
|
+
// opal-webpack-loader will compile and include ruby files in the pack
|
108
|
+
test: /.(rb|js.rb)$/,
|
109
|
+
use: [
|
110
|
+
{
|
111
|
+
loader: 'opal-webpack-loader',
|
112
|
+
options: {
|
113
|
+
sourceMap: true
|
114
|
+
}
|
115
|
+
}
|
116
|
+
]
|
117
|
+
}
|
118
|
+
]
|
119
|
+
},
|
120
|
+
// configuration for webpack-dev-server
|
121
|
+
devServer: {
|
122
|
+
open: false,
|
123
|
+
lazy: false,
|
124
|
+
port: 3035,
|
125
|
+
hot: true,
|
126
|
+
// hotOnly: true,
|
127
|
+
inline: true,
|
128
|
+
https: false,
|
129
|
+
disableHostCheck: true,
|
130
|
+
headers: {
|
131
|
+
"Access-Control-Allow-Origin": "*",
|
132
|
+
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS",
|
133
|
+
"Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization"
|
134
|
+
},
|
135
|
+
watchOptions: {
|
136
|
+
// in case of problems with hot reloading uncomment the following two lines:
|
137
|
+
// aggregateTimeout: 250,
|
138
|
+
// poll: 50,
|
139
|
+
ignored: /\bnode_modules\b/
|
140
|
+
},
|
141
|
+
contentBase: path.resolve(__dirname, 'public')
|
142
|
+
// watchContentBase: true
|
143
|
+
}
|
144
|
+
};
|
145
|
+
|