webpacker 3.6.0 → 4.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. checksums.yaml +4 -4
  2. data/.node-version +1 -0
  3. data/.travis.yml +12 -4
  4. data/CHANGELOG.md +240 -28
  5. data/CONTRIBUTING.md +33 -0
  6. data/Gemfile +1 -1
  7. data/Gemfile.lock +78 -71
  8. data/MIT-LICENSE +1 -1
  9. data/README.md +75 -16
  10. data/docs/assets.md +7 -4
  11. data/docs/css.md +47 -14
  12. data/docs/deployment.md +11 -0
  13. data/docs/engines.md +155 -0
  14. data/docs/es6.md +5 -5
  15. data/docs/testing.md +1 -1
  16. data/docs/troubleshooting.md +4 -4
  17. data/docs/v4-upgrade.md +132 -0
  18. data/docs/webpack.md +56 -3
  19. data/docs/yarn.md +12 -1
  20. data/gemfiles/Gemfile-rails-edge +1 -1
  21. data/gemfiles/Gemfile-rails.4.2.x +2 -2
  22. data/gemfiles/Gemfile-rails.5.0.x +2 -2
  23. data/gemfiles/Gemfile-rails.5.1.x +2 -2
  24. data/gemfiles/Gemfile-rails.5.2.x +10 -0
  25. data/lib/install/bin/webpack +5 -1
  26. data/lib/install/bin/webpack-dev-server +5 -1
  27. data/lib/install/coffee.rb +2 -2
  28. data/lib/install/config/.browserslistrc +1 -0
  29. data/lib/install/config/babel.config.js +70 -0
  30. data/lib/install/config/postcss.config.js +12 -0
  31. data/lib/install/config/webpacker.yml +26 -0
  32. data/lib/install/elm.rb +2 -2
  33. data/lib/install/erb.rb +2 -2
  34. data/lib/install/examples/react/babel.config.js +83 -0
  35. data/lib/install/examples/stimulus/application.js +1 -6
  36. data/lib/install/examples/stimulus/controllers/index.js +9 -0
  37. data/lib/install/examples/typescript/tsconfig.json +4 -0
  38. data/lib/install/examples/vue/hello_vue.js +6 -4
  39. data/lib/install/javascript/packs/application.js +8 -0
  40. data/lib/install/loaders/typescript.js +8 -3
  41. data/lib/install/loaders/vue.js +1 -8
  42. data/lib/install/react.rb +6 -19
  43. data/lib/install/template.rb +29 -30
  44. data/lib/install/typescript.rb +4 -4
  45. data/lib/install/vue.rb +14 -5
  46. data/lib/tasks/installers.rake +4 -2
  47. data/lib/tasks/webpacker/binstubs.rake +3 -2
  48. data/lib/tasks/webpacker/compile.rake +10 -5
  49. data/lib/tasks/webpacker/install.rake +3 -2
  50. data/lib/tasks/webpacker/verify_install.rake +1 -4
  51. data/lib/tasks/webpacker/yarn_install.rake +1 -1
  52. data/lib/webpacker/commands.rb +0 -1
  53. data/lib/webpacker/compiler.rb +17 -13
  54. data/lib/webpacker/configuration.rb +13 -5
  55. data/lib/webpacker/dev_server.rb +7 -10
  56. data/lib/webpacker/dev_server_proxy.rb +13 -6
  57. data/lib/webpacker/dev_server_runner.rb +13 -6
  58. data/lib/webpacker/helper.rb +78 -20
  59. data/lib/webpacker/manifest.rb +64 -21
  60. data/lib/webpacker/railtie.rb +16 -7
  61. data/lib/webpacker/runner.rb +3 -3
  62. data/lib/webpacker/version.rb +1 -1
  63. data/lib/webpacker/webpack_runner.rb +14 -3
  64. data/package.json +46 -34
  65. data/package/__tests__/config.js +37 -3
  66. data/package/__tests__/dev_server.js +15 -0
  67. data/package/__tests__/production.js +2 -2
  68. data/package/__tests__/staging.js +3 -3
  69. data/package/__tests__/test.js +2 -1
  70. data/package/config.js +21 -9
  71. data/package/config_types/config_list.js +5 -6
  72. data/package/dev_server.js +3 -1
  73. data/package/environments/__tests__/base.js +7 -5
  74. data/package/environments/base.js +84 -31
  75. data/package/environments/development.js +6 -2
  76. data/package/environments/production.js +46 -36
  77. data/package/rules/babel.js +10 -4
  78. data/package/rules/file.js +8 -3
  79. data/package/rules/index.js +7 -2
  80. data/package/rules/node_modules.js +23 -0
  81. data/package/utils/__tests__/get_style_rule.js +20 -0
  82. data/package/utils/deep_merge.js +5 -6
  83. data/package/utils/get_style_rule.js +29 -42
  84. data/package/utils/helpers.js +18 -6
  85. data/package/utils/objectify.js +1 -2
  86. data/test/compiler_test.rb +15 -3
  87. data/test/configuration_test.rb +9 -0
  88. data/test/dev_server_runner_test.rb +51 -0
  89. data/test/helper_test.rb +48 -5
  90. data/test/manifest_test.rb +14 -0
  91. data/test/rake_tasks_test.rb +34 -0
  92. data/test/test_app/config.ru +5 -0
  93. data/test/test_app/config/application.rb +1 -0
  94. data/test/test_app/config/webpack/development.js +0 -0
  95. data/test/test_app/config/webpacker.yml +20 -0
  96. data/test/test_app/config/webpacker_public_root.yml +19 -0
  97. data/test/test_app/package.json +13 -0
  98. data/test/test_app/public/packs/manifest.json +22 -1
  99. data/test/test_app/yarn.lock +11 -0
  100. data/test/test_helper.rb +1 -3
  101. data/test/webpack_runner_test.rb +51 -0
  102. data/yarn.lock +4077 -2816
  103. metadata +28 -6
  104. data/lib/install/config/.babelrc +0 -18
  105. data/lib/install/config/.postcssrc.yml +0 -3
  106. data/lib/install/examples/react/.babelrc +0 -6
