webpacker 2.0 → 3.0.0

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.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.rubocop.yml +21 -21
  4. data/CHANGELOG.md +107 -4
  5. data/Gemfile +3 -1
  6. data/Gemfile.lock +15 -8
  7. data/README.md +137 -937
  8. data/docs/assets.md +106 -0
  9. data/docs/css.md +82 -0
  10. data/docs/deployment.md +39 -0
  11. data/docs/env.md +62 -0
  12. data/docs/es6.md +53 -0
  13. data/docs/folder-structure.md +66 -0
  14. data/docs/misc.md +23 -0
  15. data/docs/props.md +105 -0
  16. data/docs/testing.md +45 -0
  17. data/docs/troubleshooting.md +65 -0
  18. data/docs/typescript.md +115 -0
  19. data/docs/webpack-dev-server.md +32 -0
  20. data/docs/webpack.md +108 -0
  21. data/docs/yarn.md +12 -0
  22. data/lib/install/angular.rb +4 -7
  23. data/lib/install/bin/webpack-dev-server.tt +35 -11
  24. data/lib/install/bin/webpack.tt +3 -4
  25. data/lib/install/config/.babelrc +1 -0
  26. data/lib/install/config/.postcssrc.yml +1 -2
  27. data/lib/install/config/webpack/development.js +2 -31
  28. data/lib/install/config/webpack/environment.js +3 -0
  29. data/lib/install/config/webpack/production.js +2 -34
  30. data/lib/install/config/webpack/test.js +2 -5
  31. data/lib/install/config/webpacker.yml +20 -2
  32. data/lib/install/elm.rb +6 -11
  33. data/lib/install/examples/vue/hello_vue.js +31 -2
  34. data/lib/install/react.rb +2 -5
  35. data/lib/install/template.rb +3 -8
  36. data/lib/install/vue.rb +4 -7
  37. data/lib/tasks/webpacker.rake +1 -1
  38. data/lib/tasks/webpacker/{check_webpack_binstubs.rake → check_binstubs.rake} +3 -2
  39. data/lib/tasks/webpacker/check_node.rake +8 -6
  40. data/lib/tasks/webpacker/check_yarn.rake +2 -2
  41. data/lib/tasks/webpacker/clobber.rake +2 -3
  42. data/lib/tasks/webpacker/compile.rake +16 -18
  43. data/lib/tasks/webpacker/verify_install.rake +5 -5
  44. data/lib/tasks/webpacker/yarn_install.rake +1 -1
  45. data/lib/webpacker.rb +15 -11
  46. data/lib/webpacker/commands.rb +22 -0
  47. data/lib/webpacker/compiler.rb +66 -10
  48. data/lib/webpacker/configuration.rb +54 -38
  49. data/lib/webpacker/dev_server.rb +47 -0
  50. data/lib/webpacker/dev_server_proxy.rb +24 -0
  51. data/lib/webpacker/helper.rb +23 -5
  52. data/lib/webpacker/instance.rb +44 -0
  53. data/lib/webpacker/manifest.rb +58 -34
  54. data/lib/webpacker/railtie.rb +22 -3
  55. data/lib/webpacker/version.rb +2 -1
  56. data/package.json +37 -7
  57. data/package/asset_host.js +21 -0
  58. data/package/config.js +8 -0
  59. data/package/environment.js +95 -0
  60. data/package/environments/development.js +47 -0
  61. data/package/environments/production.js +34 -0
  62. data/package/environments/test.js +3 -0
  63. data/package/index.js +16 -0
  64. data/package/loaders/babel.js +11 -0
  65. data/{lib/install/config/loaders/core → package/loaders}/coffee.js +0 -0
  66. data/{lib/install/config/loaders/installers → package/loaders}/elm.js +4 -5
  67. data/{lib/install/config/loaders/core → package/loaders}/erb.js +0 -0
  68. data/package/loaders/file.js +15 -0
  69. data/package/loaders/style.js +31 -0
  70. data/{lib/install/config/loaders/installers/angular.js → package/loaders/typescript.js} +1 -1
  71. data/package/loaders/vue.js +12 -0
  72. data/test/compiler_test.rb +20 -0
  73. data/test/configuration_test.rb +43 -19
  74. data/test/dev_server_test.rb +24 -0
  75. data/test/helper_test.rb +21 -5
  76. data/test/manifest_test.rb +25 -19
  77. data/test/test_app/public/packs/manifest.json +3 -1
  78. data/test/webpacker_test_helper.rb +40 -0
  79. data/webpacker.gemspec +1 -1
  80. data/yarn.lock +4701 -578
  81. metadata +52 -29
  82. data/lib/install/config/loaders/core/assets.js +0 -12
  83. data/lib/install/config/loaders/core/babel.js +0 -5
  84. data/lib/install/config/loaders/core/sass.js +0 -15
  85. data/lib/install/config/loaders/installers/react.js +0 -5
  86. data/lib/install/config/loaders/installers/vue.js +0 -13
  87. data/lib/install/config/webpack/configuration.js +0 -35
  88. data/lib/install/config/webpack/shared.js +0 -58
  89. data/lib/webpacker/env.rb +0 -23
  90. data/lib/webpacker/file_loader.rb +0 -24
  91. data/test/env_test.rb +0 -14
  92. data/test/webpacker_test.rb +0 -15
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webpacker
3
3
  version: !ruby/object:Gem::Version
