webpacker 5.2.1 → 6.0.0.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (160) hide show
  1. checksums.yaml +4 -4
  2. data/.eslintrc.js +1 -1
  3. data/.gitignore +2 -0
  4. data/.node-version +1 -1
  5. data/.rubocop.yml +11 -16
  6. data/6_0_upgrade.md +43 -0
  7. data/CHANGELOG.md +25 -0
  8. data/CONTRIBUTING.md +1 -1
  9. data/Gemfile.lock +17 -11
  10. data/README.md +220 -99
  11. data/lib/install/config/webpack/base.js +3 -0
  12. data/lib/install/config/webpack/development.js +2 -2
  13. data/lib/install/config/webpack/production.js +2 -2
  14. data/lib/install/config/webpack/test.js +2 -2
  15. data/lib/install/config/webpacker.yml +8 -37
  16. data/lib/install/javascript/packs/application.css +9 -0
  17. data/lib/install/javascript/packs/application.js +3 -1
  18. data/lib/install/template.rb +33 -19
  19. data/lib/tasks/webpacker.rake +2 -11
  20. data/lib/tasks/webpacker/binstubs.rake +6 -4
  21. data/lib/tasks/webpacker/check_binstubs.rake +4 -4
  22. data/lib/tasks/webpacker/check_yarn.rake +1 -2
  23. data/lib/tasks/webpacker/compile.rake +4 -2
  24. data/lib/tasks/webpacker/info.rake +12 -10
  25. data/lib/tasks/webpacker/install.rake +6 -4
  26. data/lib/tasks/webpacker/verify_install.rake +2 -1
  27. data/lib/tasks/webpacker/yarn_install.rake +9 -1
  28. data/lib/webpacker/commands.rb +1 -1
  29. data/lib/webpacker/compiler.rb +15 -8
  30. data/lib/webpacker/configuration.rb +6 -30
  31. data/lib/webpacker/dev_server_runner.rb +21 -2
  32. data/lib/webpacker/helper.rb +22 -32
  33. data/lib/webpacker/manifest.rb +1 -1
  34. data/lib/webpacker/version.rb +1 -1
  35. data/lib/webpacker/webpack_runner.rb +5 -0
  36. data/package.json +23 -39
  37. data/package/__tests__/config.js +5 -37
  38. data/package/__tests__/development.js +9 -11
  39. data/package/__tests__/env.js +12 -4
  40. data/package/__tests__/production.js +6 -6
  41. data/package/__tests__/staging.js +7 -6
  42. data/package/__tests__/test.js +4 -5
  43. data/package/babel/preset.js +55 -0
  44. data/package/config.js +3 -11
  45. data/package/env.js +8 -2
  46. data/package/environments/__tests__/base.js +15 -47
  47. data/package/environments/base.js +62 -125
  48. data/package/environments/development.js +45 -44
  49. data/package/environments/production.js +63 -68
  50. data/package/environments/test.js +2 -2
  51. data/package/index.js +13 -8
  52. data/package/rules/babel.js +9 -7
  53. data/package/rules/coffee.js +6 -0
  54. data/package/rules/erb.js +15 -0
  55. data/package/rules/file.js +19 -19
  56. data/package/rules/index.js +15 -18
  57. data/package/rules/less.js +22 -0
  58. data/package/rules/sass.js +12 -9
  59. data/package/rules/svg.js +20 -0
  60. data/package/utils/get_style_rule.js +26 -36
  61. data/package/utils/helpers.js +26 -35
  62. data/test/compiler_test.rb +0 -12
  63. data/test/configuration_test.rb +1 -32
  64. data/test/dev_server_runner_test.rb +24 -5
  65. data/test/engine_rake_tasks_test.rb +39 -0
  66. data/test/helper_test.rb +15 -9
  67. data/test/mounted_app/Rakefile +4 -0
  68. data/test/mounted_app/test/dummy/Rakefile +3 -0
  69. data/test/mounted_app/test/dummy/bin/rails +3 -0
  70. data/test/mounted_app/test/dummy/bin/rake +3 -0
  71. data/test/mounted_app/test/dummy/config.ru +5 -0
  72. data/test/mounted_app/test/dummy/config/application.rb +10 -0
  73. data/test/mounted_app/test/dummy/config/environment.rb +3 -0
  74. data/test/mounted_app/test/dummy/config/webpacker.yml +75 -0
  75. data/test/mounted_app/test/dummy/package.json +7 -0
  76. data/test/rake_tasks_test.rb +1 -10
  77. data/test/test_app/config/webpacker.yml +1 -25
  78. data/test/test_app/config/webpacker_public_root.yml +0 -1
  79. data/test/test_app/public/packs/manifest.json +17 -13
  80. data/test/test_app/some.config.js +0 -0
  81. data/test/webpack_runner_test.rb +9 -3
  82. data/webpacker.gemspec +1 -1
  83. data/yarn.lock +1858 -4915
  84. metadata +44 -90
  85. data/.travis.yml +0 -43
  86. data/docs/assets.md +0 -119
  87. data/docs/cloud9.md +0 -310
  88. data/docs/css.md +0 -308
  89. data/docs/deployment.md +0 -130
  90. data/docs/docker.md +0 -68
  91. data/docs/engines.md +0 -213
  92. data/docs/env.md +0 -63
  93. data/docs/es6.md +0 -72
  94. data/docs/folder-structure.md +0 -66
  95. data/docs/integrations.md +0 -220
  96. data/docs/misc.md +0 -23
  97. data/docs/props.md +0 -223
  98. data/docs/target.md +0 -22
  99. data/docs/testing.md +0 -136
  100. data/docs/troubleshooting.md +0 -158
  101. data/docs/typescript.md +0 -190
  102. data/docs/v4-upgrade.md +0 -142
  103. data/docs/webpack-dev-server.md +0 -92
  104. data/docs/webpack.md +0 -364
  105. data/docs/yarn.md +0 -23
  106. data/lib/install/angular.rb +0 -23
  107. data/lib/install/coffee.rb +0 -25
  108. data/lib/install/config/.browserslistrc +0 -1
  109. data/lib/install/config/babel.config.js +0 -70
  110. data/lib/install/config/postcss.config.js +0 -12
  111. data/lib/install/config/webpack/environment.js +0 -3
  112. data/lib/install/elm.rb +0 -39
  113. data/lib/install/erb.rb +0 -25
  114. data/lib/install/examples/angular/hello_angular.js +0 -7
  115. data/lib/install/examples/angular/hello_angular/app/app.component.ts +0 -9
  116. data/lib/install/examples/angular/hello_angular/app/app.module.ts +0 -16
  117. data/lib/install/examples/angular/hello_angular/index.ts +0 -8
  118. data/lib/install/examples/angular/hello_angular/polyfills.ts +0 -73
  119. data/lib/install/examples/coffee/hello_coffee.coffee +0 -4
  120. data/lib/install/examples/elm/Main.elm +0 -55
  121. data/lib/install/examples/elm/hello_elm.js +0 -16
  122. data/lib/install/examples/erb/hello_erb.js.erb +0 -6
  123. data/lib/install/examples/react/babel.config.js +0 -87
  124. data/lib/install/examples/react/hello_react.jsx +0 -26
  125. data/lib/install/examples/react/tsconfig.json +0 -21
  126. data/lib/install/examples/stimulus/application.js +0 -1
  127. data/lib/install/examples/stimulus/controllers/hello_controller.js +0 -18
  128. data/lib/install/examples/stimulus/controllers/index.js +0 -9
  129. data/lib/install/examples/svelte/app.svelte +0 -11
  130. data/lib/install/examples/svelte/hello_svelte.js +0 -20
  131. data/lib/install/examples/typescript/hello_typescript.ts +0 -4
  132. data/lib/install/examples/typescript/tsconfig.json +0 -24
  133. data/lib/install/examples/vue/app.vue +0 -22
  134. data/lib/install/examples/vue/hello_vue.js +0 -72
  135. data/lib/install/loaders/coffee.js +0 -6
  136. data/lib/install/loaders/elm.js +0 -25
  137. data/lib/install/loaders/erb.js +0 -11
  138. data/lib/install/loaders/svelte.js +0 -9
  139. data/lib/install/loaders/vue.js +0 -6
  140. data/lib/install/react.rb +0 -18
  141. data/lib/install/stimulus.rb +0 -12
  142. data/lib/install/svelte.rb +0 -29
  143. data/lib/install/typescript.rb +0 -39
  144. data/lib/install/vue.rb +0 -49
  145. data/lib/tasks/installers.rake +0 -42
  146. data/package/config_types/__tests__/config_list.js +0 -118
  147. data/package/config_types/__tests__/config_object.js +0 -43
  148. data/package/config_types/config_list.js +0 -75
  149. data/package/config_types/config_object.js +0 -55
  150. data/package/config_types/index.js +0 -7
  151. data/package/rules/module.css.js +0 -3
  152. data/package/rules/module.sass.js +0 -8
  153. data/package/rules/node_modules.js +0 -22
  154. data/package/utils/__tests__/deep_assign.js +0 -32
  155. data/package/utils/__tests__/deep_merge.js +0 -10
  156. data/package/utils/__tests__/get_style_rule.js +0 -65
  157. data/package/utils/__tests__/objectify.js +0 -9
  158. data/package/utils/deep_assign.js +0 -22
  159. data/package/utils/deep_merge.js +0 -22
  160. data/package/utils/objectify.js +0 -3