@@ -0,0 +1,12 @@
1
+ module.exports = {
2
+ plugins: [
3
+ require('postcss-import'),
4
+ require('postcss-flexbugs-fixes'),
5
+ require('postcss-preset-env')({
6
+ autoprefixer: {
7
+ flexbox: 'no-2009'
8
+ },
9
+ stage: 3
10
+ })
11
+ ]
12
+ }
@@ -3,8 +3,10 @@
3
3
  default: &default
4
4
  source_path: app/javascript
5
5
  source_entry_path: packs
6
+ public_root_path: public
6
7
  public_output_path: packs
7
8
  cache_path: tmp/cache/webpacker
9
+ check_yarn_integrity: false
8
10
  webpack_compile_output: false
9
11
 
10
12
  # Additional paths webpack should lookup modules
@@ -14,7 +16,25 @@ default: &default
14
16
  # Reload manifest.json on all requests so we reload latest compiled packs
15
17
  cache_manifest: false
16
18
 
19
+ # Extract and emit a css file
20
+ extract_css: false
21
+
22
+ static_assets_extensions:
23
+ - .jpg
24
+ - .jpeg
25
+ - .png
26
+ - .gif
27
+ - .tiff
28
+ - .ico
29
+ - .svg
30
+ - .eot
31
+ - .otf
32
+ - .ttf
33
+ - .woff
34
+ - .woff2
35
+
17
36
  extensions:
37
+ - .mjs
18
38
  - .js
19
39
  - .sass
20
40
  - .scss
@@ -32,6 +52,9 @@ development:
32
52
  <<: *default
33
53
  compile: true
34
54
 
55
+ # Verifies that versions and hashed value of the package contents in the project's package.json
56
+ check_yarn_integrity: true
57
+
35
58
  # Reference: https://webpack.js.org/configuration/dev-server/
36
59
  dev_server:
37
60
  https: false
@@ -65,5 +88,8 @@ production:
65
88
  # Production depends on precompilation of packs prior to booting for performance.
66
89
  compile: false
67
90
 
91
+ # Extract and emit a css file
92
+ extract_css: true
93
+
68
94
  # Cache manifest.json for performance
69
95
  cache_manifest: true
@@ -9,7 +9,7 @@ insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
9
9
  after: "require('@rails/webpacker')\n"
10
10
 
11
11
  insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
12
- "environment.loaders.append('elm', elm)\n",
12
+ "environment.loaders.prepend('elm', elm)\n",
13
13
  before: "module.exports"
14
14
 
15
15
  say "Copying Elm example entry file to #{Webpacker.config.source_entry_path}"
@@ -27,7 +27,7 @@ run "yarn run elm init"
27
27
  run "yarn run elm make"
28
28
 
29
29
  say "Updating webpack paths to include .elm file extension"
