webpacker 2.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/.rubocop.yml +21 -21
- data/CHANGELOG.md +107 -4
- data/Gemfile +3 -1
- data/Gemfile.lock +15 -8
- data/README.md +137 -937
- data/docs/assets.md +106 -0
- data/docs/css.md +82 -0
- data/docs/deployment.md +39 -0
- data/docs/env.md +62 -0
- data/docs/es6.md +53 -0
- data/docs/folder-structure.md +66 -0
- data/docs/misc.md +23 -0
- data/docs/props.md +105 -0
- data/docs/testing.md +45 -0
- data/docs/troubleshooting.md +65 -0
- data/docs/typescript.md +115 -0
- data/docs/webpack-dev-server.md +32 -0
- data/docs/webpack.md +108 -0
- data/docs/yarn.md +12 -0
- data/lib/install/angular.rb +4 -7
- data/lib/install/bin/webpack-dev-server.tt +35 -11
- data/lib/install/bin/webpack.tt +3 -4
- data/lib/install/config/.babelrc +1 -0
- data/lib/install/config/.postcssrc.yml +1 -2
- data/lib/install/config/webpack/development.js +2 -31
- data/lib/install/config/webpack/environment.js +3 -0
- data/lib/install/config/webpack/production.js +2 -34
- data/lib/install/config/webpack/test.js +2 -5
- data/lib/install/config/webpacker.yml +20 -2
- data/lib/install/elm.rb +6 -11
- data/lib/install/examples/vue/hello_vue.js +31 -2
- data/lib/install/react.rb +2 -5
- data/lib/install/template.rb +3 -8
- data/lib/install/vue.rb +4 -7
- data/lib/tasks/webpacker.rake +1 -1
- data/lib/tasks/webpacker/{check_webpack_binstubs.rake → check_binstubs.rake} +3 -2
- data/lib/tasks/webpacker/check_node.rake +8 -6
- data/lib/tasks/webpacker/check_yarn.rake +2 -2
- data/lib/tasks/webpacker/clobber.rake +2 -3
- data/lib/tasks/webpacker/compile.rake +16 -18
- data/lib/tasks/webpacker/verify_install.rake +5 -5
- data/lib/tasks/webpacker/yarn_install.rake +1 -1
- data/lib/webpacker.rb +15 -11
- data/lib/webpacker/commands.rb +22 -0
- data/lib/webpacker/compiler.rb +66 -10
- data/lib/webpacker/configuration.rb +54 -38
- data/lib/webpacker/dev_server.rb +47 -0
- data/lib/webpacker/dev_server_proxy.rb +24 -0
- data/lib/webpacker/helper.rb +23 -5
- data/lib/webpacker/instance.rb +44 -0
- data/lib/webpacker/manifest.rb +58 -34
- data/lib/webpacker/railtie.rb +22 -3
- data/lib/webpacker/version.rb +2 -1
- data/package.json +37 -7
- data/package/asset_host.js +21 -0
- data/package/config.js +8 -0
- data/package/environment.js +95 -0
- data/package/environments/development.js +47 -0
- data/package/environments/production.js +34 -0
- data/package/environments/test.js +3 -0
- data/package/index.js +16 -0
- data/package/loaders/babel.js +11 -0
- data/{lib/install/config/loaders/core → package/loaders}/coffee.js +0 -0
- data/{lib/install/config/loaders/installers → package/loaders}/elm.js +4 -5
- data/{lib/install/config/loaders/core → package/loaders}/erb.js +0 -0
- data/package/loaders/file.js +15 -0
- data/package/loaders/style.js +31 -0
- data/{lib/install/config/loaders/installers/angular.js → package/loaders/typescript.js} +1 -1
- data/package/loaders/vue.js +12 -0
- data/test/compiler_test.rb +20 -0
- data/test/configuration_test.rb +43 -19
- data/test/dev_server_test.rb +24 -0
- data/test/helper_test.rb +21 -5
- data/test/manifest_test.rb +25 -19
- data/test/test_app/public/packs/manifest.json +3 -1
- data/test/webpacker_test_helper.rb +40 -0
- data/webpacker.gemspec +1 -1
- data/yarn.lock +4701 -578
- metadata +52 -29
- data/lib/install/config/loaders/core/assets.js +0 -12
- data/lib/install/config/loaders/core/babel.js +0 -5
- data/lib/install/config/loaders/core/sass.js +0 -15
- data/lib/install/config/loaders/installers/react.js +0 -5
- data/lib/install/config/loaders/installers/vue.js +0 -13
- data/lib/install/config/webpack/configuration.js +0 -35
- data/lib/install/config/webpack/shared.js +0 -58
- data/lib/webpacker/env.rb +0 -23
- data/lib/webpacker/file_loader.rb +0 -24
- data/test/env_test.rb +0 -14
- 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:
|
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-
|
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:
|
29
|
+
name: railties
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- - "
|
32
|
+
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '
|
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: '
|
41
|
+
version: '4.2'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
|
-
name:
|
43
|
+
name: rack-proxy
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
46
|
- - ">="
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version:
|
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:
|
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/
|
139
|
-
- lib/webpacker/
|
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/
|
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/
|
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.
|
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/
|
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/
|
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,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,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
|
data/test/webpacker_test.rb
DELETED
@@ -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!
|