webpacker 5.4.4 → 6.0.0.beta
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/.eslintrc.js +1 -1
- data/.github/workflows/ruby.yml +28 -4
- data/.gitignore +2 -0
- data/.node-version +1 -1
- data/.rubocop.yml +3 -111
- data/6_0_upgrade.md +43 -0
- data/CHANGELOG.md +19 -26
- data/Gemfile.lock +91 -94
- data/README.md +215 -98
- data/gemfiles/Gemfile-rails-edge +1 -1
- data/lib/install/config/webpack/base.js +3 -0
- data/lib/install/config/webpack/development.js +2 -2
- data/lib/install/config/webpack/production.js +2 -2
- data/lib/install/config/webpack/test.js +2 -2
- data/lib/install/config/webpacker.yml +8 -37
- data/lib/install/javascript/packs/application.css +9 -0
- data/lib/install/javascript/packs/application.js +3 -1
- data/lib/install/template.rb +33 -27
- data/lib/tasks/webpacker/binstubs.rake +6 -4
- data/lib/tasks/webpacker/check_binstubs.rake +4 -4
- data/lib/tasks/webpacker/check_yarn.rake +1 -1
- data/lib/tasks/webpacker/compile.rake +4 -2
- data/lib/tasks/webpacker/info.rake +12 -10
- data/lib/tasks/webpacker/install.rake +6 -4
- data/lib/tasks/webpacker/verify_install.rake +2 -1
- data/lib/tasks/webpacker/yarn_install.rake +9 -7
- data/lib/tasks/webpacker.rake +2 -11
- data/lib/webpacker/compiler.rb +15 -8
- data/lib/webpacker/configuration.rb +10 -45
- data/lib/webpacker/dev_server_runner.rb +21 -2
- data/lib/webpacker/env.rb +1 -5
- data/lib/webpacker/helper.rb +22 -32
- data/lib/webpacker/manifest.rb +1 -1
- data/lib/webpacker/version.rb +1 -1
- data/lib/webpacker/webpack_runner.rb +5 -0
- data/package/__tests__/config.js +5 -37
- data/package/__tests__/development.js +9 -11
- data/package/__tests__/env.js +12 -4
- data/package/__tests__/production.js +6 -6
- data/package/__tests__/staging.js +7 -6
- data/package/__tests__/test.js +4 -5
- data/package/babel/preset.js +55 -0
- data/package/config.js +3 -11
- data/package/env.js +8 -2
- data/package/environments/__tests__/base.js +15 -47
- data/package/environments/base.js +62 -125
- data/package/environments/development.js +45 -44
- data/package/environments/production.js +63 -68
- data/package/environments/test.js +2 -2
- data/package/index.js +13 -8
- data/package/rules/babel.js +9 -7
- data/package/rules/coffee.js +6 -0
- data/package/rules/erb.js +15 -0
- data/package/rules/file.js +19 -19
- data/package/rules/index.js +15 -18
- data/package/rules/less.js +22 -0
- data/package/rules/sass.js +10 -10
- data/package/rules/svg.js +20 -0
- data/package/utils/get_style_rule.js +26 -36
- data/package/utils/helpers.js +26 -35
- data/package.json +29 -45
- data/test/compiler_test.rb +0 -12
- data/test/configuration_test.rb +1 -32
- data/test/dev_server_runner_test.rb +24 -5
- data/test/engine_rake_tasks_test.rb +39 -0
- data/test/helper_test.rb +24 -30
- data/test/mounted_app/Rakefile +4 -0
- data/test/mounted_app/test/dummy/Rakefile +3 -0
- data/test/mounted_app/test/dummy/bin/rails +3 -0
- data/test/mounted_app/test/dummy/bin/rake +3 -0
- data/test/mounted_app/test/dummy/config/application.rb +10 -0
- data/test/mounted_app/test/dummy/config/environment.rb +3 -0
- data/test/mounted_app/test/dummy/config/webpacker.yml +75 -0
- data/test/mounted_app/test/dummy/config.ru +5 -0
- data/test/mounted_app/test/dummy/package.json +7 -0
- data/test/rake_tasks_test.rb +1 -10
- data/test/test_app/config/webpacker.yml +1 -25
- data/test/test_app/config/webpacker_public_root.yml +0 -1
- data/test/test_app/public/packs/manifest.json +17 -13
- data/test/test_app/some.config.js +0 -0
- data/test/webpack_runner_test.rb +9 -3
- data/yarn.lock +2505 -4943
- metadata +37 -82
- data/docs/assets.md +0 -119
- data/docs/cloud9.md +0 -310
- data/docs/css.md +0 -308
- data/docs/deployment.md +0 -130
- data/docs/docker.md +0 -68
- data/docs/engines.md +0 -213
- data/docs/env.md +0 -63
- data/docs/es6.md +0 -72
- data/docs/folder-structure.md +0 -66
- data/docs/integrations.md +0 -220
- data/docs/misc.md +0 -23
- data/docs/props.md +0 -223
- data/docs/target.md +0 -22
- data/docs/testing.md +0 -136
- data/docs/troubleshooting.md +0 -158
- data/docs/typescript.md +0 -190
- data/docs/v4-upgrade.md +0 -142
- data/docs/webpack-dev-server.md +0 -92
- data/docs/webpack.md +0 -364
- data/docs/yarn.md +0 -23
- data/lib/install/angular.rb +0 -23
- data/lib/install/coffee.rb +0 -25
- data/lib/install/config/.browserslistrc +0 -1
- data/lib/install/config/babel.config.js +0 -82
- data/lib/install/config/postcss.config.js +0 -12
- data/lib/install/config/webpack/environment.js +0 -3
- data/lib/install/elm.rb +0 -39
- data/lib/install/erb.rb +0 -25
- data/lib/install/examples/angular/hello_angular/app/app.component.ts +0 -9
- data/lib/install/examples/angular/hello_angular/app/app.module.ts +0 -16
- data/lib/install/examples/angular/hello_angular/index.ts +0 -8
- data/lib/install/examples/angular/hello_angular/polyfills.ts +0 -73
- data/lib/install/examples/angular/hello_angular.js +0 -7
- data/lib/install/examples/coffee/hello_coffee.coffee +0 -4
- data/lib/install/examples/elm/Main.elm +0 -55
- data/lib/install/examples/elm/hello_elm.js +0 -16
- data/lib/install/examples/erb/hello_erb.js.erb +0 -6
- data/lib/install/examples/react/babel.config.js +0 -99
- data/lib/install/examples/react/hello_react.jsx +0 -26
- data/lib/install/examples/react/tsconfig.json +0 -21
- data/lib/install/examples/stimulus/application.js +0 -1
- data/lib/install/examples/stimulus/controllers/hello_controller.js +0 -18
- data/lib/install/examples/stimulus/controllers/index.js +0 -9
- data/lib/install/examples/svelte/app.svelte +0 -11
- data/lib/install/examples/svelte/hello_svelte.js +0 -20
- data/lib/install/examples/typescript/hello_typescript.ts +0 -4
- data/lib/install/examples/typescript/tsconfig.json +0 -24
- data/lib/install/examples/vue/app.vue +0 -22
- data/lib/install/examples/vue/hello_vue.js +0 -72
- data/lib/install/loaders/coffee.js +0 -6
- data/lib/install/loaders/elm.js +0 -25
- data/lib/install/loaders/erb.js +0 -11
- data/lib/install/loaders/svelte.js +0 -9
- data/lib/install/loaders/vue.js +0 -6
- data/lib/install/react.rb +0 -18
- data/lib/install/stimulus.rb +0 -12
- data/lib/install/svelte.rb +0 -29
- data/lib/install/typescript.rb +0 -39
- data/lib/install/vue.rb +0 -49
- data/lib/tasks/installers.rake +0 -42
- data/package/config_types/__tests__/config_list.js +0 -118
- data/package/config_types/__tests__/config_object.js +0 -43
- data/package/config_types/config_list.js +0 -75
- data/package/config_types/config_object.js +0 -55
- data/package/config_types/index.js +0 -7
- data/package/rules/module.css.js +0 -3
- data/package/rules/module.sass.js +0 -8
- data/package/rules/node_modules.js +0 -22
- data/package/utils/__tests__/deep_assign.js +0 -32
- data/package/utils/__tests__/deep_merge.js +0 -10
- data/package/utils/__tests__/get_style_rule.js +0 -65
- data/package/utils/__tests__/objectify.js +0 -9
- data/package/utils/deep_assign.js +0 -22
- data/package/utils/deep_merge.js +0 -22
- data/package/utils/objectify.js +0 -3
|
@@ -9,7 +9,7 @@ namespace :webpacker do
|
|
|
9
9
|
pkg_path = Pathname.new("#{__dir__}/../../../package.json").realpath
|
|
10
10
|
yarn_range = JSON.parse(pkg_path.read)["engines"]["yarn"]
|
|
11
11
|
is_valid = SemanticRange.satisfies?(yarn_version, yarn_range) rescue false
|
|
12
|
-
is_unsupported = SemanticRange.satisfies?(yarn_version, ">=
|
|
12
|
+
is_unsupported = SemanticRange.satisfies?(yarn_version, ">=3.0.0") rescue false
|
|
13
13
|
|
|
14
14
|
unless is_valid
|
|
15
15
|
$stderr.puts "Webpacker requires Yarn \"#{yarn_range}\" and you are using #{yarn_version}"
|
|
@@ -10,8 +10,10 @@ end
|
|
|
10
10
|
def enhance_assets_precompile
|
|
11
11
|
# yarn:install was added in Rails 5.1
|
|
12
12
|
deps = yarn_install_available? ? [] : ["webpacker:yarn_install"]
|
|
13
|
-
Rake::Task["assets:precompile"].enhance(deps) do
|
|
14
|
-
|
|
13
|
+
Rake::Task["assets:precompile"].enhance(deps) do |task|
|
|
14
|
+
prefix = task.name.split(/#|assets:precompile/).first
|
|
15
|
+
|
|
16
|
+
Rake::Task["#{prefix}webpacker:compile"].invoke
|
|
15
17
|
end
|
|
16
18
|
end
|
|
17
19
|
|
|
@@ -3,17 +3,19 @@ require "webpacker/version"
|
|
|
3
3
|
namespace :webpacker do
|
|
4
4
|
desc "Provide information on Webpacker's environment"
|
|
5
5
|
task :info do
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
Dir.chdir(Rails.root) do
|
|
7
|
+
$stdout.puts "Ruby: #{`ruby --version`}"
|
|
8
|
+
$stdout.puts "Rails: #{Rails.version}"
|
|
9
|
+
$stdout.puts "Webpacker: #{Webpacker::VERSION}"
|
|
10
|
+
$stdout.puts "Node: #{`node --version`}"
|
|
11
|
+
$stdout.puts "Yarn: #{`yarn --version`}"
|
|
11
12
|
|
|
12
|
-
|
|
13
|
-
|
|
13
|
+
$stdout.puts "\n"
|
|
14
|
+
$stdout.puts "@rails/webpacker: \n#{`npm list @rails/webpacker version`}"
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
$stdout.puts "Is bin/webpack present?: #{File.exist? 'bin/webpack'}"
|
|
17
|
+
$stdout.puts "Is bin/webpack-dev-server present?: #{File.exist? 'bin/webpack-dev-server'}"
|
|
18
|
+
$stdout.puts "Is bin/yarn present?: #{File.exist? 'bin/yarn'}"
|
|
19
|
+
end
|
|
18
20
|
end
|
|
19
21
|
end
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
install_template_path = File.expand_path("../../install/template.rb", __dir__).freeze
|
|
2
|
-
bin_path = ENV["BUNDLE_BIN"] || "
|
|
2
|
+
bin_path = ENV["BUNDLE_BIN"] || Rails.root.join("bin")
|
|
3
3
|
|
|
4
4
|
namespace :webpacker do
|
|
5
5
|
desc "Install Webpacker in this application"
|
|
6
|
-
task install: [:check_node, :check_yarn] do
|
|
6
|
+
task install: [:check_node, :check_yarn] do |task|
|
|
7
|
+
prefix = task.name.split(/#|webpacker:install/).first
|
|
8
|
+
|
|
7
9
|
if Rails::VERSION::MAJOR >= 5
|
|
8
|
-
exec "#{RbConfig.ruby} #{bin_path}/rails app:template LOCATION=#{install_template_path}"
|
|
10
|
+
exec "#{RbConfig.ruby} #{bin_path}/rails #{prefix}app:template LOCATION=#{install_template_path}"
|
|
9
11
|
else
|
|
10
|
-
exec "#{RbConfig.ruby} #{bin_path}/rake rails:template LOCATION=#{install_template_path}"
|
|
12
|
+
exec "#{RbConfig.ruby} #{bin_path}/rake #{prefix}rails:template LOCATION=#{install_template_path}"
|
|
11
13
|
end
|
|
12
14
|
end
|
|
13
15
|
end
|
|
@@ -4,7 +4,8 @@ namespace :webpacker do
|
|
|
4
4
|
desc "Verifies if Webpacker is installed"
|
|
5
5
|
task verify_install: [:check_node, :check_yarn, :check_binstubs] do
|
|
6
6
|
unless Webpacker.config.config_path.exist?
|
|
7
|
-
|
|
7
|
+
path = Webpacker.config.config_path.relative_path_from(Pathname.new(pwd)).to_s
|
|
8
|
+
$stderr.puts "Configuration #{path} file not found. \n"\
|
|
8
9
|
"Make sure webpacker:install is run successfully before " \
|
|
9
10
|
"running dependent tasks"
|
|
10
11
|
exit!
|
|
@@ -5,12 +5,14 @@ namespace :webpacker do
|
|
|
5
5
|
node_env = ENV.fetch("NODE_ENV") do
|
|
6
6
|
valid_node_envs.include?(Rails.env) ? Rails.env : "production"
|
|
7
7
|
end
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
8
|
+
Dir.chdir(Rails.root) do
|
|
9
|
+
yarn_flags =
|
|
10
|
+
if `yarn --version`.start_with?("1")
|
|
11
|
+
"--no-progress --frozen-lockfile"
|
|
12
|
+
else
|
|
13
|
+
"--immutable"
|
|
14
|
+
end
|
|
15
|
+
system({ "NODE_ENV" => node_env }, "yarn install #{yarn_flags}")
|
|
16
|
+
end
|
|
15
17
|
end
|
|
16
18
|
end
|
data/lib/tasks/webpacker.rake
CHANGED
|
@@ -6,19 +6,10 @@ tasks = {
|
|
|
6
6
|
"webpacker:clobber" => "Removes the webpack compiled output directory",
|
|
7
7
|
"webpacker:check_node" => "Verifies if Node.js is installed",
|
|
8
8
|
"webpacker:check_yarn" => "Verifies if Yarn is installed",
|
|
9
|
-
"webpacker:check_binstubs" => "Verifies that webpack
|
|
9
|
+
"webpacker:check_binstubs" => "Verifies that bin/webpack is present",
|
|
10
10
|
"webpacker:binstubs" => "Installs Webpacker binstubs in this application",
|
|
11
11
|
"webpacker:verify_install" => "Verifies if Webpacker is installed",
|
|
12
|
-
"webpacker:yarn_install" => "Support for older Rails versions. Install all JavaScript dependencies as specified via Yarn"
|
|
13
|
-
"webpacker:install:react" => "Installs and setup example React component",
|
|
14
|
-
"webpacker:install:vue" => "Installs and setup example Vue component",
|
|
15
|
-
"webpacker:install:angular" => "Installs and setup example Angular component",
|
|
16
|
-
"webpacker:install:elm" => "Installs and setup example Elm component",
|
|
17
|
-
"webpacker:install:svelte" => "Installs and setup example Svelte component",
|
|
18
|
-
"webpacker:install:stimulus" => "Installs and setup example Stimulus component",
|
|
19
|
-
"webpacker:install:erb" => "Installs Erb loader with an example",
|
|
20
|
-
"webpacker:install:coffee" => "Installs CoffeeScript loader with an example",
|
|
21
|
-
"webpacker:install:typescript" => "Installs Typescript loader with an example"
|
|
12
|
+
"webpacker:yarn_install" => "Support for older Rails versions. Install all JavaScript dependencies as specified via Yarn"
|
|
22
13
|
}.freeze
|
|
23
14
|
|
|
24
15
|
desc "Lists all available tasks in Webpacker"
|
data/lib/webpacker/compiler.rb
CHANGED
|
@@ -28,7 +28,7 @@ class Webpacker::Compiler
|
|
|
28
28
|
record_compilation_digest
|
|
29
29
|
end
|
|
30
30
|
else
|
|
31
|
-
logger.
|
|
31
|
+
logger.debug "Everything's up-to-date. Nothing to do"
|
|
32
32
|
true
|
|
33
33
|
end
|
|
34
34
|
end
|
|
@@ -53,10 +53,11 @@ class Webpacker::Compiler
|
|
|
53
53
|
|
|
54
54
|
def watched_files_digest
|
|
55
55
|
warn "Webpacker::Compiler.watched_paths has been deprecated. Set additional_paths in webpacker.yml instead." unless watched_paths.empty?
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
56
|
+
Dir.chdir File.expand_path(config.root_path) do
|
|
57
|
+
files = Dir[*default_watched_paths, *watched_paths].reject { |f| File.directory?(f) }
|
|
58
|
+
file_ids = files.sort.map { |f| "#{File.basename(f)}/#{Digest::SHA1.file(f).hexdigest}" }
|
|
59
|
+
Digest::SHA1.hexdigest(file_ids.join("/"))
|
|
60
|
+
end
|
|
60
61
|
end
|
|
61
62
|
|
|
62
63
|
def record_compilation_digest
|
|
@@ -64,12 +65,18 @@ class Webpacker::Compiler
|
|
|
64
65
|
compilation_digest_path.write(watched_files_digest)
|
|
65
66
|
end
|
|
66
67
|
|
|
68
|
+
def optionalRubyRunner
|
|
69
|
+
bin_webpack_path = config.root_path.join("bin/webpack")
|
|
70
|
+
first_line = File.readlines(bin_webpack_path).first.chomp
|
|
71
|
+
/ruby/.match?(first_line) ? RbConfig.ruby : ""
|
|
72
|
+
end
|
|
73
|
+
|
|
67
74
|
def run_webpack
|
|
68
75
|
logger.info "Compiling..."
|
|
69
76
|
|
|
70
77
|
stdout, stderr, status = Open3.capture3(
|
|
71
78
|
webpack_env,
|
|
72
|
-
"#{
|
|
79
|
+
"#{optionalRubyRunner} ./bin/webpack",
|
|
73
80
|
chdir: File.expand_path(config.root_path)
|
|
74
81
|
)
|
|
75
82
|
|
|
@@ -90,8 +97,8 @@ class Webpacker::Compiler
|
|
|
90
97
|
|
|
91
98
|
def default_watched_paths
|
|
92
99
|
[
|
|
93
|
-
*config.
|
|
94
|
-
config.
|
|
100
|
+
*config.additional_paths,
|
|
101
|
+
"#{config.source_path}/**/*",
|
|
95
102
|
"yarn.lock", "package.json",
|
|
96
103
|
"config/webpack/**/*"
|
|
97
104
|
].freeze
|
|
@@ -23,16 +23,8 @@ class Webpacker::Configuration
|
|
|
23
23
|
root_path.join(fetch(:source_path))
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
-
def source_path_globbed
|
|
27
|
-
globbed_path_with_extensions(source_path.relative_path_from(root_path))
|
|
28
|
-
end
|
|
29
|
-
|
|
30
26
|
def additional_paths
|
|
31
|
-
fetch(:additional_paths)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def additional_paths_globbed
|
|
35
|
-
additional_paths.map { |p| globbed_path_with_extensions(p) }
|
|
27
|
+
fetch(:additional_paths)
|
|
36
28
|
end
|
|
37
29
|
|
|
38
30
|
def source_entry_path
|
|
@@ -59,31 +51,19 @@ class Webpacker::Configuration
|
|
|
59
51
|
root_path.join(fetch(:cache_path))
|
|
60
52
|
end
|
|
61
53
|
|
|
62
|
-
def extensions
|
|
63
|
-
fetch(:extensions)
|
|
64
|
-
end
|
|
65
|
-
|
|
66
54
|
def check_yarn_integrity=(value)
|
|
67
|
-
warn
|
|
55
|
+
warn <<~EOS
|
|
56
|
+
Webpacker::Configuration#check_yarn_integrity=(value) is obsolete. The integrity
|
|
57
|
+
check has been removed from Webpacker (https://github.com/rails/webpacker/pull/2518)
|
|
58
|
+
so changing this setting will have no effect.
|
|
59
|
+
EOS
|
|
68
60
|
end
|
|
69
61
|
|
|
70
62
|
def webpack_compile_output?
|
|
71
63
|
fetch(:webpack_compile_output)
|
|
72
64
|
end
|
|
73
65
|
|
|
74
|
-
def extract_css?
|
|
75
|
-
fetch(:extract_css)
|
|
76
|
-
end
|
|
77
|
-
|
|
78
66
|
private
|
|
79
|
-
def resolved_paths
|
|
80
|
-
paths = data.fetch(:resolved_paths, [])
|
|
81
|
-
|
|
82
|
-
warn "The resolved_paths option has been deprecated. Use additional_paths instead." unless paths.empty?
|
|
83
|
-
|
|
84
|
-
paths
|
|
85
|
-
end
|
|
86
|
-
|
|
87
67
|
def fetch(key)
|
|
88
68
|
data.fetch(key, defaults[key])
|
|
89
69
|
end
|
|
@@ -93,12 +73,8 @@ class Webpacker::Configuration
|
|
|
93
73
|
end
|
|
94
74
|
|
|
95
75
|
def load
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
rescue ArgumentError
|
|
99
|
-
YAML.load_file(config_path.to_s)
|
|
100
|
-
end
|
|
101
|
-
config[env].deep_symbolize_keys
|
|
76
|
+
YAML.load(config_path.read)[env].deep_symbolize_keys
|
|
77
|
+
|
|
102
78
|
rescue Errno::ENOENT => e
|
|
103
79
|
raise "Webpacker configuration file not found #{config_path}. " \
|
|
104
80
|
"Please run rails webpacker:install " \
|
|
@@ -111,18 +87,7 @@ class Webpacker::Configuration
|
|
|
111
87
|
end
|
|
112
88
|
|
|
113
89
|
def defaults
|
|
114
|
-
@defaults ||=
|
|
115
|
-
|
|
116
|
-
config = begin
|
|
117
|
-
YAML.load_file(path, aliases: true)
|
|
118
|
-
rescue ArgumentError
|
|
119
|
-
YAML.load_file(path)
|
|
120
|
-
end
|
|
121
|
-
HashWithIndifferentAccess.new(config[env])
|
|
122
|
-
end
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
def globbed_path_with_extensions(path)
|
|
126
|
-
"#{path}/**/*{#{extensions.join(',')}}"
|
|
90
|
+
@defaults ||= \
|
|
91
|
+
HashWithIndifferentAccess.new(YAML.load_file(File.expand_path("../../install/config/webpacker.yml", __FILE__))[env])
|
|
127
92
|
end
|
|
128
93
|
end
|
|
@@ -8,11 +8,13 @@ module Webpacker
|
|
|
8
8
|
class DevServerRunner < Webpacker::Runner
|
|
9
9
|
def run
|
|
10
10
|
load_config
|
|
11
|
+
detect_unsupported_switches!
|
|
11
12
|
detect_port!
|
|
12
13
|
execute_cmd
|
|
13
14
|
end
|
|
14
15
|
|
|
15
16
|
private
|
|
17
|
+
|
|
16
18
|
def load_config
|
|
17
19
|
app_root = Pathname.new(@app_path)
|
|
18
20
|
|
|
@@ -27,6 +29,7 @@ module Webpacker
|
|
|
27
29
|
@hostname = dev_server.host
|
|
28
30
|
@port = dev_server.port
|
|
29
31
|
@pretty = dev_server.pretty?
|
|
32
|
+
@https = dev_server.https?
|
|
30
33
|
|
|
31
34
|
rescue Errno::ENOENT, NoMethodError
|
|
32
35
|
$stdout.puts "webpack dev_server configuration not found in #{@config.config_path}[#{ENV["RAILS_ENV"]}]."
|
|
@@ -34,6 +37,21 @@ module Webpacker
|
|
|
34
37
|
exit!
|
|
35
38
|
end
|
|
36
39
|
|
|
40
|
+
UNSUPPORTED_SWITCHES = %w[--host --port]
|
|
41
|
+
private_constant :UNSUPPORTED_SWITCHES
|
|
42
|
+
def detect_unsupported_switches!
|
|
43
|
+
unsupported_switches = UNSUPPORTED_SWITCHES & @argv
|
|
44
|
+
if unsupported_switches.any?
|
|
45
|
+
$stdout.puts "The following CLI switches are not supported by Webpacker: #{unsupported_switches.join(' ')}. Please edit your command and try again."
|
|
46
|
+
exit!
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
if @argv.include?("--https") && !@https
|
|
50
|
+
$stdout.puts "Please set https: true in webpacker.yml to use the --https command line flag."
|
|
51
|
+
exit!
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
37
55
|
def detect_port!
|
|
38
56
|
server = TCPServer.new(@hostname, @port)
|
|
39
57
|
server.close
|
|
@@ -48,9 +66,9 @@ module Webpacker
|
|
|
48
66
|
env["WEBPACKER_CONFIG"] = @webpacker_config
|
|
49
67
|
|
|
50
68
|
cmd = if node_modules_bin_exist?
|
|
51
|
-
["#{@node_modules_bin_path}/webpack
|
|
69
|
+
["#{@node_modules_bin_path}/webpack", "serve"]
|
|
52
70
|
else
|
|
53
|
-
["yarn", "webpack
|
|
71
|
+
["yarn", "webpack", "serve"]
|
|
54
72
|
end
|
|
55
73
|
|
|
56
74
|
if @argv.include?("--debug-webpacker")
|
|
@@ -59,6 +77,7 @@ module Webpacker
|
|
|
59
77
|
|
|
60
78
|
cmd += ["--config", @webpack_config]
|
|
61
79
|
cmd += ["--progress", "--color"] if @pretty
|
|
80
|
+
cmd += @argv
|
|
62
81
|
|
|
63
82
|
Dir.chdir(@app_path) do
|
|
64
83
|
Kernel.exec env, *cmd
|
data/lib/webpacker/env.rb
CHANGED
|
@@ -27,11 +27,7 @@ class Webpacker::Env
|
|
|
27
27
|
|
|
28
28
|
def available_environments
|
|
29
29
|
if config_path.exist?
|
|
30
|
-
|
|
31
|
-
YAML.load_file(config_path.to_s, aliases: true)
|
|
32
|
-
rescue ArgumentError
|
|
33
|
-
YAML.load_file(config_path.to_s)
|
|
34
|
-
end
|
|
30
|
+
YAML.load(config_path.read).keys
|
|
35
31
|
else
|
|
36
32
|
[].freeze
|
|
37
33
|
end
|
data/lib/webpacker/helper.rb
CHANGED
|
@@ -12,15 +12,9 @@ module Webpacker::Helper
|
|
|
12
12
|
#
|
|
13
13
|
# Example:
|
|
14
14
|
#
|
|
15
|
-
# # When extract_css is false in webpacker.yml and the file is a css:
|
|
16
|
-
# <%= asset_pack_path 'calendar.css' %> # => nil
|
|
17
|
-
#
|
|
18
|
-
# # When extract_css is true in webpacker.yml or the file is not a css:
|
|
19
15
|
# <%= asset_pack_path 'calendar.css' %> # => "/packs/calendar-1016838bab065ae1e122.css"
|
|
20
16
|
def asset_pack_path(name, **options)
|
|
21
|
-
|
|
22
|
-
path_to_asset(current_webpacker_instance.manifest.lookup!(name), options)
|
|
23
|
-
end
|
|
17
|
+
path_to_asset(current_webpacker_instance.manifest.lookup!(name), options)
|
|
24
18
|
end
|
|
25
19
|
|
|
26
20
|
# Computes the absolute path for a given Webpacker asset.
|
|
@@ -29,15 +23,24 @@ module Webpacker::Helper
|
|
|
29
23
|
#
|
|
30
24
|
# Example:
|
|
31
25
|
#
|
|
32
|
-
# # When extract_css is false in webpacker.yml and the file is a css:
|
|
33
|
-
# <%= asset_pack_url 'calendar.css' %> # => nil
|
|
34
|
-
#
|
|
35
|
-
# # When extract_css is true in webpacker.yml or the file is not a css:
|
|
36
26
|
# <%= asset_pack_url 'calendar.css' %> # => "http://example.com/packs/calendar-1016838bab065ae1e122.css"
|
|
37
27
|
def asset_pack_url(name, **options)
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
28
|
+
url_to_asset(current_webpacker_instance.manifest.lookup!(name), options)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Computes the relative path for a given Webpacker image with the same automated processing as image_pack_tag.
|
|
32
|
+
# Returns the relative path using manifest.json and passes it to path_to_asset helper.
|
|
33
|
+
# This will use path_to_asset internally, so most of their behaviors will be the same.
|
|
34
|
+
def image_pack_path(name, **options)
|
|
35
|
+
resolve_path_to_image(name, **options)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Computes the absolute path for a given Webpacker image with the same automated
|
|
39
|
+
# processing as image_pack_tag. Returns the relative path using manifest.json
|
|
40
|
+
# and passes it to path_to_asset helper. This will use path_to_asset internally,
|
|
41
|
+
# so most of their behaviors will be the same.
|
|
42
|
+
def image_pack_url(name, **options)
|
|
43
|
+
resolve_path_to_image(name, **options.merge(protocol: :request))
|
|
41
44
|
end
|
|
42
45
|
|
|
43
46
|
# Creates an image tag that references the named pack file.
|
|
@@ -133,17 +136,10 @@ module Webpacker::Helper
|
|
|
133
136
|
#
|
|
134
137
|
# Examples:
|
|
135
138
|
#
|
|
136
|
-
# # When extract_css is false in webpacker.yml:
|
|
137
|
-
# <%= stylesheet_pack_tag 'calendar', 'data-turbolinks-track': 'reload' %> # =>
|
|
138
|
-
# nil
|
|
139
|
-
#
|
|
140
|
-
# # When extract_css is true in webpacker.yml:
|
|
141
139
|
# <%= stylesheet_pack_tag 'calendar', 'data-turbolinks-track': 'reload' %> # =>
|
|
142
140
|
# <link rel="stylesheet" media="screen" href="/packs/calendar-1016838bab065ae1e122.css" data-turbolinks-track="reload" />
|
|
143
141
|
def stylesheet_pack_tag(*names, **options)
|
|
144
|
-
|
|
145
|
-
stylesheet_link_tag(*sources_from_manifest_entries(names, type: :stylesheet), **options)
|
|
146
|
-
end
|
|
142
|
+
stylesheet_link_tag(*sources_from_manifest_entries(names, type: :stylesheet), **options)
|
|
147
143
|
end
|
|
148
144
|
|
|
149
145
|
# Creates link tags that reference the css chunks from entrypoints when using split chunks API,
|
|
@@ -168,16 +164,10 @@ module Webpacker::Helper
|
|
|
168
164
|
# <%= stylesheet_packs_with_chunks_tag 'calendar' %>
|
|
169
165
|
# <%= stylesheet_packs_with_chunks_tag 'map' %>
|
|
170
166
|
def stylesheet_packs_with_chunks_tag(*names, **options)
|
|
171
|
-
|
|
172
|
-
stylesheet_link_tag(*sources_from_manifest_entrypoints(names, type: :stylesheet), **options)
|
|
173
|
-
end
|
|
167
|
+
stylesheet_link_tag(*sources_from_manifest_entrypoints(names, type: :stylesheet), **options)
|
|
174
168
|
end
|
|
175
169
|
|
|
176
170
|
private
|
|
177
|
-
def stylesheet?(name)
|
|
178
|
-
File.extname(name) == ".css"
|
|
179
|
-
end
|
|
180
|
-
|
|
181
171
|
def sources_from_manifest_entries(names, type:)
|
|
182
172
|
names.map { |name| current_webpacker_instance.manifest.lookup!(name, type: type) }.flatten
|
|
183
173
|
end
|
|
@@ -186,10 +176,10 @@ module Webpacker::Helper
|
|
|
186
176
|
names.map { |name| current_webpacker_instance.manifest.lookup_pack_with_chunks!(name, type: type) }.flatten.uniq
|
|
187
177
|
end
|
|
188
178
|
|
|
189
|
-
def resolve_path_to_image(name)
|
|
179
|
+
def resolve_path_to_image(name, **options)
|
|
190
180
|
path = name.starts_with?("media/images/") ? name : "media/images/#{name}"
|
|
191
|
-
path_to_asset(current_webpacker_instance.manifest.lookup!(path))
|
|
181
|
+
path_to_asset(current_webpacker_instance.manifest.lookup!(path), options)
|
|
192
182
|
rescue
|
|
193
|
-
path_to_asset(current_webpacker_instance.manifest.lookup!(name))
|
|
183
|
+
path_to_asset(current_webpacker_instance.manifest.lookup!(name), options)
|
|
194
184
|
end
|
|
195
185
|
end
|
data/lib/webpacker/manifest.rb
CHANGED
|
@@ -23,7 +23,7 @@ class Webpacker::Manifest
|
|
|
23
23
|
|
|
24
24
|
manifest_pack_type = manifest_type(pack_type[:type])
|
|
25
25
|
manifest_pack_name = manifest_name(name, manifest_pack_type)
|
|
26
|
-
find("entrypoints")[manifest_pack_name][manifest_pack_type]
|
|
26
|
+
find("entrypoints")[manifest_pack_name]["assets"][manifest_pack_type]
|
|
27
27
|
rescue NoMethodError
|
|
28
28
|
nil
|
|
29
29
|
end
|
data/lib/webpacker/version.rb
CHANGED
|
@@ -17,6 +17,11 @@ module Webpacker
|
|
|
17
17
|
cmd = [ "node", "--inspect-brk"] + cmd
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
+
if @argv.include?("--trace-deprecation")
|
|
21
|
+
cmd = [ "node", "--trace-deprecation"] + cmd
|
|
22
|
+
@argv.delete "--trace-deprecation"
|
|
23
|
+
end
|
|
24
|
+
|
|
20
25
|
cmd += ["--config", @webpack_config] + @argv
|
|
21
26
|
|
|
22
27
|
Dir.chdir(@app_path) do
|
data/package/__tests__/config.js
CHANGED
|
@@ -24,43 +24,11 @@ describe('Config', () => {
|
|
|
24
24
|
})
|
|
25
25
|
|
|
26
26
|
test('should return additional paths as listed in app config, with resolved paths', () => {
|
|
27
|
-
expect(config.additional_paths).toEqual(
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
]
|
|
33
|
-
)
|
|
34
|
-
})
|
|
35
|
-
|
|
36
|
-
test('should return extensions as listed in app config', () => {
|
|
37
|
-
expect(config.extensions).toEqual([
|
|
38
|
-
'.mjs',
|
|
39
|
-
'.js',
|
|
40
|
-
'.sass',
|
|
41
|
-
'.scss',
|
|
42
|
-
'.css',
|
|
43
|
-
'.module.sass',
|
|
44
|
-
'.module.scss',
|
|
45
|
-
'.module.css',
|
|
46
|
-
'.png',
|
|
47
|
-
'.svg',
|
|
48
|
-
'.gif',
|
|
49
|
-
'.jpeg',
|
|
50
|
-
'.jpg',
|
|
51
|
-
'.elm'
|
|
52
|
-
])
|
|
53
|
-
})
|
|
54
|
-
|
|
55
|
-
test('should return static assets extensions as listed in app config', () => {
|
|
56
|
-
expect(config.static_assets_extensions).toEqual([
|
|
57
|
-
'.jpg',
|
|
58
|
-
'.jpeg',
|
|
59
|
-
'.png',
|
|
60
|
-
'.gif',
|
|
61
|
-
'.tiff',
|
|
62
|
-
'.ico',
|
|
63
|
-
'.svg',
|
|
27
|
+
expect(config.additional_paths).toEqual([
|
|
28
|
+
'app/assets',
|
|
29
|
+
'/etc/yarn',
|
|
30
|
+
'some.config.js',
|
|
31
|
+
'app/elm'
|
|
64
32
|
])
|
|
65
33
|
})
|
|
66
34
|
})
|
|
@@ -8,19 +8,18 @@ chdirTestApp()
|
|
|
8
8
|
describe('Development environment', () => {
|
|
9
9
|
afterAll(chdirCwd)
|
|
10
10
|
|
|
11
|
-
describe('
|
|
11
|
+
describe('webpackConfig', () => {
|
|
12
12
|
beforeEach(() => jest.resetModules())
|
|
13
13
|
|
|
14
14
|
test('should use development config and environment including devServer if WEBPACK_DEV_SERVER', () => {
|
|
15
15
|
process.env.RAILS_ENV = 'development'
|
|
16
16
|
process.env.NODE_ENV = 'development'
|
|
17
17
|
process.env.WEBPACK_DEV_SERVER = 'YES'
|
|
18
|
-
const {
|
|
18
|
+
const { webpackConfig } = require('../index')
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
expect(
|
|
22
|
-
expect(
|
|
23
|
-
expect(config).toMatchObject({
|
|
20
|
+
expect(webpackConfig.output.path).toEqual(resolve('public', 'packs'))
|
|
21
|
+
expect(webpackConfig.output.publicPath).toEqual('/packs/')
|
|
22
|
+
expect(webpackConfig).toMatchObject({
|
|
24
23
|
devServer: {
|
|
25
24
|
host: 'localhost',
|
|
26
25
|
port: 3035
|
|
@@ -32,12 +31,11 @@ describe('Development environment', () => {
|
|
|
32
31
|
process.env.RAILS_ENV = 'development'
|
|
33
32
|
process.env.NODE_ENV = 'development'
|
|
34
33
|
process.env.WEBPACK_DEV_SERVER = undefined
|
|
35
|
-
const {
|
|
34
|
+
const { webpackConfig } = require('../index')
|
|
36
35
|
|
|
37
|
-
|
|
38
|
-
expect(
|
|
39
|
-
expect(
|
|
40
|
-
expect(config.devServer).toEqual(undefined)
|
|
36
|
+
expect(webpackConfig.output.path).toEqual(resolve('public', 'packs'))
|
|
37
|
+
expect(webpackConfig.output.publicPath).toEqual('/packs/')
|
|
38
|
+
expect(webpackConfig.devServer).toEqual(undefined)
|
|
41
39
|
})
|
|
42
40
|
})
|
|
43
41
|
})
|
data/package/__tests__/env.js
CHANGED
|
@@ -13,7 +13,9 @@ describe('Env', () => {
|
|
|
13
13
|
process.env.NODE_ENV = 'development'
|
|
14
14
|
expect(require('../env')).toEqual({
|
|
15
15
|
railsEnv: 'development',
|
|
16
|
-
nodeEnv: 'development'
|
|
16
|
+
nodeEnv: 'development',
|
|
17
|
+
isProduction: false,
|
|
18
|
+
isDevelopment: true
|
|
17
19
|
})
|
|
18
20
|
})
|
|
19
21
|
|
|
@@ -22,7 +24,9 @@ describe('Env', () => {
|
|
|
22
24
|
delete process.env.NODE_ENV
|
|
23
25
|
expect(require('../env')).toEqual({
|
|
24
26
|
railsEnv: 'development',
|
|
25
|
-
nodeEnv: 'production'
|
|
27
|
+
nodeEnv: 'production',
|
|
28
|
+
isProduction: true,
|
|
29
|
+
isDevelopment: false
|
|
26
30
|
})
|
|
27
31
|
})
|
|
28
32
|
|
|
@@ -31,7 +35,9 @@ describe('Env', () => {
|
|
|
31
35
|
delete process.env.RAILS_ENV
|
|
32
36
|
expect(require('../env')).toEqual({
|
|
33
37
|
railsEnv: 'production',
|
|
34
|
-
nodeEnv: 'production'
|
|
38
|
+
nodeEnv: 'production',
|
|
39
|
+
isProduction: true,
|
|
40
|
+
isDevelopment: false
|
|
35
41
|
})
|
|
36
42
|
})
|
|
37
43
|
|
|
@@ -40,7 +46,9 @@ describe('Env', () => {
|
|
|
40
46
|
process.env.NODE_ENV = 'staging'
|
|
41
47
|
expect(require('../env')).toEqual({
|
|
42
48
|
railsEnv: 'staging',
|
|
43
|
-
nodeEnv: 'production'
|
|
49
|
+
nodeEnv: 'production',
|
|
50
|
+
isProduction: true,
|
|
51
|
+
isDevelopment: false
|
|
44
52
|
})
|
|
45
53
|
})
|
|
46
54
|
})
|
|
@@ -8,19 +8,19 @@ chdirTestApp()
|
|
|
8
8
|
describe('Production environment', () => {
|
|
9
9
|
afterAll(chdirCwd)
|
|
10
10
|
|
|
11
|
-
describe('
|
|
11
|
+
describe('webpackConfig', () => {
|
|
12
12
|
beforeEach(() => jest.resetModules())
|
|
13
13
|
|
|
14
14
|
test('should use production config and environment', () => {
|
|
15
15
|
process.env.RAILS_ENV = 'production'
|
|
16
16
|
process.env.NODE_ENV = 'production'
|
|
17
17
|
|
|
18
|
-
const {
|
|
19
|
-
const config = environment.toWebpackConfig()
|
|
18
|
+
const { webpackConfig } = require('../index')
|
|
20
19
|
|
|
21
|
-
expect(
|
|
22
|
-
expect(
|
|
23
|
-
|
|
20
|
+
expect(webpackConfig.output.path).toEqual(resolve('public', 'packs'))
|
|
21
|
+
expect(webpackConfig.output.publicPath).toEqual('/packs/')
|
|
22
|
+
|
|
23
|
+
expect(webpackConfig).toMatchObject({
|
|
24
24
|
devtool: 'source-map',
|
|
25
25
|
stats: 'normal'
|
|
26
26
|
})
|