30
- insert_into_file Webpacker.config.config_path, " - .elm\n", after: /extensions:\n/
30
+ insert_into_file Webpacker.config.config_path, "- .elm\n".indent(4), after: /\s+extensions:\n/
31
31
 
32
32
  say "Updating Elm source location"
33
33
  gsub_file "elm.json", /\"\src\"\n/,
@@ -9,11 +9,11 @@ insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
9
9
  after: "require('@rails/webpacker')\n"
10
10
 
11
11
  insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
12
- "environment.loaders.append('erb', erb)\n",
12
+ "environment.loaders.prepend('erb', erb)\n",
13
13
  before: "module.exports"
14
14
 
15
15
  say "Updating webpack paths to include .erb file extension"
16
- insert_into_file Webpacker.config.config_path, " - .erb\n", after: /extensions:\n/
16
+ insert_into_file Webpacker.config.config_path, "- .erb\n".indent(4), after: /\s+extensions:\n/
17
17
 
18
18
  say "Copying the example entry file to #{Webpacker.config.source_entry_path}"
19
19
  copy_file "#{__dir__}/examples/erb/hello_erb.js.erb",
@@ -0,0 +1,83 @@
1
+ module.exports = function(api) {
2
+ var validEnv = ['development', 'test', 'production']
3
+ var currentEnv = api.env()
4
+ var isDevelopmentEnv = api.env('development')
5
+ var isProductionEnv = api.env('production')
6
+ var isTestEnv = api.env('test')
7
+
8
+ if (!validEnv.includes(currentEnv)) {
9
+ throw new Error(
10
+ 'Please specify a valid `NODE_ENV` or ' +
11
+ '`BABEL_ENV` environment variables. Valid values are "development", ' +
12
+ '"test", and "production". Instead, received: ' +
13
+ JSON.stringify(currentEnv) +
14
+ '.'
15
+ )
16
+ }
17
+
18
+ return {
19
+ presets: [
20
+ isTestEnv && [
21
+ require('@babel/preset-env').default,
22
+ {
23
+ targets: {
24
+ node: 'current'
25
+ }
26
+ }
27
+ ],
28
+ (isProductionEnv || isDevelopmentEnv) && [
29
+ require('@babel/preset-env').default,
30
+ {
31
+ forceAllTransforms: true,
32
+ useBuiltIns: 'entry',
33
+ modules: false,
34
+ exclude: ['transform-typeof-symbol']
35
+ }
36
+ ],
37
+ [
38
+ require('@babel/preset-react').default,
39
+ {
40
+ development: isDevelopmentEnv || isTestEnv,
41
+ useBuiltIns: true
42
+ }
43
+ ]
44
+ ].filter(Boolean),
45
+ plugins: [
46
+ require('babel-plugin-macros'),
47
+ require('@babel/plugin-syntax-dynamic-import').default,
48
+ isTestEnv && require('babel-plugin-dynamic-import-node'),
49
+ require('@babel/plugin-transform-destructuring').default,
50
+ [
51
+ require('@babel/plugin-proposal-class-properties').default,
52
+ {
53
+ loose: true
54
+ }
55
+ ],
56
+ [
57
+ require('@babel/plugin-proposal-object-rest-spread').default,
58
+ {
59
+ useBuiltIns: true
60
+ }
61
+ ],
62
+ [
63
+ require('@babel/plugin-transform-runtime').default,
64
+ {
65
+ helpers: false,
66
+ regenerator: true
67
+ }
68
+ ],
69
+ [
70
+ require('@babel/plugin-transform-regenerator').default,
71
+ {
72
+ async: false
73
+ }
74
+ ],
75
+ isProductionEnv && [
76
+ require('babel-plugin-transform-react-remove-prop-types').default,
77
+ {
78
+ removeImport: true
79
+ }
80
+ ]
81
+ ].filter(Boolean)
82
+ }
83
+ }
@@ -1,6 +1 @@
1
- import { Application } from "stimulus"
2
- import { definitionsFromContext } from "stimulus/webpack-helpers"
3
-
4
- const application = Application.start()
5
- const context = require.context("controllers", true, /.js$/)
6
- application.load(definitionsFromContext(context))
1
+ import "controllers"
@@ -0,0 +1,9 @@
1
+ // Load all the controllers within this directory and all subdirectories.
2
+ // Controller files must be named *_controller.js.
3
+
4
+ import { Application } from "stimulus"
5
+ import { definitionsFromContext } from "stimulus/webpack-helpers"
6
+
7
+ const application = Application.start()
8
+ const context = require.context("controllers", true, /_controller\.js$/)
9
+ application.load(definitionsFromContext(context))
@@ -6,6 +6,10 @@
6
6
  "lib": ["es6", "dom"],