4
- version: '2.0'
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-05-24 00:00:00.000000000 Z
12
+ date: 2017-08-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -26,33 +26,33 @@ dependencies:
26
26
  - !ruby/object:Gem::Version
27
27
  version: '4.2'
28
28
  - !ruby/object:Gem::Dependency
29
- name: multi_json
29
+ name: railties
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - "~>"
32
+ - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: '1.2'
34
+ version: '4.2'
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - "~>"
39
+ - - ">="
40
40
  - !ruby/object:Gem::Version
41
- version: '1.2'
41
+ version: '4.2'
42
42
  - !ruby/object:Gem::Dependency
43
- name: railties
43
+ name: rack-proxy
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - ">="
47
47
  - !ruby/object:Gem::Version
48
- version: '4.2'
48
+ version: 0.6.1
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - ">="
54
54
  - !ruby/object:Gem::Version
55
- version: '4.2'
55
+ version: 0.6.1
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: bundler
58
58
  requirement: !ruby/object:Gem::Requirement
@@ -85,24 +85,28 @@ files:
85
85
  - MIT-LICENSE
86
86
  - README.md
87
87
  - Rakefile
88
+ - docs/assets.md
89
+ - docs/css.md
90
+ - docs/deployment.md
91
+ - docs/env.md
92
+ - docs/es6.md
93
+ - docs/folder-structure.md
94
+ - docs/misc.md
95
+ - docs/props.md
96
+ - docs/testing.md
97
+ - docs/troubleshooting.md
98
+ - docs/typescript.md
99
+ - docs/webpack-dev-server.md
100
+ - docs/webpack.md
101
+ - docs/yarn.md
88
102
  - lib/install/angular.rb
89
103
  - lib/install/bin/webpack-dev-server.tt
90
104
  - lib/install/bin/webpack.tt
91
105
  - lib/install/config/.babelrc
92
106
  - lib/install/config/.postcssrc.yml
93
- - lib/install/config/loaders/core/assets.js
94
- - lib/install/config/loaders/core/babel.js
95
- - lib/install/config/loaders/core/coffee.js
96
- - lib/install/config/loaders/core/erb.js
97
- - lib/install/config/loaders/core/sass.js
98
- - lib/install/config/loaders/installers/angular.js
99
- - lib/install/config/loaders/installers/elm.js
100
- - lib/install/config/loaders/installers/react.js
101
- - lib/install/config/loaders/installers/vue.js
102
- - lib/install/config/webpack/configuration.js
103
107
  - lib/install/config/webpack/development.js
