webpacker-jets 3.2.100
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 +7 -0
- data/.eslintignore +4 -0
- data/.eslintrc.js +14 -0
- data/.gitignore +6 -0
- data/.rubocop.yml +124 -0
- data/.travis.yml +32 -0
- data/CHANGELOG.md +523 -0
- data/Gemfile +13 -0
- data/Gemfile.lock +154 -0
- data/MIT-LICENSE +20 -0
- data/README.md +445 -0
- data/Rakefile +12 -0
- data/docs/assets.md +106 -0
- data/docs/cloud9.md +310 -0
- data/docs/css.md +116 -0
- data/docs/deployment.md +74 -0
- data/docs/docker.md +49 -0
- data/docs/env.md +65 -0
- data/docs/es6.md +53 -0
- data/docs/folder-structure.md +66 -0
- data/docs/misc.md +23 -0
- data/docs/props.md +223 -0
- data/docs/testing.md +128 -0
- data/docs/troubleshooting.md +119 -0
- data/docs/typescript.md +116 -0
- data/docs/webpack-dev-server.md +92 -0
- data/docs/webpack.md +297 -0
- data/docs/yarn.md +12 -0
- data/exe/webpack +8 -0
- data/exe/webpack-dev-server +8 -0
- data/gemfiles/Gemfile-rails-edge +13 -0
- data/gemfiles/Gemfile-rails.4.2.x +10 -0
- data/gemfiles/Gemfile-rails.5.0.x +10 -0
- data/gemfiles/Gemfile-rails.5.1.x +10 -0
- data/lib/install/angular.rb +27 -0
- data/lib/install/coffee.rb +22 -0
- data/lib/install/config/.babelrc +18 -0
- data/lib/install/config/.postcssrc.yml +3 -0
- data/lib/install/config/webpack/development.js +3 -0
- data/lib/install/config/webpack/environment.js +3 -0
- data/lib/install/config/webpack/production.js +3 -0
- data/lib/install/config/webpack/staging.js +3 -0
- data/lib/install/config/webpack/test.js +3 -0
- data/lib/install/config/webpacker.yml +79 -0
- data/lib/install/elm.rb +38 -0
- data/lib/install/erb.rb +22 -0
- data/lib/install/examples/angular/hello_angular.js +7 -0
- data/lib/install/examples/angular/hello_angular/app/app.component.ts +9 -0
- data/lib/install/examples/angular/hello_angular/app/app.module.ts +16 -0
- data/lib/install/examples/angular/hello_angular/index.ts +8 -0
- data/lib/install/examples/angular/hello_angular/polyfills.ts +73 -0
- data/lib/install/examples/angular/tsconfig.json +19 -0
- data/lib/install/examples/coffee/hello_coffee.coffee +4 -0
- data/lib/install/examples/elm/Main.elm +54 -0
- data/lib/install/examples/elm/hello_elm.js +12 -0
- data/lib/install/examples/erb/hello_erb.js.erb +6 -0
- data/lib/install/examples/react/.babelrc +6 -0
- data/lib/install/examples/react/hello_react.jsx +26 -0
- data/lib/install/examples/vue/app.vue +22 -0
- data/lib/install/examples/vue/hello_vue.js +70 -0
- data/lib/install/javascript/packs/application.js +10 -0
- data/lib/install/loaders/coffee.js +6 -0
- data/lib/install/loaders/elm.js +23 -0
- data/lib/install/loaders/erb.js +11 -0
- data/lib/install/loaders/typescript.js +6 -0
- data/lib/install/loaders/vue.js +13 -0
- data/lib/install/react.rb +28 -0
- data/lib/install/template.rb +37 -0
- data/lib/install/vue.rb +26 -0
- data/lib/tasks/installers.rake +24 -0
- data/lib/tasks/webpacker.rake +22 -0
- data/lib/tasks/webpacker/check_binstubs.rake +12 -0
- data/lib/tasks/webpacker/check_node.rake +24 -0
- data/lib/tasks/webpacker/check_yarn.rake +24 -0
- data/lib/tasks/webpacker/clobber.rake +16 -0
- data/lib/tasks/webpacker/compile.rake +41 -0
- data/lib/tasks/webpacker/install.rake +13 -0
- data/lib/tasks/webpacker/verify_install.rake +16 -0
- data/lib/tasks/webpacker/yarn_install.rake +6 -0
- data/lib/webpacker.rb +32 -0
- data/lib/webpacker/commands.rb +23 -0
- data/lib/webpacker/compiler.rb +88 -0
- data/lib/webpacker/configuration.rb +87 -0
- data/lib/webpacker/dev_server.rb +61 -0
- data/lib/webpacker/dev_server_proxy.rb +26 -0
- data/lib/webpacker/dev_server_runner.rb +51 -0
- data/lib/webpacker/helper.rb +66 -0
- data/lib/webpacker/instance.rb +44 -0
- data/lib/webpacker/manifest.rb +75 -0
- data/lib/webpacker/railtie.rb +82 -0
- data/lib/webpacker/rake_tasks.rb +6 -0
- data/lib/webpacker/runner.rb +22 -0
- data/lib/webpacker/version.rb +9 -0
- data/lib/webpacker/webpack_runner.rb +15 -0
- data/package.json +67 -0
- data/package/__tests__/environment.js +74 -0
- data/package/config.js +34 -0
- data/package/config_types/__tests__/config_list.js +123 -0
- data/package/config_types/__tests__/config_object.js +43 -0
- data/package/config_types/config_list.js +85 -0
- data/package/config_types/config_object.js +55 -0
- data/package/config_types/index.js +7 -0
- data/package/environment.js +116 -0
- data/package/environments/development.js +46 -0
- data/package/environments/production.js +37 -0
- data/package/environments/test.js +3 -0
- data/package/index.js +20 -0
- data/package/rules/babel.js +13 -0
- data/package/rules/css.js +39 -0
- data/package/rules/file.js +13 -0
- data/package/rules/index.js +11 -0
- data/package/rules/sass.js +15 -0
- data/package/utils/__tests__/deep_assign.js +11 -0
- data/package/utils/__tests__/deep_merge.js +10 -0
- data/package/utils/__tests__/objectify.js +9 -0
- data/package/utils/deep_assign.js +22 -0
- data/package/utils/deep_merge.js +23 -0
- data/package/utils/helpers.js +32 -0
- data/package/utils/objectify.js +4 -0
- data/test/command_test.rb +27 -0
- data/test/compiler_test.rb +35 -0
- data/test/configuration_test.rb +69 -0
- data/test/dev_server_test.rb +24 -0
- data/test/helper_test.rb +52 -0
- data/test/manifest_test.rb +28 -0
- data/test/rake_tasks_test.rb +29 -0
- data/test/test_app/Rakefile +3 -0
- data/test/test_app/app/javascript/packs/application.js +10 -0
- data/test/test_app/config/application.rb +11 -0
- data/test/test_app/config/environment.rb +4 -0
- data/test/test_app/config/webpacker.yml +65 -0
- data/test/test_app/public/packs/manifest.json +6 -0
- data/test/test_helper.rb +29 -0
- data/webpacker-jets.gemspec +29 -0
- data/yarn.lock +5768 -0
- metadata +250 -0
data/lib/webpacker.rb
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# webpack relies on rails which uses these core_ext but since
|
|
2
|
+
# we're not entirely requiring rails we need to require all the core_ext
|
|
3
|
+
# individually, yeah a bit of a pain
|
|
4
|
+
require "active_support/core_ext/object"
|
|
5
|
+
require "active_support/core_ext/hash"
|
|
6
|
+
require "active_support/core_ext/module/attribute_accessors"
|
|
7
|
+
require "active_support/logger"
|
|
8
|
+
require "active_support/tagged_logging"
|
|
9
|
+
|
|
10
|
+
module Webpacker
|
|
11
|
+
extend self
|
|
12
|
+
|
|
13
|
+
def instance=(instance)
|
|
14
|
+
@instance = instance
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def instance
|
|
18
|
+
@instance ||= Webpacker::Instance.new
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
delegate :logger, :logger=, :env, to: :instance
|
|
22
|
+
delegate :config, :compiler, :manifest, :commands, :dev_server, to: :instance
|
|
23
|
+
delegate :bootstrap, :clobber, :compile, to: :commands
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
require "webpacker/instance"
|
|
27
|
+
require "webpacker/configuration"
|
|
28
|
+
require "webpacker/manifest"
|
|
29
|
+
require "webpacker/compiler"
|
|
30
|
+
require "webpacker/commands"
|
|
31
|
+
require "webpacker/dev_server"
|
|
32
|
+
require "webpacker/rake_tasks"
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
class Webpacker::Commands
|
|
2
|
+
delegate :config, :compiler, :manifest, to: :@webpacker
|
|
3
|
+
|
|
4
|
+
def initialize(webpacker)
|
|
5
|
+
@webpacker = webpacker
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def clobber
|
|
9
|
+
config.public_output_path.rmtree if config.public_output_path.exist?
|
|
10
|
+
config.cache_path.rmtree if config.cache_path.exist?
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def bootstrap
|
|
14
|
+
config.refresh
|
|
15
|
+
manifest.refresh
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def compile
|
|
19
|
+
compiler.compile.tap do |success|
|
|
20
|
+
manifest.refresh if success
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
require "open3"
|
|
2
|
+
require "digest/sha1"
|
|
3
|
+
|
|
4
|
+
class Webpacker::Compiler
|
|
5
|
+
# Additional paths that test compiler needs to watch
|
|
6
|
+
# Webpacker::Compiler.watched_paths << 'bower_components'
|
|
7
|
+
cattr_accessor(:watched_paths) { [] }
|
|
8
|
+
|
|
9
|
+
# Additional environment variables that the compiler is being run with
|
|
10
|
+
# Webpacker::Compiler.env['FRONTEND_API_KEY'] = 'your_secret_key'
|
|
11
|
+
cattr_accessor(:env) { {} }
|
|
12
|
+
|
|
13
|
+
delegate :config, :logger, to: :@webpacker
|
|
14
|
+
|
|
15
|
+
def initialize(webpacker)
|
|
16
|
+
@webpacker = webpacker
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def compile
|
|
20
|
+
if stale?
|
|
21
|
+
record_compilation_digest
|
|
22
|
+
run_webpack
|
|
23
|
+
else
|
|
24
|
+
true
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Returns true if all the compiled packs are up to date with the underlying asset files.
|
|
29
|
+
def fresh?
|
|
30
|
+
watched_files_digest == last_compilation_digest
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Returns true if the compiled packs are out of date with the underlying asset files.
|
|
34
|
+
def stale?
|
|
35
|
+
!fresh?
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
def last_compilation_digest
|
|
40
|
+
compilation_digest_path.read if compilation_digest_path.exist? && config.public_manifest_path.exist?
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def watched_files_digest
|
|
44
|
+
files = Dir[*default_watched_paths, *watched_paths].reject { |f| File.directory?(f) }
|
|
45
|
+
Digest::SHA1.hexdigest(files.map { |f| "#{File.basename(f)}/#{File.mtime(f).utc.to_i}" }.join("/"))
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def record_compilation_digest
|
|
49
|
+
config.cache_path.mkpath
|
|
50
|
+
compilation_digest_path.write(watched_files_digest)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def run_webpack
|
|
54
|
+
logger.info "Compiling…"
|
|
55
|
+
|
|
56
|
+
sterr, stdout, status = Open3.capture3(webpack_env, "bundle exec webpack")
|
|
57
|
+
|
|
58
|
+
if status.success?
|
|
59
|
+
logger.info "Compiled all packs in #{config.public_output_path}"
|
|
60
|
+
else
|
|
61
|
+
logger.error "Compilation failed:\n#{sterr}\n#{stdout}"
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
status.success?
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def default_watched_paths
|
|
68
|
+
[
|
|
69
|
+
*config.resolved_paths_globbed,
|
|
70
|
+
"#{config.source_path.relative_path_from(Jets.root)}/**/*",
|
|
71
|
+
"yarn.lock", "package.json",
|
|
72
|
+
"config/webpack/**/*"
|
|
73
|
+
].freeze
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def compilation_digest_path
|
|
77
|
+
config.cache_path.join(".last-compilation-digest-#{Webpacker.env}")
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def webpack_env
|
|
81
|
+
begin
|
|
82
|
+
asset_host = ActionController::Base.helpers.compute_asset_host
|
|
83
|
+
rescue NameError
|
|
84
|
+
asset_host = nil
|
|
85
|
+
end
|
|
86
|
+
env.merge("NODE_ENV" => @webpacker.env, "WEBPACKER_ASSET_HOST" => asset_host)
|
|
87
|
+
end
|
|
88
|
+
end
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
class Webpacker::Configuration
|
|
2
|
+
delegate :root_path, :config_path, :env, to: :@webpacker
|
|
3
|
+
|
|
4
|
+
def initialize(webpacker)
|
|
5
|
+
@webpacker = webpacker
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def refresh
|
|
9
|
+
@data = load
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def dev_server
|
|
13
|
+
fetch(:dev_server)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def compile?
|
|
17
|
+
fetch(:compile)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def source_path
|
|
21
|
+
root_path.join(fetch(:source_path))
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def resolved_paths
|
|
25
|
+
fetch(:resolved_paths)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def resolved_paths_globbed
|
|
29
|
+
resolved_paths.map { |p| "#{p}/**/*" }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def source_entry_path
|
|
33
|
+
source_path.join(fetch(:source_entry_path))
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def public_path
|
|
37
|
+
root_path.join("public")
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def public_output_path
|
|
41
|
+
public_path.join(fetch(:public_output_path))
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def public_manifest_path
|
|
45
|
+
public_output_path.join("manifest.json")
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def cache_manifest?
|
|
49
|
+
fetch(:cache_manifest)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def cache_path
|
|
53
|
+
root_path.join(fetch(:cache_path))
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def extensions
|
|
57
|
+
fetch(:extensions)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
private
|
|
61
|
+
def fetch(key)
|
|
62
|
+
data.fetch(key, defaults[key])
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def data
|
|
66
|
+
@data ||= load
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def load
|
|
70
|
+
YAML.load(config_path.read)[env].deep_symbolize_keys
|
|
71
|
+
|
|
72
|
+
rescue Errno::ENOENT => e
|
|
73
|
+
raise "Webpacker configuration file not found #{config_path}. " \
|
|
74
|
+
"Please run rails webpacker:install " \
|
|
75
|
+
"Error: #{e.message}"
|
|
76
|
+
|
|
77
|
+
rescue Psych::SyntaxError => e
|
|
78
|
+
raise "YAML syntax error occurred while parsing #{config_path}. " \
|
|
79
|
+
"Please note that YAML must be consistently indented using spaces. Tabs are not allowed. " \
|
|
80
|
+
"Error: #{e.message}"
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def defaults
|
|
84
|
+
@defaults ||= \
|
|
85
|
+
HashWithIndifferentAccess.new(YAML.load_file(File.expand_path("../../install/config/webpacker.yml", __FILE__))[env])
|
|
86
|
+
end
|
|
87
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
class Webpacker::DevServer
|
|
2
|
+
# Configure dev server connection timeout (in seconds), default: 0.01
|
|
3
|
+
# Webpacker.dev_server.connect_timeout = 1
|
|
4
|
+
cattr_accessor(:connect_timeout) { 0.01 }
|
|
5
|
+
|
|
6
|
+
delegate :config, to: :@webpacker
|
|
7
|
+
|
|
8
|
+
def initialize(webpacker)
|
|
9
|
+
@webpacker = webpacker
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def running?
|
|
13
|
+
Socket.tcp(host, port, connect_timeout: connect_timeout).close
|
|
14
|
+
true
|
|
15
|
+
rescue
|
|
16
|
+
false
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def hot_module_replacing?
|
|
20
|
+
case fetch(:hmr)
|
|
21
|
+
when true, "true"
|
|
22
|
+
true
|
|
23
|
+
else
|
|
24
|
+
false
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def host
|
|
29
|
+
fetch(:host)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def port
|
|
33
|
+
fetch(:port)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def https?
|
|
37
|
+
case fetch(:https)
|
|
38
|
+
when true, "true"
|
|
39
|
+
true
|
|
40
|
+
else
|
|
41
|
+
false
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def protocol
|
|
46
|
+
https? ? "https" : "http"
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def host_with_port
|
|
50
|
+
"#{host}:#{port}"
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
private
|
|
54
|
+
def fetch(key)
|
|
55
|
+
ENV["WEBPACKER_DEV_SERVER_#{key.upcase}"] || config.dev_server.fetch(key, defaults[key])
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def defaults
|
|
59
|
+
config.send(:defaults)[:dev_server]
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require "rack/proxy"
|
|
2
|
+
|
|
3
|
+
class Webpacker::DevServerProxy < Rack::Proxy
|
|
4
|
+
def rewrite_response(response)
|
|
5
|
+
_status, headers, _body = response
|
|
6
|
+
headers.delete "transfer-encoding"
|
|
7
|
+
headers.delete "content-length" if Webpacker.dev_server.running? && Webpacker.dev_server.https?
|
|
8
|
+
response
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def perform_request(env)
|
|
12
|
+
if env["PATH_INFO"].start_with?("/#{public_output_uri_path}") && Webpacker.dev_server.running?
|
|
13
|
+
env["HTTP_HOST"] = env["HTTP_X_FORWARDED_HOST"] = env["HTTP_X_FORWARDED_SERVER"] = Webpacker.dev_server.host_with_port
|
|
14
|
+
env["SCRIPT_NAME"] = ""
|
|
15
|
+
|
|
16
|
+
super(env)
|
|
17
|
+
else
|
|
18
|
+
@app.call(env)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
def public_output_uri_path
|
|
24
|
+
Webpacker.config.public_output_path.relative_path_from(Webpacker.config.public_path)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
require "shellwords"
|
|
2
|
+
require "yaml"
|
|
3
|
+
require "socket"
|
|
4
|
+
require "webpacker/runner"
|
|
5
|
+
|
|
6
|
+
module Webpacker
|
|
7
|
+
class DevServerRunner < Webpacker::Runner
|
|
8
|
+
def run
|
|
9
|
+
load_config
|
|
10
|
+
detect_port!
|
|
11
|
+
execute_cmd
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
def load_config
|
|
16
|
+
@config_file = File.join(@app_path, "config/webpacker.yml")
|
|
17
|
+
dev_server = YAML.load_file(@config_file)[ENV["JETS_ENV"]]["dev_server"]
|
|
18
|
+
|
|
19
|
+
@hostname = dev_server["host"]
|
|
20
|
+
@port = dev_server["port"]
|
|
21
|
+
@pretty = dev_server.fetch("pretty", true)
|
|
22
|
+
|
|
23
|
+
rescue Errno::ENOENT, NoMethodError
|
|
24
|
+
$stdout.puts "webpack dev_server configuration not found in #{@config_file}."
|
|
25
|
+
$stdout.puts "Please run jets webpacker:install to install Webpacker"
|
|
26
|
+
exit!
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def detect_port!
|
|
30
|
+
server = TCPServer.new(@hostname, @port)
|
|
31
|
+
server.close
|
|
32
|
+
|
|
33
|
+
rescue Errno::EADDRINUSE
|
|
34
|
+
$stdout.puts "Another program is running on port #{@port}. Set a new port in #{@config_file} for dev_server"
|
|
35
|
+
exit!
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def execute_cmd
|
|
39
|
+
env = { "NODE_PATH" => @node_modules_path.shellescape }
|
|
40
|
+
cmd = [
|
|
41
|
+
"#{@node_modules_path}/.bin/webpack-dev-server",
|
|
42
|
+
"--config", @webpack_config
|
|
43
|
+
]
|
|
44
|
+
cmd += ["--progress", "--color"] if @pretty
|
|
45
|
+
|
|
46
|
+
Dir.chdir(@app_path) do
|
|
47
|
+
exec env, *cmd
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
module Webpacker::Helper
|
|
2
|
+
# Computes the relative path for a given Webpacker asset.
|
|
3
|
+
# Return relative path using manifest.json and passes it to asset_path helper
|
|
4
|
+
# This will use asset_path internally, so most of their behaviors will be the same.
|
|
5
|
+
#
|
|
6
|
+
# Example:
|
|
7
|
+
#
|
|
8
|
+
# <%= asset_pack_path 'calendar.css' %> # => "/packs/calendar-1016838bab065ae1e122.css"
|
|
9
|
+
def asset_pack_path(name, **options)
|
|
10
|
+
asset_path(Webpacker.manifest.lookup!(name), **options)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Computes the absolute path for a given Webpacker asset.
|
|
14
|
+
# Return absolute path using manifest.json and passes it to asset_url helper
|
|
15
|
+
# This will use asset_url internally, so most of their behaviors will be the same.
|
|
16
|
+
#
|
|
17
|
+
# Example:
|
|
18
|
+
#
|
|
19
|
+
# <%= asset_pack_url 'calendar.css' %> # => "http://example.com/packs/calendar-1016838bab065ae1e122.css"
|
|
20
|
+
def asset_pack_url(name, **options)
|
|
21
|
+
asset_url(Webpacker.manifest.lookup!(name), **options)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Creates a script tag that references the named pack file, as compiled by webpack per the entries list
|
|
25
|
+
# in config/webpack/shared.js. By default, this list is auto-generated to match everything in
|
|
26
|
+
# app/javascript/packs/*.js. In production mode, the digested reference is automatically looked up.
|
|
27
|
+
#
|
|
28
|
+
# Example:
|
|
29
|
+
#
|
|
30
|
+
# <%= javascript_pack_tag 'calendar', 'data-turbolinks-track': 'reload' %> # =>
|
|
31
|
+
# <script src="/packs/calendar-1016838bab065ae1e314.js" data-turbolinks-track="reload"></script>
|
|
32
|
+
def javascript_pack_tag(*names, **options)
|
|
33
|
+
javascript_include_tag(*sources_from_pack_manifest(names, type: :javascript), **options)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Creates a link tag that references the named pack file, as compiled by webpack per the entries list
|
|
37
|
+
# in config/webpack/shared.js. By default, this list is auto-generated to match everything in
|
|
38
|
+
# app/javascript/packs/*.js. In production mode, the digested reference is automatically looked up.
|
|
39
|
+
#
|
|
40
|
+
# Note: If the development server is running and hot module replacement is active, this will return nothing.
|
|
41
|
+
# In that setup you need to configure your styles to be inlined in your JavaScript for hot reloading.
|
|
42
|
+
#
|
|
43
|
+
# Examples:
|
|
44
|
+
#
|
|
45
|
+
# # In development mode with hot module replacement:
|
|
46
|
+
# <%= stylesheet_pack_tag 'calendar', 'data-turbolinks-track': 'reload' %> # =>
|
|
47
|
+
# nil
|
|
48
|
+
#
|
|
49
|
+
# # In production mode:
|
|
50
|
+
# <%= stylesheet_pack_tag 'calendar', 'data-turbolinks-track': 'reload' %> # =>
|
|
51
|
+
# <link rel="stylesheet" media="screen" href="/packs/calendar-1016838bab065ae1e122.css" data-turbolinks-track="reload" />
|
|
52
|
+
def stylesheet_pack_tag(*names, **options)
|
|
53
|
+
unless Webpacker.dev_server.running? && Webpacker.dev_server.hot_module_replacing?
|
|
54
|
+
stylesheet_link_tag(*sources_from_pack_manifest(names, type: :stylesheet), **options)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
private
|
|
59
|
+
def sources_from_pack_manifest(names, type:)
|
|
60
|
+
names.map { |name| Webpacker.manifest.lookup!(pack_name_with_extension(name, type: type)) }
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def pack_name_with_extension(name, type:)
|
|
64
|
+
"#{name}#{compute_asset_extname(name, type: type)}"
|
|
65
|
+
end
|
|
66
|
+
end
|