7
7
  "module": "es6",
8
8
  "moduleResolution": "node",
9
+ "baseUrl": ".",
10
+ "paths": {
11
+ "*": ["node_modules/*", "app/javascript/*"]
12
+ },
9
13
  "sourceMap": true,
10
14
  "target": "es5"
11
15
  },
@@ -48,9 +48,9 @@ document.addEventListener('DOMContentLoaded', () => {
48
48
  //
49
49
  //
50
50
  //
51
- // If the using turbolinks, install 'vue-turbolinks':
51
+ // If the project is using turbolinks, install 'vue-turbolinks':
52
52
  //
53
- // yarn add 'vue-turbolinks'
53
+ // yarn add vue-turbolinks
54
54
  //
55
55
  // Then uncomment the code block below:
56
56
  //
@@ -63,8 +63,10 @@ document.addEventListener('DOMContentLoaded', () => {
63
63
  // document.addEventListener('turbolinks:load', () => {
64
64
  // const app = new Vue({
65
65
  // el: '#hello',
66
- // data: {
67
- // message: "Can you say hello?"
66
+ // data: () => {
67
+ // return {
68
+ // message: "Can you say hello?"
69
+ // }
68
70
  // },
69
71
  // components: { App }
70
72
  // })
@@ -7,4 +7,12 @@
7
7
  // To reference this file, add <%= javascript_pack_tag 'application' %> to the appropriate
8
8
  // layout file, like app/views/layouts/application.html.erb
9
9
 
10
+
11
+ // Uncomment to copy all static images under ../images to the output folder and reference
12
+ // them with the image_pack_tag helper in views (e.g <%= image_pack_tag 'rails.png' %>)
13
+ // or the `imagePath` JavaScript helper below.
14
+ //
15
+ // const images = require.context('../images', true)
16
+ // const imagePath = (name) => images(name, true)
17
+
10
18
  console.log('Hello World from Webpacker')
@@ -1,6 +1,11 @@
1
+ const PnpWebpackPlugin = require('pnp-webpack-plugin')
2
+
1
3
  module.exports = {
2
4
  test: /\.(ts|tsx)?(\.erb)?$/,
3
- use: [{
4
- loader: 'ts-loader'
5
- }]
5
+ use: [
6
+ {
7
+ loader: 'ts-loader',
8
+ options: PnpWebpackPlugin.tsLoaderOptions()
9
+ }
10
+ ]
6
11
  }
@@ -1,13 +1,6 @@
1
- const { dev_server: devServer } = require('@rails/webpacker').config
2
-
3
- const isProduction = process.env.NODE_ENV === 'production'
4
- const inDevServer = process.argv.find(v => v.includes('webpack-dev-server'))
5
- const extractCSS = !(inDevServer && (devServer && devServer.hmr)) || isProduction
6
-
7
1
  module.exports = {
8
2
  test: /\.vue(\.erb)?$/,
9
3
  use: [{
10
- loader: 'vue-loader',
11
- options: { extractCSS }
4
+ loader: 'vue-loader'
12
5
  }]
13
6
  }
@@ -1,31 +1,18 @@
1
1
  require "webpacker/configuration"
2
+ require "fileutils"
2
3
 
3
- babelrc = Rails.root.join(".babelrc")
4
+ replace_babel_config = FileUtils.compare_file(Rails.root.join("babel.config.js"), "#{__dir__}/config/babel.config.js")
4
5
 
5
- if File.exist?(babelrc)
6
- react_babelrc = JSON.parse(File.read(babelrc))
7
- react_babelrc["presets"] ||= []
8
-
9
- unless react_babelrc["presets"].include?("react")
10
- react_babelrc["presets"].push("react")
11
- say "Copying react preset to your .babelrc file"
12
-
13
- File.open(babelrc, "w") do |f|
14
- f.puts JSON.pretty_generate(react_babelrc)
15
- end
16
- end
17
- else
18
- say "Copying .babelrc to app root directory"
19
- copy_file "#{__dir__}/examples/react/.babelrc", ".babelrc"
20
- end
6
+ say "Copying babel.config.js to app root directory"
7
+ copy_file "#{__dir__}/examples/react/babel.config.js", "babel.config.js", force: replace_babel_config
21
8
 
22
9
  say "Copying react example entry file to #{Webpacker.config.source_entry_path}"
23
10
  copy_file "#{__dir__}/examples/react/hello_react.jsx", "#{Webpacker.config.source_entry_path}/hello_react.jsx"
24
11
 
25
12
  say "Updating webpack paths to include .jsx file extension"
26
- insert_into_file Webpacker.config.config_path, " - .jsx\n", after: /extensions:\n/
13
+ insert_into_file Webpacker.config.config_path, "- .jsx\n".indent(4), after: /\s+extensions:\n/
27
14
 
28
15
  say "Installing all react dependencies"
29
- run "yarn add react react-dom babel-preset-react prop-types"
16
+ run "yarn add react react-dom @babel/preset-react prop-types babel-plugin-transform-react-remove-prop-types"
30
17
 
31
18
  say "Webpacker now supports react.js 🎉", :green
@@ -4,47 +4,46 @@ copy_file "#{__dir__}/config/webpacker.yml", "config/webpacker.yml"
4
4
  puts "Copying webpack core config"
5
5
  directory "#{__dir__}/config/webpack", "config/webpack"
6
6
 
7
- say "Copying .postcssrc.yml to app root directory"
8
- copy_file "#{__dir__}/config/.postcssrc.yml", ".postcssrc.yml"
7
+ say "Copying postcss.config.js to app root directory"
8
+ copy_file "#{__dir__}/config/postcss.config.js", "postcss.config.js"
9
9
 
10
- say "Copying .babelrc to app root directory"
11
- copy_file "#{__dir__}/config/.babelrc", ".babelrc"
10
+ say "Copying babel.config.js to app root directory"
11
+ copy_file "#{__dir__}/config/babel.config.js", "babel.config.js"
12
12
 
13
- say "Creating JavaScript app source directory"
14
- directory "#{__dir__}/javascript", Webpacker.config.source_path
13
+ say "Copying .browserslistrc to app root directory"
14
+ copy_file "#{__dir__}/config/.browserslistrc", ".browserslistrc"
15
15
 
16
- apply "#{__dir__}/binstubs.rb"
17
-
18
- say "Adding configurations"
19
-
20
- check_yarn_integrity_config = ->(value) { <<CONFIG }
21
- # Verifies that versions and hashed value of the package contents in the project's package.json
22
- config.webpacker.check_yarn_integrity = #{value}
23
- CONFIG
24
-
25
- if Rails::VERSION::MAJOR >= 5
26
- environment check_yarn_integrity_config.call("true"), env: :development
27
- environment check_yarn_integrity_config.call("false"), env: :production
16
+ if Dir.exists?(Webpacker.config.source_path)
17
+ say "The JavaScript app source directory already exists"
28
18
  else
29
- inject_into_file "config/environments/development.rb", "\n #{check_yarn_integrity_config.call("true")}", after: "Rails.application.configure do", verbose: false
30
- inject_into_file "config/environments/production.rb", "\n #{check_yarn_integrity_config.call("false")}", after: "Rails.application.configure do", verbose: false
19
+ say "Creating JavaScript app source directory"
20
+ directory "#{__dir__}/javascript", Webpacker.config.source_path
31
21
  end
32
22
 
23
+ apply "#{__dir__}/binstubs.rb"
24
+
33
25
  if File.exists?(".gitignore")
34
- append_to_file ".gitignore", <<-EOS
35
- /public/packs
36
- /public/packs-test
37
- /node_modules
38
- yarn-debug.log*
39
- .yarn-integrity
40
- EOS
26
+ append_to_file ".gitignore" do
27
+ "\n" +
28
+ "/public/packs\n" +
29
+ "/public/packs-test\n" +
30
+ "/node_modules\n" +
31
+ "/yarn-error.log\n" +
32
+ "yarn-debug.log*\n" +
33
+ ".yarn-integrity\n"
34
+ end
41
35
  end
42
36
 
43
- say "Installing all JavaScript dependencies"
44
- run "yarn add @rails/webpacker@3.5 --tilde"
37
+ if Webpacker::VERSION =~ /^[0-9]+\.[0-9]+\.[0-9]+$/
38
+ say "Installing all JavaScript dependencies [#{Webpacker::VERSION}]"
39
+ run "yarn add @rails/webpacker"
40
+ else
41
+ say "Installing all JavaScript dependencies [from prerelease rails/webpacker]"
42
+ run "yarn add @rails/webpacker@next"
43
+ end
45
44
 
46
45
  say "Installing dev server for live reloading"
47
- run "yarn add --dev webpack-dev-server@2.11.2"
46
+ run "yarn add --dev webpack-dev-server"
48
47
 
49
48
  if Rails::VERSION::MAJOR == 5 && Rails::VERSION::MINOR > 1
50
49
  say "You need to allow webpack-dev-server host as allowed origin for connect-src.", :yellow
@@ -24,23 +24,23 @@ insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
24
24
  after: "require('@rails/webpacker')\n"
25
25
 
26
26
  insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
27
- "environment.loaders.append('typescript', typescript)\n",
27
+ "environment.loaders.prepend('typescript', typescript)\n",
28
28
  before: "module.exports"
29
29
 
30
30
  say "Copying tsconfig.json to the Rails root directory for typescript"
31
31
  copy_file "#{__dir__}/examples/#{example_source}/tsconfig.json", "tsconfig.json"
32
32
 
33
33
  say "Updating webpack paths to include .ts file extension"
34
- insert_into_file Webpacker.config.config_path, " - .ts\n", after: /extensions:\n/
34
+ insert_into_file Webpacker.config.config_path, "- .ts\n".indent(4), after: /\s+extensions:\n/
35
35
 
36
36
  say "Updating webpack paths to include .tsx file extension"
37
- insert_into_file Webpacker.config.config_path, " - .tsx\n", after: /extensions:\n/
37
+ insert_into_file Webpacker.config.config_path, "- .tsx\n".indent(4), after: /\s+extensions:\n/
38
38
 
39
39
  say "Copying the example entry file to #{Webpacker.config.source_entry_path}"
40
40
  copy_file "#{__dir__}/examples/typescript/hello_typescript.ts",
41
41
  "#{Webpacker.config.source_entry_path}/hello_typescript.ts"
42
42
 
43
43
  say "Installing all typescript dependencies"
44
- run "yarn add typescript ts-loader@3.5.0 #{additional_packages}"
44
+ run "yarn add typescript ts-loader #{additional_packages}"
45
45
 
46
46
  say "Webpacker now supports typescript 🎉", :green
@@ -3,17 +3,26 @@ require "webpacker/configuration"
3
3
  say "Copying vue loader to config/webpack/loaders"
4
4
  copy_file "#{__dir__}/loaders/vue.js", Rails.root.join("config/webpack/loaders/vue.js").to_s
5
5
 
6
- say "Adding vue loader to config/webpack/environment.js"
6
+ say "Adding vue loader plugin to config/webpack/environment.js"
7
7
  insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
8
- "const vue = require('./loaders/vue')\n",
8
+ "const { VueLoaderPlugin } = require('vue-loader')\n",
9
9
  after: "require('@rails/webpacker')\n"
10
10
 
11
11
  insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
12
- "environment.loaders.append('vue', vue)\n",
12
+ "environment.plugins.prepend('VueLoaderPlugin', new VueLoaderPlugin())\n",
13
+ before: "module.exports"
14
+
15
+ say "Adding vue loader to config/webpack/environment.js"
16
+ insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
17
+ "const vue = require('./loaders/vue')\n",
18
+ after: "require('vue-loader')\n"
19
+
20
+ insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
21
+ "environment.loaders.prepend('vue', vue)\n",
13
22
  before: "module.exports"
14
23
 
15
24
  say "Updating webpack paths to include .vue file extension"
16
- insert_into_file Webpacker.config.config_path, " - .vue\n", after: /extensions:\n/
25
+ insert_into_file Webpacker.config.config_path, "- .vue\n".indent(4), after: /\s+extensions:\n/
17
26
 
18
27
  say "Copying the example entry file to #{Webpacker.config.source_entry_path}"
19
28
  copy_file "#{__dir__}/examples/vue/hello_vue.js",
@@ -24,7 +33,7 @@ copy_file "#{__dir__}/examples/vue/app.vue",
24
33
  "#{Webpacker.config.source_path}/app.vue"
25
34
 
26
35
  say "Installing all Vue dependencies"
27
- run "yarn add vue vue-loader@14.2.2 vue-template-compiler"
36
+ run "yarn add vue vue-loader vue-template-compiler"
28
37
 
29
38
  if Rails::VERSION::MAJOR == 5 && Rails::VERSION::MINOR > 1
30
39
  say "You need to enable unsafe-eval rule.", :yellow