108
+ - lib/install/config/webpack/environment.js
104
109
  - lib/install/config/webpack/production.js
105
- - lib/install/config/webpack/shared.js
106
110
  - lib/install/config/webpack/test.js
107
111
  - lib/install/config/webpacker.yml
108
112
  - lib/install/elm.rb
@@ -124,8 +128,8 @@ files:
124
128
  - lib/install/vue.rb
125
129
  - lib/tasks/installers.rake
126
130
  - lib/tasks/webpacker.rake
131
+ - lib/tasks/webpacker/check_binstubs.rake
127
132
  - lib/tasks/webpacker/check_node.rake
128
- - lib/tasks/webpacker/check_webpack_binstubs.rake
129
133
  - lib/tasks/webpacker/check_yarn.rake
130
134
  - lib/tasks/webpacker/clobber.rake
131
135
  - lib/tasks/webpacker/compile.rake
@@ -133,22 +137,40 @@ files:
133
137
  - lib/tasks/webpacker/verify_install.rake
134
138
  - lib/tasks/webpacker/yarn_install.rake
135
139
  - lib/webpacker.rb
140
+ - lib/webpacker/commands.rb
136
141
  - lib/webpacker/compiler.rb
137
142
  - lib/webpacker/configuration.rb
138
- - lib/webpacker/env.rb
139
- - lib/webpacker/file_loader.rb
143
+ - lib/webpacker/dev_server.rb
144
+ - lib/webpacker/dev_server_proxy.rb
140
145
  - lib/webpacker/helper.rb
146
+ - lib/webpacker/instance.rb
141
147
  - lib/webpacker/manifest.rb
142
148
  - lib/webpacker/railtie.rb
143
149
  - lib/webpacker/version.rb
144
150
  - package.json
151
+ - package/asset_host.js
152
+ - package/config.js
153
+ - package/environment.js
154
+ - package/environments/development.js
155
+ - package/environments/production.js
156
+ - package/environments/test.js
157
+ - package/index.js
158
+ - package/loaders/babel.js
159
+ - package/loaders/coffee.js
160
+ - package/loaders/elm.js
161
+ - package/loaders/erb.js
162
+ - package/loaders/file.js
163
+ - package/loaders/style.js
164
+ - package/loaders/typescript.js
165
+ - package/loaders/vue.js
166
+ - test/compiler_test.rb
145
167
  - test/configuration_test.rb
146
- - test/env_test.rb
168
+ - test/dev_server_test.rb
147
169
  - test/helper_test.rb
148
170
  - test/manifest_test.rb
149
171
  - test/test_app/config/secrets.yml
150
172
  - test/test_app/public/packs/manifest.json
151
- - test/webpacker_test.rb
173
+ - test/webpacker_test_helper.rb
152
174
  - webpacker.gemspec
153
175
  - yarn.lock
154
176
  homepage: https://github.com/rails/webpacker
@@ -171,15 +193,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
171
193
  version: '0'
172
194
  requirements: []
173
195
  rubyforge_project:
174
- rubygems_version: 2.6.11
196
+ rubygems_version: 2.6.13
175
197
  signing_key:
176
198
  specification_version: 4
177
199
  summary: Use Webpack to manage app-like JavaScript modules in Rails
178
200
  test_files:
201
+ - test/compiler_test.rb
179
202
  - test/configuration_test.rb
180
- - test/env_test.rb
203
+ - test/dev_server_test.rb
181
204
  - test/helper_test.rb
182
205
  - test/manifest_test.rb
183
206
  - test/test_app/config/secrets.yml
184
207
  - test/test_app/public/packs/manifest.json
