webpacker 4.2.2 → 5.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/.eslintrc.js +8 -8
  3. data/.github/workflows/jest.yml +38 -0
  4. data/.github/workflows/js-lint.yml +39 -0
  5. data/.github/workflows/rubocop.yml +39 -0
  6. data/.github/workflows/ruby.yml +70 -0
  7. data/.node-version +1 -1
  8. data/.travis.yml +7 -20
  9. data/CHANGELOG.md +40 -2
  10. data/Gemfile +1 -0
  11. data/Gemfile.lock +81 -78
  12. data/README.md +59 -295
  13. data/docs/css.md +61 -7
  14. data/docs/deployment.md +2 -2
  15. data/docs/docker.md +17 -17
  16. data/docs/engines.md +13 -0
  17. data/docs/env.md +0 -2
  18. data/docs/integrations.md +220 -0
  19. data/docs/target.md +22 -0
  20. data/docs/testing.md +2 -3
  21. data/docs/troubleshooting.md +3 -1
  22. data/docs/typescript.md +92 -28
  23. data/docs/webpack-dev-server.md +1 -1
  24. data/lib/install/config/babel.config.js +1 -3
  25. data/lib/install/config/webpacker.yml +1 -5
  26. data/lib/install/examples/react/tsconfig.json +2 -1
  27. data/lib/install/examples/typescript/tsconfig.json +2 -1
  28. data/lib/install/loaders/svelte.js +2 -2
  29. data/lib/install/template.rb +1 -1
  30. data/lib/install/typescript.rb +5 -12
  31. data/lib/tasks/webpacker/check_node.rake +15 -8
  32. data/lib/tasks/webpacker/check_yarn.rake +17 -10
  33. data/lib/tasks/webpacker/clean.rake +12 -6
  34. data/lib/tasks/webpacker/clobber.rake +8 -4
  35. data/lib/tasks/webpacker/yarn_install.rake +5 -16
  36. data/lib/webpacker/commands.rb +33 -9
  37. data/lib/webpacker/compiler.rb +9 -5
  38. data/lib/webpacker/configuration.rb +13 -9
  39. data/lib/webpacker/dev_server_proxy.rb +3 -1
  40. data/lib/webpacker/dev_server_runner.rb +6 -6
  41. data/lib/webpacker/helper.rb +37 -18
  42. data/lib/webpacker/manifest.rb +4 -4
  43. data/lib/webpacker/railtie.rb +2 -45
  44. data/lib/webpacker/runner.rb +1 -0
  45. data/lib/webpacker/version.rb +1 -1
  46. data/lib/webpacker/webpack_runner.rb +2 -2
  47. data/package.json +39 -39
  48. data/package/__tests__/config.js +12 -1
  49. data/package/__tests__/dev_server.js +2 -0
  50. data/package/__tests__/development.js +14 -1
  51. data/package/config.js +4 -1
  52. data/package/configPath.js +3 -0
  53. data/package/dev_server.js +1 -1
  54. data/package/env.js +1 -2
  55. data/package/environments/__tests__/base.js +30 -3
  56. data/package/environments/base.js +17 -7
  57. data/package/environments/development.js +39 -37
  58. data/package/environments/production.js +1 -3
  59. data/package/rules/babel.js +12 -5
  60. data/package/rules/file.js +1 -0
  61. data/package/rules/node_modules.js +1 -3
  62. data/package/rules/sass.js +7 -1
  63. data/package/utils/helpers.js +1 -1
  64. data/test/compiler_test.rb +8 -3
  65. data/test/configuration_test.rb +8 -7
  66. data/test/dev_server_runner_test.rb +1 -1
  67. data/test/helper_test.rb +3 -0
  68. data/test/manifest_test.rb +37 -6
  69. data/test/rake_tasks_test.rb +11 -0
  70. data/test/test_app/app/javascript/packs/multi_entry.css +4 -0
  71. data/test/test_app/app/javascript/packs/multi_entry.js +4 -0
  72. data/test/test_app/config/application.rb +0 -1
  73. data/test/test_app/config/webpacker.yml +7 -1
  74. data/test/test_app/public/packs/manifest.json +1 -0
  75. data/test/webpack_runner_test.rb +1 -1
  76. data/webpacker.gemspec +4 -3
  77. data/yarn.lock +3413 -2843
  78. metadata +34 -13
  79. data/gemfiles/Gemfile-rails.4.2.x +0 -9
  80. data/gemfiles/Gemfile-rails.5.0.x +0 -9
  81. data/gemfiles/Gemfile-rails.5.1.x +0 -9
  82. data/lib/install/loaders/typescript.js +0 -11
