webpacker 2.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
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!