185
- - test/webpacker_test.rb
208
+ - test/webpacker_test_helper.rb
@@ -1,12 +0,0 @@
1
- const { env, publicPath } = require('../configuration.js')
2
-
3
- module.exports = {
4
- test: /\.(jpg|jpeg|png|gif|svg|eot|ttf|woff|woff2)$/i,
5
- use: [{
6
- loader: 'file-loader',
7
- options: {
8
- publicPath,
9
- name: env.NODE_ENV === 'production' ? '[name]-[hash].[ext]' : '[name].[ext]'
10
- }
11
- }]
12
- }
@@ -1,5 +0,0 @@
1
- module.exports = {
2
- test: /\.js(\.erb)?$/,
3
- exclude: /node_modules/,
4
- loader: 'babel-loader'
5
- }
@@ -1,15 +0,0 @@
1
- const ExtractTextPlugin = require('extract-text-webpack-plugin')
2
- const { env } = require('../configuration.js')
3
-
4
- module.exports = {
5
- test: /\.(scss|sass|css)$/i,
6
- use: ExtractTextPlugin.extract({
7
- fallback: 'style-loader',
8
- use: [
9
- { loader: 'css-loader', options: { minimize: env.NODE_ENV === 'production' } },
10
- { loader: 'postcss-loader', options: { sourceMap: true } },
11
- 'resolve-url-loader',
12
- { loader: 'sass-loader', options: { sourceMap: true } }
13
- ]
14
- })
15
- }
@@ -1,5 +0,0 @@
1
- module.exports = {
2
- test: /\.(js|jsx)?(\.erb)?$/,
3
- exclude: /node_modules/,
4
- loader: 'babel-loader'
5
- }
@@ -1,13 +0,0 @@
1
- module.exports = {
2
- test: /.vue$/,
3
- loader: 'vue-loader',
4
- options: {
5
- extractCSS: true,
6
- loaders: {
7
- js: 'babel-loader',
8
- file: 'file-loader',
9
- scss: 'vue-style-loader!css-loader!postcss-loader!sass-loader',
10
- sass: 'vue-style-loader!css-loader!postcss-loader!sass-loader?indentedSyntax'
11
- }
12
- }
13
- }
@@ -1,35 +0,0 @@
1
- // Common configuration for webpacker loaded from config/webpacker.yml
2
-
3
- const { join, resolve } = require('path')
4
- const { env } = require('process')
5
- const { safeLoad } = require('js-yaml')
6
- const { readFileSync } = require('fs')
7
-
8
- const configPath = resolve('config', 'webpacker.yml')
9
- const loadersDir = join(__dirname, 'loaders')
10
- const settings = safeLoad(readFileSync(configPath), 'utf8')[env.NODE_ENV]
11
-
12
- function removeOuterSlashes(string) {
13
- return string.replace(/^\/*/, '').replace(/\/*$/, '')
14
- }
15
-
16
- function formatPublicPath(host = '', path = '') {
17
- let formattedHost = removeOuterSlashes(host)
18
- if (formattedHost && !/^http/i.test(formattedHost)) {
19
- formattedHost = `//${formattedHost}`
20
- }
21
- const formattedPath = removeOuterSlashes(path)
22
- return `${formattedHost}/${formattedPath}/`
23
- }
24
-
25
- const output = {
26
- path: resolve('public', settings.public_output_path),
27
- publicPath: formatPublicPath(env.ASSET_HOST, settings.public_output_path)
28
- }
29
-
30
- module.exports = {
31
- settings,
32
- env,
33
- loadersDir,
34
- output
35
- }
@@ -1,58 +0,0 @@
1
- // Note: You must restart bin/webpack-dev-server for changes to take effect
2
-
3
- /* eslint global-require: 0 */
4
- /* eslint import/no-dynamic-require: 0 */
5
-
6
- const webpack = require('webpack')
7
- const { basename, dirname, join, relative, resolve } = require('path')
8
- const { sync } = require('glob')
9
- const ExtractTextPlugin = require('extract-text-webpack-plugin')
10
- const ManifestPlugin = require('webpack-manifest-plugin')
11
- const extname = require('path-complete-extname')
12
- const { env, settings, output, loadersDir } = require('./configuration.js')
13
-
14
- const extensionGlob = `**/*{${settings.extensions.join(',')}}*`
15
- const entryPath = join(settings.source_path, settings.source_entry_path)
16
- const packPaths = sync(join(entryPath, extensionGlob))
17
-
18
- module.exports = {
19
- entry: packPaths.reduce(
20
- (map, entry) => {
21
- const localMap = map
22
- const namespace = relative(join(entryPath), dirname(entry))
23
- localMap[join(namespace, basename(entry, extname(entry)))] = resolve(entry)
24
- return localMap
25
- }, {}
26
- ),
27
-
28
- output: {
29
- filename: '[name].js',
30
- path: output.path,
31
- publicPath: output.publicPath
32
- },
33
-
34
- module: {
35
- rules: sync(join(loadersDir, '*.js')).map(loader => require(loader))
36
- },
37
-
38
- plugins: [
39
- new webpack.EnvironmentPlugin(JSON.parse(JSON.stringify(env))),
40
- new ExtractTextPlugin(env.NODE_ENV === 'production' ? '[name]-[hash].css' : '[name].css'),
41
- new ManifestPlugin({
42
- publicPath: output.publicPath,
43
- writeToFileEmit: true
44
- })
45
- ],
46
-
47
- resolve: {
48
- extensions: settings.extensions,
49
- modules: [
50
- resolve(settings.source_path),
51
- 'node_modules'
52
- ]
53
- },
54
-
55
- resolveLoader: {
56
- modules: ['node_modules']
57
- }
58
- }
data/lib/webpacker/env.rb DELETED
@@ -1,23 +0,0 @@
1
- # Singleton registry for determining NODE_ENV from config/webpacker.yml
2
- require "webpacker/file_loader"
3
-
4
- class Webpacker::Env < Webpacker::FileLoader
5
- class << self
6
- def current
7
- raise Webpacker::FileLoader::FileLoaderError.new("Webpacker::Env.load must be called first") unless instance
8
- instance.data
9
- end
10
-
11
- def file_path
12
- Rails.root.join("config", "webpacker.yml")
13
- end
14
- end
15
-
16
- private
17
- def load
18
- environments = File.exist?(@path) ? YAML.load(File.read(@path)).keys : [].freeze
19
- return ENV["NODE_ENV"] if environments.include?(ENV["NODE_ENV"])
20
- return Rails.env if environments.include?(Rails.env)
21
- "production"
22
- end
23
- end
@@ -1,24 +0,0 @@
1
- # Provides a base singleton-configuration pattern for loading a file, given a path
2
- class Webpacker::FileLoader
3
- class NotFoundError < StandardError; end
4
- class FileLoaderError < StandardError; end
5
-
6
- class_attribute :instance
7
- attr_accessor :data
8
-
9
- class << self
10
- def load(path = file_path)
11
- self.instance = new(path)
12
- end
13
- end
14
-
15
- private
16
- def initialize(path)
17
- @path = path
18
- @data = load
19
- end
20
-
21
- def load
22
- {}.freeze
23
- end
24
- end
data/test/env_test.rb DELETED
@@ -1,14 +0,0 @@
1
- require "webpacker_test"
2
-
3
- class EnvTest < Minitest::Test
4
- def test_current_env
5
- assert_equal Webpacker::Env.current, "production"
6
- assert_equal Webpacker.env, "production"
7
- assert Webpacker.env.production?
8
- end
9
-
10
- def test_file_path
11
- correct_path = File.join(File.dirname(__FILE__), "test_app/config", "webpacker.yml").to_s
12
- assert_equal Webpacker::Env.file_path.to_s, correct_path
13
- end
14
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "minitest/autorun"
4
- require "rails"
5
- require "rails/test_help"
6
- require "webpacker"
7
-
8
- module TestApp
9
- class Application < ::Rails::Application
10
- config.root = File.join(File.dirname(__FILE__), "test_app")
11
- config.eager_load = true
12
- end
13
- end
14
-
15
- TestApp::Application.initialize!