@@ -10,8 +10,7 @@ Webpacker does not setup `Karma` by default, so you've to manually install it al
10
10
  "test": "NODE_ENV=test karma start"
11
11
  },
12
12
  "dependencies": {
13
- "typescript": "^2.5.2",
14
- "ts-loader": "^2.3.7"
13
+ "typescript": "^2.5.2"
15
14
  },
16
15
  "devDependencies": {
17
16
  "karma": "^1.7.1",
@@ -33,7 +32,7 @@ It is beneficial to use the same webpack configuration file (generated by webpac
33
32
  ```js
34
33
  // config/webpack/test.js
35
34
  const environment = require('./environment')
36
- environment.plugins.get('Manifest').opts.writeToFileEmit = process.env.NODE_ENV !== 'test'
35
+ environment.plugins.get('Manifest').options.writeToFileEmit = process.env.NODE_ENV !== 'test'
37
36
  environment.loaders.append('istanbul-instrumenter', {
38
37
  test: /\.ts$/,
39
38
  enforce: "post",
@@ -4,11 +4,13 @@
4
4
 
5
5
  1. Read the error message carefully. The error message will tell you the precise key value
6
6
  that is not matching what Webpack expects.
7
- 2. Put a `debugger` statement in your Webpack configuration and run `bin/webpack --debug`.
7
+ 2. Put a `debugger` statement in your Webpack configuration and run `bin/webpack --debug-webpacker`.
8
8
  If you have a node debugger installed, you'll see the Chrome debugger for your webpack
9
9
  config. For example, install the Chrome extension [NiM](https://chrome.google.com/webstore/detail/nodejs-v8-inspector-manag/gnhhdgbaldcilmgcpfddgdbkhjohddkj) and
10
10
  set the option for the dev tools to open automatically. For more details on debugging,
11
11
  see the official [Webpack docs on debugging](https://webpack.js.org/contribute/debugging/#devtools)
12
+ 3. Any arguments that you add to bin/webpack get sent to webpack. For example, you can pass `--debug` to switch loaders to debug mode. See [webpack CLI debug options](https://webpack.js.org/api/cli/#debug-options) for more information on the available options.
13
+ 4. You can also pass additional options to the command to run the webpack-dev-server and start the webpack-dev-server with the option `--debug-webpacker`
12
14
 
13
15
  ## ENOENT: no such file or directory - node-sass
14
16
 
@@ -1,19 +1,98 @@
1
- # Typescript
1
+ # TypeScript
2
2
 
3
+ ## Installation
3
4
 
4
- ## Typescript with React
5
+ 1. Run the TypeScript installer
5
6
 
6
- 1. Setup react using Webpacker [react installer](../README.md#react). Then run the typescript installer
7
+ ```bash
8
+ bundle exec rails webpacker:install:typescript
9
+ ```
10
+
11
+ After that, a new file called `hello_typescript.ts` will be present in your `packs` directory (or rather the `source_entry_path` of your `webpacker.yml` configuration). You're now ready to write TypeScript.
12
+
13
+ ## (Optional) Adding Compile-Time Type Checking
14
+
15
+ The default installation only transpiles your TypeScript code using Babel. If you would like to enable type checking as part of the Webpack compilation process (i.e. fail the build if there are TS errors), you can do the following:
16
+
17
+ 1. Install the Fork TS Checker Webpack Plugin
18
+
19
+ ```sh
20
+ yarn add --dev fork-ts-checker-webpack-plugin
21
+ ```
22
+
23
+ 2. Then add it to your development environment config in `config/webpack/development.js`
24
+
25
+ ```js
26
+ const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin");
27
+ const path = require("path");
28
+
29
+ environment.plugins.append(
30
+ "ForkTsCheckerWebpackPlugin",
31
+ new ForkTsCheckerWebpackPlugin({
32
+ typescript: {
33
+ configFile: path.resolve(__dirname, "../../tsconfig.json"),
34
+ },
35
+ async: false,
36
+ })
37
+ );
38
+ ```
39
+
40
+ If you are `fork-ts-checker-webpack-plugin` older than 5.0, the `tsconfig` option also needs to be specified:
41
+
42
+ ```js
43
+ const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin");
44
+ const path = require("path");
45
+
46
+ environment.plugins.append(
47
+ "ForkTsCheckerWebpackPlugin",
48
+ new ForkTsCheckerWebpackPlugin({
49
+ // this is a relative path to your project's TypeScript config
50
+ tsconfig: path.resolve(__dirname, "../../tsconfig.json"),
51
+ // non-async so type checking will block compilation
52
+ async: false,
53
+ })
54
+ );
55
+ ```
56
+
57
+ ## Upgrading to 5.1
58
+
59
+ If you update your App to `webpacker >= 5.1` and had TypeScript installed before, you need to add some new/remove some old configurations:
60
+
61
+ 1. Remove old packages:
62
+ - `yarn remove ts-loader`
63
+
64
+ 2. Add new packages:
65
+ - `yarn add @babel/preset-typescript`
66
+
67
+ 3. Remove old configuration files:
68
+ - Delete this file: `config/webpack/loaders/typescript.js`
69
+
70
+ 4. Remove the following lines from `config/webpack/environment.js`:
71
+ - `const typescript = require('./loaders/typescript')`
72
+ - `environment.loaders.prepend('typescript', typescript)`
73
+
74
+ 5. Add the TypeScript preset to your `babel.config.js`:
75
+ - This line `['@babel/preset-typescript', { 'allExtensions': true, 'isTSX': true }]` has to be added as the last item to the `presets` array in your `babel.config.js`
76
+
77
+ ### Upgrading to 5.1 for Vue users
78
+
79
+ 1. Remove old packages:
80
+ - `yarn remove ts-loader pnp-webpack-plugin`
81
+
82
+ 2. Follow point 3 and 4 from the `TypeScript with Vue components` section
83
+
84
+ ## TypeScript with React
85
+
86
+ 1. Setup react using Webpacker [react installer](../README.md#react). Then run the TypeScript installer
7
87
 
8
88
  ```bash
9
89
  bundle exec rails webpacker:install:typescript
10
- yarn add @types/react @types/react-dom
11
90
  ```
12
91
 
13
- 2. Rename the generated `hello_react.js` to `hello_react.tsx`. Make the file valid typescript and
14
- now you can use typescript, JSX with React.
92
+ 2. Rename the generated `hello_react.js` to `hello_react.tsx`. Make the file valid TypeScript and
93
+ now you can use TypeScript, JSX with React.
15
94
 
16
- ## Typescript with Vue components
95
+ ## TypeScript with Vue components
17
96
 
18
97
  1. Setup Vue using the Webpacker [Vue installer](../README.md#vue). Then run the TypeScript installer
19
98
 
@@ -22,37 +101,22 @@ bundle exec rails webpacker:install:typescript
22
101
  ```
23
102
 
24
103
  2. Rename generated `hello_vue.js` to `hello_vue.ts`.
25
- 3. Add the webpack plug-n-play plugin to your yarn packages with `yarn add pnp-webpack-plugin`.
26
- 4. Change the generated `config/webpack/loaders/typescript.js` from
104
+ 3. Install the right Babel preset: `yarn add babel-preset-typescript-vue`
105
+ 4. Change the generated `babel.config.js` from
27
106
 
28
107
  ```js
29
- module.exports = {
30
- test: /\.(ts|tsx)?(\.erb)?$/,
31
- use: [{
32
- loader: 'ts-loader'
33
- }]
34
- }
108
+ ["@babel/preset-typescript", { "allExtensions": true, "isTSX": true }]
35
109
  ```
36
110
 
37
111
  to
38
112
 
39
113
  ```js
40
- const PnpWebpackPlugin = require('pnp-webpack-plugin');
41
-
42
- module.exports = {
43
- test: /\.(ts|tsx)?(\.erb)?$/,
44
- use: [{
45
- loader: 'ts-loader',
46
- options: PnpWebpackPlugin.tsLoaderOptions({
47
- appendTsSuffixTo: [/\.vue$/]
48
- })
49
- }]
50
- }
114
+ ["babel-preset-typescript-vue", { "allExtensions": true, "isTSX": true }]
51
115
  ```
52
116
 
53
- and now you can use `<script lang="ts">` in your `.vue` component files. See [the pnp-webpack-plugin docs for the `ts-loader` integration](https://github.com/arcanis/pnp-webpack-plugin#ts-loader-integration) for more info.
117
+ and now you can use `<script lang="ts">` in your `.vue` component files. See [the babel-preset-typescript-vue docs](https://www.npmjs.com/package/babel-preset-typescript-vue) for more info.
54
118
 
55
- ## HTML templates with Typescript and Angular
119
+ ## HTML templates with TypeScript and Angular
56
120
 
57
121
  After you have installed Angular using `bundle exec rails webpacker:install:angular`
58
122
  you would need to follow these steps to add HTML templates support:
@@ -19,7 +19,7 @@ Now if you refresh your Rails view everything should work as expected.
19
19
  Webpacker out-of-the-box supports HMR with `webpack-dev-server` and
20
20
  you can toggle it by setting `dev_server/hmr` option inside `webpacker.yml`.
21
21
 
22
- Checkout this guide for more information:
22
+ Check out this guide for more information:
23
23
 
24
24
  - https://webpack.js.org/configuration/dev-server/#devserver-hot
25
25
 
@@ -56,9 +56,7 @@ module.exports = function(api) {
56
56
  [
57
57
  '@babel/plugin-transform-runtime',
58
58
  {
59
- helpers: false,
60
- regenerator: true,
61
- corejs: false
59
+ helpers: false
62
60
  }
63
61
  ],
64
62
  [
@@ -6,12 +6,11 @@ default: &default
6
6
  public_root_path: public
7
7
  public_output_path: packs
8
8
  cache_path: tmp/cache/webpacker
9
- check_yarn_integrity: false
10
9
  webpack_compile_output: true
11
10
 
12
11
  # Additional paths webpack should lookup modules
13
12
  # ['app/assets', 'engine/foo/app/assets']
14
- resolved_paths: []
13
+ additional_paths: []
15
14
 
16
15
  # Reload manifest.json on all requests so we reload latest compiled packs
17
16
  cache_manifest: false
@@ -52,9 +51,6 @@ development:
52
51
  <<: *default
53
52
  compile: true
54
53
 
55
- # Verifies that correct packages and versions are installed by inspecting package.json, yarn.lock, and node_modules
56
- check_yarn_integrity: true
57
-
58
54
  # Reference: https://webpack.js.org/configuration/dev-server/
59
55
  dev_server:
60
56
  https: false
@@ -8,7 +8,8 @@
8
8
  "moduleResolution": "node",
9
9
  "sourceMap": true,
10
10
  "target": "es5",
11
- "jsx": "react"
11
+ "jsx": "react",
12
+ "noEmit": true
12
13
  },
13
14
  "exclude": [
14
15
  "**/*.spec.ts",
@@ -11,7 +11,8 @@
11
11
  "*": ["node_modules/*", "app/javascript/*"]
12
12
  },
13
13
  "sourceMap": true,
14
- "target": "es5"
14
+ "target": "es5",
15
+ "noEmit": true
15
16
  },
16
17
  "exclude": [
17
18
  "**/*.spec.ts",
@@ -1,9 +1,9 @@
1
1
  module.exports = {
2
- test: /\.svelte$/,
2
+ test: /\.svelte(\.erb)?$/,
3
3
  use: [{
4
4
  loader: 'svelte-loader',
5
5
  options: {
6
- hotReload: true
6
+ hotReload: false
7
7
  }
8
8
  }],
9
9
  }
@@ -1,7 +1,7 @@
1
1
  # Install Webpacker
2
2
  copy_file "#{__dir__}/config/webpacker.yml", "config/webpacker.yml"
3
3
 
4
- puts "Copying webpack core config"
4
+ say "Copying webpack core config"
5
5
  directory "#{__dir__}/config/webpack", "config/webpack"
6
6
 
7
7
  say "Copying postcss.config.js to app root directory"
@@ -15,17 +15,10 @@ if File.exist?(package_json)
15
15
  end
16
16
  end
17
17
 
18
- say "Copying typescript loader to config/webpack/loaders"
19
- copy_file "#{__dir__}/loaders/typescript.js", Rails.root.join("config/webpack/loaders/typescript.js").to_s
20
-
21
- say "Adding typescript loader to config/webpack/environment.js"
22
- insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
23
- "const typescript = require('./loaders/typescript')\n",
24
- after: /require\(('|")@rails\/webpacker\1\);?\n/
25
-
26
- insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
27
- "environment.loaders.prepend('typescript', typescript)\n",
28
- before: "module.exports"
18
+ say "Adding TypeScript preset to babel.config.js"
19
+ insert_into_file Rails.root.join("babel.config.js").to_s,
20
+ ",\n ['@babel/preset-typescript', { 'allExtensions': true, 'isTSX': true }]",
21
+ before: /\s*\].filter\(Boolean\),\n\s*plugins: \[/
29
22
 
30
23
  say "Copying tsconfig.json to the Rails root directory for typescript"
31
24
  copy_file "#{__dir__}/examples/#{example_source}/tsconfig.json", "tsconfig.json"
@@ -41,6 +34,6 @@ copy_file "#{__dir__}/examples/typescript/hello_typescript.ts",
41
34
  "#{Webpacker.config.source_entry_path}/hello_typescript.ts"
42
35
 
43
36
  say "Installing all typescript dependencies"
44
- run "yarn add typescript ts-loader #{additional_packages}"
37
+ run "yarn add typescript @babel/preset-typescript #{additional_packages}"
45
38
 
46
39
  say "Webpacker now supports typescript 🎉", :green
@@ -1,24 +1,31 @@
1
+ require "semantic_range"
1
2
  namespace :webpacker do
2
3
  desc "Verifies if Node.js is installed"
3
4
  task :check_node do
4
5
  begin
5
- node_version = `node -v || nodejs -v`
6
+ node_version = `node -v || nodejs -v`.strip
6
7
  raise Errno::ENOENT if node_version.blank?
7
8
 
8
9
  pkg_path = Pathname.new("#{__dir__}/../../../package.json").realpath
9
- node_requirement = JSON.parse(pkg_path.read)["engines"]["node"]
10
+ node_range = JSON.parse(pkg_path.read)["engines"]["node"]
11
+ is_valid = SemanticRange.satisfies?(node_version, node_range) rescue false
12
+ semver_major = node_version[/\d+/] rescue nil
13
+ is_unstable = semver_major.to_i.odd? rescue false
10
14
 
11
- requirement = Gem::Requirement.new(node_requirement)
12
- version = Gem::Version.new(node_version.strip.tr("v", ""))
15
+ if is_unstable
16
+ $stderr.puts "Warning: you are using an unstable release of Node.js (#{node_version}). If you encounter issues with Node.js, consider switching to an Active LTS release. More info: https://docs.npmjs.com/try-the-latest-stable-version-of-node"
17
+ end
13
18
 
14
- unless requirement.satisfied_by?(version)
15
- $stderr.puts "Webpacker requires Node.js #{requirement} and you are using #{version}"
19
+ unless is_valid
20
+ $stderr.puts "Webpacker requires Node.js \"#{node_range}\" and you are using #{node_version}"
16
21
  $stderr.puts "Please upgrade Node.js https://nodejs.org/en/download/"
17
- $stderr.puts "Exiting!" && exit!
22
+ $stderr.puts "Exiting!"
23
+ exit!
18
24
  end
19
25
  rescue Errno::ENOENT
20
26
  $stderr.puts "Node.js not installed. Please download and install Node.js https://nodejs.org/en/download/"
21
- $stderr.puts "Exiting!" && exit!
27
+ $stderr.puts "Exiting!"
28
+ exit!
22
29
  end
23
30
  end
24
31
  end
@@ -1,24 +1,31 @@
1
+ require "semantic_range"
1
2
  namespace :webpacker do
2
3
  desc "Verifies if Yarn is installed"
3
4
  task :check_yarn do
4
5
  begin
5
- yarn_version = `yarn --version`
6
+ yarn_version = `yarn --version`.strip
6
7
  raise Errno::ENOENT if yarn_version.blank?
7
8
 
8
9
  pkg_path = Pathname.new("#{__dir__}/../../../package.json").realpath
9
- yarn_requirement = JSON.parse(pkg_path.read)["engines"]["yarn"]
10
+ yarn_range = JSON.parse(pkg_path.read)["engines"]["yarn"]
11
+ is_valid = SemanticRange.satisfies?(yarn_version, yarn_range) rescue false
12
+ is_unsupported = SemanticRange.satisfies?(yarn_version, ">=2.0.0") rescue false
10
13
 
11
- requirement = Gem::Requirement.new(yarn_requirement)
12
- version = Gem::Version.new(yarn_version)
13
-
14
- unless requirement.satisfied_by?(version)
15
- $stderr.puts "Webpacker requires Yarn #{requirement} and you are using #{version}"
16
- $stderr.puts "Please upgrade Yarn https://yarnpkg.com/lang/en/docs/install/"
17
- $stderr.puts "Exiting!" && exit!
14
+ unless is_valid
15
+ $stderr.puts "Webpacker requires Yarn \"#{yarn_range}\" and you are using #{yarn_version}"
16
+ if is_unsupported
17
+ $stderr.puts "This version of Webpacker does not support Yarn #{yarn_version}. Please downgrade to a supported version of Yarn https://yarnpkg.com/lang/en/docs/install/"
18
+ $stderr.puts "For information on using Webpacker with Yarn 2.0, see https://github.com/rails/webpacker/issues/2112"
19
+ else
20
+ $stderr.puts "Please upgrade Yarn https://yarnpkg.com/lang/en/docs/install/"
21
+ end
22
+ $stderr.puts "Exiting!"
23
+ exit!
18
24
  end
19
25
  rescue Errno::ENOENT
20
26
  $stderr.puts "Yarn not installed. Please download and install Yarn from https://yarnpkg.com/lang/en/docs/install/"
21
- $stderr.puts "Exiting!" && exit!
27
+ $stderr.puts "Exiting!"
28
+ exit!
22
29
  end
23
30
  end
24
31
  end
@@ -4,16 +4,22 @@ require "webpacker/configuration"
4
4
 
5
5
  namespace :webpacker do
6
6
  desc "Remove old compiled webpacks"
7
- task :clean, [:keep] => ["webpacker:verify_install", :environment] do |_, args|
7
+ task :clean, [:keep, :age] => ["webpacker:verify_install", :environment] do |_, args|
8
8
  Webpacker.ensure_log_goes_to_stdout do
9
- Webpacker.clean(Integer(args.keep || 2))
9
+ Webpacker.clean(Integer(args.keep || 2), Integer(args.age || 3600))
10
10
  end
11
11
  end
12
12
  end
13
13
 
14
- # Run clean if the assets:clean is run
15
- if Rake::Task.task_defined?("assets:clean")
16
- Rake::Task["assets:clean"].enhance do
17
- Rake::Task["webpacker:clean"].invoke
14
+ skip_webpacker_clean = %w(no false n f).include?(ENV["WEBPACKER_PRECOMPILE"])
15
+
16
+ unless skip_webpacker_clean
17
+ # Run clean if the assets:clean is run
18
+ if Rake::Task.task_defined?("assets:clean")
19
+ Rake::Task["assets:clean"].enhance do
20
+ Rake::Task["webpacker:clean"].invoke
21
+ end
22
+ else
23
+ Rake::Task.define_task("assets:clean" => "webpacker:clean")
18
24
  end
19
25
  end
@@ -8,9 +8,13 @@ namespace :webpacker do
8
8
  end
9
9
  end
10
10
 
11
- # Run clobber if the assets:clobber is run
12
- if Rake::Task.task_defined?("assets:clobber")
13
- Rake::Task["assets:clobber"].enhance do
14
- Rake::Task["webpacker:clobber"].invoke
11
+ skip_webpacker_clobber = %w(no false n f).include?(ENV["WEBPACKER_PRECOMPILE"])
12
+
13
+ unless skip_webpacker_clobber
14
+ # Run clobber if the assets:clobber is run
15
+ if Rake::Task.task_defined?("assets:clobber")
16
+ Rake::Task["assets:clobber"].enhance do
17
+ Rake::Task["webpacker:clobber"].invoke
18
+ end
15
19
  end
16
20
  end
@@ -1,21 +1,10 @@
1
1
  namespace :webpacker do
2
2
  desc "Support for older Rails versions. Install all JavaScript dependencies as specified via Yarn"
3
3
  task :yarn_install do
4
- system "yarn install --no-progress"
5
-
6
- exit(1) unless $?.success?
4
+ valid_node_envs = %w[test development production]
5
+ node_env = ENV.fetch("NODE_ENV") do
6
+ valid_node_envs.include?(Rails.env) ? Rails.env : "production"
7
+ end
8
+ system({ "NODE_ENV" => node_env }, "yarn install --no-progress --frozen-lockfile")
7
9
  end
8
10
  end
9
-
10
- def enhance_yarn_install
11
- Rake::Task["yarn:install"].enhance do
12
- exit(1) unless $?.success?
13
- end
14
- end
15
-
16
- if Rake::Task.task_defined?("yarn:install")
17
- enhance_yarn_install
18
- else
19
- # this is mainly for pre-5.x era
20
- Rake::Task.define_task("yarn:install" => "webpacker:yarn_install")
21
- end