@@ -0,0 +1,20 @@
1
+ /* eslint global-require: 0 */
2
+ /* eslint import/no-dynamic-require: 0 */
3
+ const { moduleExists } = require('../utils/helpers')
4
+
5
+ module.exports = {
6
+ test: /\.svg$/i,
7
+ type: 'asset/inline',
8
+ generator: {
9
+ dataUrl: (content) => {
10
+ let optimisedContent = content
11
+
12
+ if (moduleExists('mini-svg-data-uri')) {
13
+ const svgToMiniDataURI = require('mini-svg-data-uri')
14
+ optimisedContent = svgToMiniDataURI(content.toString())
15
+ }
16
+
17
+ return optimisedContent
18
+ }
19
+ }
20
+ }
@@ -1,45 +1,35 @@
1
- const MiniCssExtractPlugin = require('mini-css-extract-plugin')
2
- const { resolve } = require('path')
3
- const config = require('../config')
1
+ /* eslint global-require: 0 */
4
2
 
5
- const styleLoader = {
6
- loader: 'style-loader'
7
- }
3
+ const { canProcess, moduleExists } = require('./helpers')
8
4
 
9
- const getStyleRule = (test, modules = false, preprocessors = []) => {
10
- const use = [
11
- {
12
- loader: 'css-loader',
13
- options: {
14
- sourceMap: true,
15
- importLoaders: 2,
16
- modules: modules ? {
17
- localIdentName: '[name]__[local]___[hash:base64:5]'
18
- } : false
19
- }
20
- },
21
- {
22
- loader: 'postcss-loader',
23
- options: {
24
- config: { path: resolve() },
25
- sourceMap: true
26
- }
27
- },
28
- ...preprocessors
29
- ]
5
+ const getStyleRule = (test, preprocessors = []) => {
6
+ if (moduleExists('css-loader')) {
7
+ const tryPostcss = () =>
8
+ canProcess('postcss-loader', (loaderPath) => ({
9
+ loader: loaderPath,
10
+ options: { sourceMap: true }
11
+ }))
30
12
 
31
- const options = modules ? { include: /\.module\.[a-z]+$/ } : { exclude: /\.module\.[a-z]+$/ }
13
+ const use = [
14
+ { loader: require('mini-css-extract-plugin').loader },
15
+ {
16
+ loader: require.resolve('css-loader'),
17
+ options: {
18
+ sourceMap: true,
19
+ importLoaders: 2
20
+ }
21
+ },
22
+ tryPostcss(),
23
+ ...preprocessors
24
+ ].filter(Boolean)
32
25
 
33
- if (config.extract_css) {
34
- use.unshift(MiniCssExtractPlugin.loader)
35
- } else {
36
- use.unshift(styleLoader)
26
+ return {
27
+ test,
28
+ use
29
+ }
37
30
  }
38
31
 
39
- // sideEffects - See https://github.com/webpack/webpack/issues/6571
40
- return {
41
- test, use, sideEffects: !modules, ...options
42
- }
32
+ return null
43
33
  }
44
34
 
45
35
  module.exports = getStyleRule
@@ -1,30 +1,5 @@
1
- const { stringify } = require('flatted')
2
-
3
- const isObject = (value) => typeof value === 'object'
4
- && value !== null
5
- && (value.length === undefined || value.length === null)
6
-
7
- const isNotObject = (value) => !isObject(value)
8
-
9
- const isBoolean = (str) => /^true/.test(str) || /^false/.test(str)
10
-
11
- const isEmpty = (value) => value === null || value === undefined
12
-
13
- const isString = (key) => key && typeof key === 'string'
14
-
15
- const isStrPath = (key) => {
16
- if (!isString(key)) throw new Error(`Key ${key} should be string`)
17
- return isString(key) && key.includes('.')
18
- }
19
-
20
1
  const isArray = (value) => Array.isArray(value)
21
-
22
- const isEqual = (target, source) => stringify(target) === stringify(source)
23
-
24
- const canMerge = (value) => isObject(value) || isArray(value)
25
-
26
- const prettyPrint = (obj) => JSON.stringify(obj, null, 2)
27
-
2
+ const isBoolean = (str) => /^true/.test(str) || /^false/.test(str)
28
3
  const chdirTestApp = () => {
29
4
  try {
30
5
  return process.chdir('test/test_app')
@@ -41,18 +16,34 @@ const resetEnv = () => {
41
16
 
42
17
  const ensureTrailingSlash = (path) => (path.endsWith('/') ? path : `${path}/`)
43
18
 
19
+ const moduleExists = (packageName) => {
20
+ try {
21
+ return require.resolve(packageName)
22
+ } catch (e) {
23
+ if (e.code !== 'MODULE_NOT_FOUND') {
24
+ throw e
25
+ }
26
+ return null
27
+ }
28
+ }
29
+
30
+ const canProcess = (rule, fn) => {
31
+ const modulePath = moduleExists(rule)
32
+
33
+ if (modulePath) {
34
+ return fn(modulePath)
35
+ }
36
+
37
+ return null
38
+ }
39
+
44
40
  module.exports = {
45
41
  chdirTestApp,
46
42
  chdirCwd,
47
- ensureTrailingSlash,
48
- isObject,
49
- isNotObject,
50
- isBoolean,
51
43
  isArray,
52
- isEqual,
53
- isEmpty,
54
- isStrPath,
55
- canMerge,
56
- prettyPrint,
44
+ isBoolean,
45
+ ensureTrailingSlash,
46
+ canProcess,
47
+ moduleExists,
57
48
  resetEnv
58
49
  }
@@ -23,18 +23,6 @@ class CompilerTest < Minitest::Test
23
23
  Webpacker.compiler.env = {}
24
24
  end
25
25
 
26
- def test_default_watched_paths
27
- assert_equal Webpacker.compiler.send(:default_watched_paths), [
28
- "app/assets/**/*{.mjs,.js,.sass,.scss,.css,.module.sass,.module.scss,.module.css,.png,.svg,.gif,.jpeg,.jpg,.elm}",
29
- "/etc/yarn/**/*{.mjs,.js,.sass,.scss,.css,.module.sass,.module.scss,.module.css,.png,.svg,.gif,.jpeg,.jpg,.elm}",
30
- "app/elm/**/*{.mjs,.js,.sass,.scss,.css,.module.sass,.module.scss,.module.css,.png,.svg,.gif,.jpeg,.jpg,.elm}",
31
- "app/javascript/**/*{.mjs,.js,.sass,.scss,.css,.module.sass,.module.scss,.module.css,.png,.svg,.gif,.jpeg,.jpg,.elm}",
32
- "yarn.lock",
33
- "package.json",
34
- "config/webpack/**/*"
35
- ]
36
- end
37
-
38
26
  def test_freshness
39
27
  assert Webpacker.compiler.stale?
40
28
  assert !Webpacker.compiler.fresh?
@@ -14,11 +14,6 @@ class ConfigurationTest < Webpacker::Test
14
14
  assert_equal source_path, @config.source_path.to_s
15
15
  end
16
16
 
17
- def test_source_path_globbed
18
- assert_equal @config.source_path_globbed,
19
- "app/javascript/**/*{.mjs,.js,.sass,.scss,.css,.module.sass,.module.scss,.module.css,.png,.svg,.gif,.jpeg,.jpg,.elm}"
20
- end
21
-
22
17
  def test_source_entry_path
23
18
  source_entry_path = File.expand_path File.join(File.dirname(__FILE__), "test_app/app/javascript", "packs").to_s
24
19
  assert_equal @config.source_entry_path.to_s, source_entry_path
@@ -54,21 +49,7 @@ class ConfigurationTest < Webpacker::Test
54
49
  end
55
50
 
56
51
  def test_additional_paths
57
- assert_equal @config.additional_paths, ["app/assets", "/etc/yarn", "app/elm"]
58
- end
59
-
60
- def test_additional_paths_globbed
61
- assert_equal @config.additional_paths_globbed, [
62
- "app/assets/**/*{.mjs,.js,.sass,.scss,.css,.module.sass,.module.scss,.module.css,.png,.svg,.gif,.jpeg,.jpg,.elm}",
63
- "/etc/yarn/**/*{.mjs,.js,.sass,.scss,.css,.module.sass,.module.scss,.module.css,.png,.svg,.gif,.jpeg,.jpg,.elm}",
64
- "app/elm/**/*{.mjs,.js,.sass,.scss,.css,.module.sass,.module.scss,.module.css,.png,.svg,.gif,.jpeg,.jpg,.elm}"
65
- ]
66
- end
67
-
68
- def test_extensions
69
- config_path = File.expand_path File.join(File.dirname(__FILE__), "test_app/config/webpacker.yml").to_s
70
- webpacker_yml = YAML.load_file(config_path)
71
- assert_equal @config.extensions, webpacker_yml["default"]["extensions"]
52
+ assert_equal @config.additional_paths, ["app/assets", "/etc/yarn", "some.config.js", "app/elm"]
72
53
  end
73
54
 
74
55
  def test_cache_manifest?
@@ -94,16 +75,4 @@ class ConfigurationTest < Webpacker::Test
94
75
  assert Webpacker.config.compile?
95
76
  end
96
77
  end
97
-
98
- def test_extract_css?
99
- assert @config.extract_css?
100
-
101
- with_rails_env("development") do
102
- refute Webpacker.config.extract_css?
103
- end
104
-
105
- with_rails_env("test") do
106
- refute Webpacker.config.extract_css?
107
- end
108
- end
109
78
  end
@@ -13,34 +13,53 @@ class DevServerRunnerTest < Webpacker::Test
13
13
  end
14
14
 
15
15
  def test_run_cmd_via_node_modules
16
- cmd = ["#{test_app_path}/node_modules/.bin/webpack-dev-server", "--config", "#{test_app_path}/config/webpack/development.js"]
16
+ cmd = ["#{test_app_path}/node_modules/.bin/webpack", "serve", "--config", "#{test_app_path}/config/webpack/development.js"]
17
17
 
18
18
  verify_command(cmd, use_node_modules: true)
19
19
  end
20
20
 
21
21
  def test_run_cmd_via_yarn
22
- cmd = ["yarn", "webpack-dev-server", "--config", "#{test_app_path}/config/webpack/development.js"]
22
+ cmd = ["yarn", "webpack", "serve", "--config", "#{test_app_path}/config/webpack/development.js"]
23
23
 
24
24
  verify_command(cmd, use_node_modules: false)
25
25
  end
26
26
 
27
+ def test_run_cmd_argv
28
+ cmd = ["#{test_app_path}/node_modules/.bin/webpack", "serve", "--config", "#{test_app_path}/config/webpack/development.js", "--quiet"]
29
+
30
+ verify_command(cmd, argv: ["--quiet"])
31
+ end
32
+
33
+ def test_run_cmd_argv_with_https
34
+ cmd = ["#{test_app_path}/node_modules/.bin/webpack", "serve", "--config", "#{test_app_path}/config/webpack/development.js", "--https"]
35
+
36
+ dev_server = Webpacker::DevServer.new({})
37
+ def dev_server.host; "localhost"; end
38
+ def dev_server.port; "3035"; end
39
+ def dev_server.pretty?; false; end
40
+ def dev_server.https?; true; end
41
+ Webpacker::DevServer.stub(:new, dev_server) do
42
+ verify_command(cmd, argv: ["--https"])
43
+ end
44
+ end
45
+
27
46
  private
28
47
  def test_app_path
29
48
  File.expand_path("test_app", __dir__)
30
49
  end
31
50
 
32
- def verify_command(cmd, use_node_modules: true)
51
+ def verify_command(cmd, use_node_modules: true, argv: [])
33
52
  cwd = Dir.pwd
34
53
  Dir.chdir(test_app_path)
35
54
 
36
55
  klass = Webpacker::DevServerRunner
37
- instance = klass.new([])
56
+ instance = klass.new(argv)
38
57
  mock = Minitest::Mock.new
39
58
  mock.expect(:call, nil, [Webpacker::Compiler.env, *cmd])
40
59
 
41
60
  klass.stub(:new, instance) do
42
61
  instance.stub(:node_modules_bin_exist?, use_node_modules) do
43
- Kernel.stub(:exec, mock) { klass.run([]) }
62
+ Kernel.stub(:exec, mock) { klass.run(argv) }
44
63
  end
45
64
  end
46
65
 
@@ -0,0 +1,39 @@
1
+ require "test_helper"
2
+
3
+ class EngineRakeTasksTest < Minitest::Test
4
+ def setup
5
+ remove_webpack_binstubs
6
+ end
7
+
8
+ def teardown
9
+ remove_webpack_binstubs
10
+ end
11
+
12
+ def test_task_mounted
13
+ output = Dir.chdir(mounted_app_path) { `rake -T` }
14
+ assert_includes output, "app:webpacker"
15
+ end
16
+
17
+ def test_binstubs
18
+ Dir.chdir(mounted_app_path) { `bundle exec rake app:webpacker:binstubs` }
19
+ webpack_binstub_paths.each { |path| assert File.exist?(path) }
20
+ end
21
+
22
+ private
23
+ def mounted_app_path
24
+ File.expand_path("mounted_app", __dir__)
25
+ end
26
+
27
+ def webpack_binstub_paths
28
+ [
29
+ "#{mounted_app_path}/test/dummy/bin/webpack",
30
+ "#{mounted_app_path}/test/dummy/bin/webpack-dev-server",
31
+ ]
32
+ end
33
+
34
+ def remove_webpack_binstubs
35
+ webpack_binstub_paths.each do |path|
36
+ File.delete(path) if File.exist?(path)
37
+ end
38
+ end
39
+ end
@@ -17,21 +17,27 @@ class HelperTest < ActionView::TestCase
17
17
  def test_asset_pack_path
18
18
  assert_equal "/packs/bootstrap-300631c4f0e0f9c865bc.js", asset_pack_path("bootstrap.js")
19
19
  assert_equal "/packs/bootstrap-c38deda30895059837cf.css", asset_pack_path("bootstrap.css")
20
-
21
- Webpacker.config.stub :extract_css?, false do
22
- assert_nil asset_pack_path("bootstrap.css")
23
- assert_equal "/packs/application-k344a6d59eef8632c9d1.png", asset_pack_path("application.png")
24
- end
25
20
  end
26
21
 
27
22
  def test_asset_pack_url
28
23
  assert_equal "https://example.com/packs/bootstrap-300631c4f0e0f9c865bc.js", asset_pack_url("bootstrap.js")
29
24
  assert_equal "https://example.com/packs/bootstrap-c38deda30895059837cf.css", asset_pack_url("bootstrap.css")
25
+ end
30
26
 
31
- Webpacker.config.stub :extract_css?, false do
32
- assert_nil asset_pack_path("bootstrap.css")
33
- assert_equal "https://example.com/packs/application-k344a6d59eef8632c9d1.png", asset_pack_url("application.png")
34
- end
27
+ def test_image_pack_path
28
+ assert_equal "/packs/application-k344a6d59eef8632c9d1.png", image_pack_path("application.png")
29
+ assert_equal "/packs/media/images/image-c38deda30895059837cf.jpg", image_pack_path("image.jpg")
30
+ assert_equal "/packs/media/images/image-c38deda30895059837cf.jpg", image_pack_path("media/images/image.jpg")
31
+ assert_equal "/packs/media/images/nested/image-c38deda30895059837cf.jpg", image_pack_path("nested/image.jpg")
32
+ assert_equal "/packs/media/images/nested/image-c38deda30895059837cf.jpg", image_pack_path("media/images/nested/image.jpg")
33
+ end
34
+
35
+ def test_image_pack_url
36
+ assert_equal "https://example.com/packs/application-k344a6d59eef8632c9d1.png", image_pack_url("application.png")
37
+ assert_equal "https://example.com/packs/media/images/image-c38deda30895059837cf.jpg", image_pack_url("image.jpg")
38
+ assert_equal "https://example.com/packs/media/images/image-c38deda30895059837cf.jpg", image_pack_url("media/images/image.jpg")
39
+ assert_equal "https://example.com/packs/media/images/nested/image-c38deda30895059837cf.jpg", image_pack_url("nested/image.jpg")
40
+ assert_equal "https://example.com/packs/media/images/nested/image-c38deda30895059837cf.jpg", image_pack_url("media/images/nested/image.jpg")
35
41
  end
36
42
 
37
43
  def test_image_pack_tag
@@ -0,0 +1,4 @@
1
+ require "bundler/setup"
2
+
3
+ APP_RAKEFILE = File.expand_path("test/dummy/Rakefile", __dir__)
4
+ load "rails/tasks/engine.rake"
@@ -0,0 +1,3 @@
1
+ require_relative "config/application"
2
+
3
+ Rails.application.load_tasks
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ APP_PATH = File.expand_path("../config/application", __dir__)
3
+ require "rails/commands"
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require "rake"
3
+ Rake.application.run
@@ -0,0 +1,5 @@
1
+ # This file allows the `Rails.root` to be correctly determined.
2
+
3
+ require_relative "config/environment"
4
+
5
+ run Rails.application
@@ -0,0 +1,10 @@
1
+ require "action_controller/railtie"
2
+ require "action_view/railtie"
3
+ require "webpacker"
4
+
5
+ module TestDummyApp
6
+ class Application < Rails::Application
7
+ config.secret_key_base = "abcdef"
8
+ config.eager_load = true
9
+ end
10
+ end
@@ -0,0 +1,3 @@
1
+ require_relative "application"
2
+
3
+ Rails.application.initialize!
@@ -0,0 +1,75 @@
1
+ # Note: You must restart bin/webpack-dev-server for changes to take effect
2
+
3
+ default: &default
4
+ source_path: app/javascript
5
+ source_entry_path: packs
6
+ public_output_path: packs
7
+ cache_path: tmp/cache/webpacker
8
+
9
+ # Additional paths webpack should lookup modules
10
+ # ['app/assets', 'engine/foo/app/assets']
11
+ additional_paths:
12
+ - app/assets
13
+ - /etc/yarn
14
+
15
+ # Reload manifest.json on all requests so we reload latest compiled packs
16
+ cache_manifest: false
17
+
18
+ extensions:
19
+ - .js
20
+ - .sass
21
+ - .scss
22
+ - .css
23
+ - .module.sass
24
+ - .module.scss
25
+ - .module.css
26
+ - .png
27
+ - .svg
28
+ - .gif
29
+ - .jpeg
30
+ - .jpg
31
+
32
+ development:
33
+ <<: *default
34
+ compile: true
35
+
36
+ # Reference: https://webpack.js.org/configuration/dev-server/
37
+ dev_server:
38
+ https: false
39
+ host: localhost
40
+ port: 3035
41
+ public: localhost:3035
42
+ hmr: false
43
+ # Inline should be set to true if using HMR
44
+ inline: true
45
+ overlay: true
46
+ disable_host_check: true
47
+ use_local_ip: false
48
+
49
+ test:
50
+ <<: *default
51
+ compile: true
52
+
53
+ # Compile test packs to a separate directory
54
+ public_output_path: packs-test
55
+
56
+ production:
57
+ <<: *default
58
+
59
+ # Production depends on precompilation of packs prior to booting for performance.
60
+ compile: false
61
+
62
+ # Cache manifest.json for performance
63
+ cache_manifest: true
64
+
65
+ staging:
66
+ <<: *default
67
+
68
+ # Production depends on precompilation of packs prior to booting for performance.
69
+ compile: false
70
+
71
+ # Cache manifest.json for performance
72
+ cache_manifest: true
73
+
74
+ # Compile staging packs to a separate directory
75
+ public_output_path: packs-staging