webpacker 1.1 → 1.2
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.
- checksums.yaml +4 -4
- data/.travis.yml +6 -8
- data/CHANGELOG.md +64 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +68 -1
- data/README.md +42 -25
- data/Rakefile +11 -0
- data/lib/install/angular.rb +1 -1
- data/lib/install/bin/webpack-dev-server.tt +2 -2
- data/lib/install/bin/webpack.tt +2 -9
- data/lib/install/bin/yarn.tt +3 -2
- data/lib/install/config/.babelrc +5 -0
- data/lib/install/config/loaders/core/assets.js +1 -1
- data/lib/install/config/loaders/core/babel.js +1 -6
- data/lib/install/config/loaders/core/erb.js +1 -1
- data/lib/install/config/loaders/core/sass.js +6 -1
- data/lib/install/config/loaders/installers/react.js +1 -7
- data/lib/install/config/loaders/installers/vue.js +4 -2
- data/lib/install/config/webpack/configuration.js +9 -4
- data/lib/install/config/webpack/development.js +1 -1
- data/lib/install/config/webpack/development.server.yml +17 -4
- data/lib/install/config/webpack/paths.yml +33 -19
- data/lib/install/config/webpack/production.js +2 -1
- data/lib/install/config/webpack/shared.js +13 -10
- data/lib/install/config/webpack/test.js +6 -0
- data/lib/install/examples/react/.babelrc +4 -1
- data/lib/install/examples/react/hello_react.jsx +2 -1
- data/lib/install/examples/vue/app.vue +1 -1
- data/lib/install/react.rb +20 -4
- data/lib/install/template.rb +21 -9
- data/lib/install/vue.rb +1 -1
- data/lib/tasks/installers.rake +2 -2
- data/lib/tasks/webpacker.rake +2 -0
- data/lib/tasks/webpacker/check_node.rake +19 -0
- data/lib/tasks/webpacker/check_yarn.rake +12 -0
- data/lib/tasks/webpacker/clobber.rake +17 -0
- data/lib/tasks/webpacker/compile.rake +15 -2
- data/lib/tasks/webpacker/install.rake +3 -3
- data/lib/tasks/webpacker/verify_install.rake +1 -1
- data/lib/webpacker.rb +5 -0
- data/lib/webpacker/configuration.rb +15 -6
- data/lib/webpacker/env.rb +27 -0
- data/lib/webpacker/manifest.rb +6 -1
- data/lib/webpacker/railtie.rb +6 -4
- data/lib/webpacker/version.rb +1 -1
- data/package.json +4 -1
- data/test/env_test.rb +16 -0
- data/test/webpacker_test.rb +14 -0
- data/webpacker.gemspec +2 -2
- metadata +18 -5
- data/lib/install/bin/webpack-watcher.tt +0 -10
@@ -1,3 +1,4 @@
|
|
1
|
+
require "webpacker/env"
|
1
2
|
require "webpacker/configuration"
|
2
3
|
REGEX_MAP = /\A.*\.map\z/
|
3
4
|
|
@@ -5,16 +6,28 @@ namespace :webpacker do
|
|
5
6
|
desc "Compile javascript packs using webpack for production with digests"
|
6
7
|
task compile: ["webpacker:verify_install", :environment] do
|
7
8
|
puts "Compiling webpacker assets 🎉"
|
8
|
-
|
9
|
+
asset_host = Rails.application.config.action_controller.asset_host
|
10
|
+
result = `ASSET_HOST=#{asset_host} NODE_ENV=#{Webpacker::Env.current} ./bin/webpack --json`
|
9
11
|
|
10
12
|
unless $?.success?
|
11
13
|
puts JSON.parse(result)["errors"]
|
12
14
|
exit! $?.exitstatus
|
13
15
|
end
|
14
16
|
|
15
|
-
puts "Compiled digests for all packs in #{Webpacker::Configuration.
|
17
|
+
puts "Compiled digests for all packs in #{Webpacker::Configuration.packs_path}: "
|
16
18
|
puts JSON.parse(File.read(Webpacker::Configuration.manifest_path))
|
17
19
|
end
|
20
|
+
|
21
|
+
desc "Compile javascript packs using webpack for test with digests"
|
22
|
+
task compile_before_test: ["webpacker:compile"] do
|
23
|
+
Webpacker::Manifest.load(Webpacker::Manifest.file_path)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Compile packs prior to system and controller tests running
|
28
|
+
if Rake::Task.task_defined?("test:system")
|
29
|
+
Rake::Task["test:system"].enhance(["webpacker:compile_before_test"])
|
30
|
+
Rake::Task["test:controllers"].enhance(["webpacker:compile_before_test"])
|
18
31
|
end
|
19
32
|
|
20
33
|
# Compile packs after we've compiled all other assets during precompilation
|
@@ -2,11 +2,11 @@ WEBPACKER_APP_TEMPLATE_PATH = File.expand_path("../../install/template.rb", __di
|
|
2
2
|
|
3
3
|
namespace :webpacker do
|
4
4
|
desc "Install webpacker in this application"
|
5
|
-
task :
|
5
|
+
task install: [:check_node, :check_yarn] do
|
6
6
|
if Rails::VERSION::MAJOR >= 5
|
7
|
-
exec "./bin/rails app:template LOCATION=#{WEBPACKER_APP_TEMPLATE_PATH}"
|
7
|
+
exec "#{RbConfig.ruby} ./bin/rails app:template LOCATION=#{WEBPACKER_APP_TEMPLATE_PATH}"
|
8
8
|
else
|
9
|
-
exec "./bin/rake rails:template LOCATION=#{WEBPACKER_APP_TEMPLATE_PATH}"
|
9
|
+
exec "#{RbConfig.ruby} ./bin/rake rails:template LOCATION=#{WEBPACKER_APP_TEMPLATE_PATH}"
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
@@ -2,7 +2,7 @@ require "webpacker/configuration"
|
|
2
2
|
|
3
3
|
namespace :webpacker do
|
4
4
|
desc "Verifies if webpacker is installed"
|
5
|
-
task :
|
5
|
+
task verify_install: [:check_node, :check_yarn] do
|
6
6
|
if File.exist?(Webpacker::Configuration.file_path)
|
7
7
|
puts "Webpacker is installed 🎉 🍰"
|
8
8
|
puts "Using #{Webpacker::Configuration.file_path} file for setting up webpack paths"
|
data/lib/webpacker.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# Loads webpacker configuration from config/webpack/paths.yml
|
2
2
|
require "webpacker/file_loader"
|
3
|
+
require "webpacker/env"
|
3
4
|
|
4
5
|
class Webpacker::Configuration < Webpacker::FileLoader
|
5
6
|
class << self
|
@@ -16,27 +17,35 @@ class Webpacker::Configuration < Webpacker::FileLoader
|
|
16
17
|
end
|
17
18
|
|
18
19
|
def manifest_path
|
19
|
-
Rails.root.join(
|
20
|
+
Rails.root.join(packs_path, paths.fetch(:manifest, "manifest.json"))
|
20
21
|
end
|
21
22
|
|
22
|
-
def
|
23
|
-
Rails.root.join(
|
23
|
+
def packs_path
|
24
|
+
Rails.root.join(output_path, paths.fetch(:entry, "packs"))
|
24
25
|
end
|
25
26
|
|
26
27
|
def paths
|
27
|
-
load if
|
28
|
+
load if Webpacker::Env.development?
|
28
29
|
raise Webpacker::FileLoader::FileLoaderError.new("Webpacker::Configuration.load must be called first") unless instance
|
29
30
|
instance.data
|
30
31
|
end
|
31
32
|
|
33
|
+
def output_path
|
34
|
+
Rails.root.join(paths.fetch(:output, "public"))
|
35
|
+
end
|
36
|
+
|
37
|
+
def source
|
38
|
+
paths.fetch(:source, "app/javascript")
|
39
|
+
end
|
40
|
+
|
32
41
|
def source_path
|
33
|
-
Rails.root.join(
|
42
|
+
Rails.root.join(source)
|
34
43
|
end
|
35
44
|
end
|
36
45
|
|
37
46
|
private
|
38
47
|
def load
|
39
48
|
return super unless File.exist?(@path)
|
40
|
-
HashWithIndifferentAccess.new(YAML.load(File.read(@path)))
|
49
|
+
HashWithIndifferentAccess.new(YAML.load(File.read(@path))[Webpacker::Env.current])
|
41
50
|
end
|
42
51
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# Singleton registry for determining NODE_ENV from config/webpack/paths.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 development?
|
12
|
+
current == "development"
|
13
|
+
end
|
14
|
+
|
15
|
+
def file_path
|
16
|
+
Rails.root.join("config", "webpack", "paths.yml")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
def load
|
22
|
+
environments = File.exist?(@path) ? YAML.load(File.read(@path)).keys : [].freeze
|
23
|
+
return ENV["NODE_ENV"] if environments.include?(ENV["NODE_ENV"])
|
24
|
+
return Rails.env if environments.include?(Rails.env)
|
25
|
+
"production"
|
26
|
+
end
|
27
|
+
end
|
data/lib/webpacker/manifest.rb
CHANGED
@@ -6,6 +6,7 @@
|
|
6
6
|
# "/packs/calendar-1016838bab065ae1e314.css" for long-term caching
|
7
7
|
|
8
8
|
require "webpacker/file_loader"
|
9
|
+
require "webpacker/env"
|
9
10
|
require "webpacker/configuration"
|
10
11
|
|
11
12
|
class Webpacker::Manifest < Webpacker::FileLoader
|
@@ -15,10 +16,14 @@ class Webpacker::Manifest < Webpacker::FileLoader
|
|
15
16
|
end
|
16
17
|
|
17
18
|
def lookup(name)
|
18
|
-
load if
|
19
|
+
load if Webpacker::Env.development?
|
19
20
|
raise Webpacker::FileLoader::FileLoaderError.new("Webpacker::Manifest.load must be called first") unless instance
|
20
21
|
instance.data[name.to_s] || raise(Webpacker::FileLoader::NotFoundError.new("Can't find #{name} in #{file_path}. Is webpack still compiling?"))
|
21
22
|
end
|
23
|
+
|
24
|
+
def lookup_path(name)
|
25
|
+
Rails.root.join(File.join(Webpacker::Configuration.output_path, lookup(name)))
|
26
|
+
end
|
22
27
|
end
|
23
28
|
|
24
29
|
private
|
data/lib/webpacker/railtie.rb
CHANGED
@@ -8,9 +8,11 @@ class Webpacker::Engine < ::Rails::Engine
|
|
8
8
|
ActionController::Base.helper Webpacker::Helper
|
9
9
|
end
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
ActiveSupport.on_load :action_view do
|
12
|
+
include Webpacker::Helper
|
13
|
+
end
|
14
|
+
|
15
|
+
Webpacker.bootstrap
|
16
|
+
Spring.after_fork { Webpacker.bootstrap } if defined?(Spring)
|
15
17
|
end
|
16
18
|
end
|
data/lib/webpacker/version.rb
CHANGED
data/package.json
CHANGED
@@ -3,6 +3,9 @@
|
|
3
3
|
"version": "1.0.0",
|
4
4
|
"description": "Webpacker makes it easy to use the JavaScript preprocessor and bundler [Webpack](https://webpack.github.io) to manage application-like JavaScript in Rails. It coexists with the asset pipeline, as the purpose is only to use Webpack for app-like JavaScript, not images, css, or even JavaScript Sprinkles (that all continues to live in app/assets).",
|
5
5
|
"main": "index.js",
|
6
|
+
"engines": {
|
7
|
+
"node": ">= 6.4.0"
|
8
|
+
},
|
6
9
|
"dependencies": {},
|
7
10
|
"devDependencies": {
|
8
11
|
"eslint": "^3.16.1",
|
@@ -24,5 +27,5 @@
|
|
24
27
|
"bugs": {
|
25
28
|
"url": "https://github.com/rails/webpacker/issues"
|
26
29
|
},
|
27
|
-
"homepage": "https://github.com/rails/webpacker
|
30
|
+
"homepage": "https://github.com/rails/webpacker"
|
28
31
|
}
|
data/test/env_test.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require "webpacker_test"
|
2
|
+
|
3
|
+
class EnvTest < Minitest::Test
|
4
|
+
def test_current_env
|
5
|
+
assert_equal Webpacker::Env.current, "production"
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_env_is_development?
|
9
|
+
refute_predicate Webpacker::Env, :development?
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_file_path
|
13
|
+
correct_path = File.join(File.dirname(__FILE__), "config", "webpack", "paths.yml").to_s
|
14
|
+
assert_equal Webpacker::Env.file_path.to_s, correct_path
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,14 @@
|
|
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.dirname(__FILE__)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
TestApp::Application.initialize!
|
data/webpacker.gemspec
CHANGED
@@ -4,8 +4,8 @@ require "webpacker/version"
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "webpacker"
|
6
6
|
s.version = Webpacker::VERSION
|
7
|
-
s.authors = "David Heinemeier Hansson"
|
8
|
-
s.email = "david@basecamp.com"
|
7
|
+
s.authors = [ "David Heinemeier Hansson", "Gaurav Tiwari" ]
|
8
|
+
s.email = [ "david@basecamp.com", "gaurav@gauravtiwari.co.uk" ]
|
9
9
|
s.summary = "Use Webpack to manage app-like JavaScript modules in Rails"
|
10
10
|
s.homepage = "https://github.com/rails/webpacker"
|
11
11
|
s.license = "MIT"
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: webpacker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '1.
|
4
|
+
version: '1.2'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Heinemeier Hansson
|
8
|
+
- Gaurav Tiwari
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2017-
|
12
|
+
date: 2017-04-27 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: activesupport
|
@@ -67,7 +68,9 @@ dependencies:
|
|
67
68
|
- !ruby/object:Gem::Version
|
68
69
|
version: '1.12'
|
69
70
|
description:
|
70
|
-
email:
|
71
|
+
email:
|
72
|
+
- david@basecamp.com
|
73
|
+
- gaurav@gauravtiwari.co.uk
|
71
74
|
executables: []
|
72
75
|
extensions: []
|
73
76
|
extra_rdoc_files: []
|
@@ -76,6 +79,7 @@ files:
|
|
76
79
|
- ".gitignore"
|
77
80
|
- ".rubocop.yml"
|
78
81
|
- ".travis.yml"
|
82
|
+
- CHANGELOG.md
|
79
83
|
- Gemfile
|
80
84
|
- Gemfile.lock
|
81
85
|
- MIT-LICENSE
|
@@ -83,9 +87,9 @@ files:
|
|
83
87
|
- Rakefile
|
84
88
|
- lib/install/angular.rb
|
85
89
|
- lib/install/bin/webpack-dev-server.tt
|
86
|
-
- lib/install/bin/webpack-watcher.tt
|
87
90
|
- lib/install/bin/webpack.tt
|
88
91
|
- lib/install/bin/yarn.tt
|
92
|
+
- lib/install/config/.babelrc
|
89
93
|
- lib/install/config/.postcssrc.yml
|
90
94
|
- lib/install/config/loaders/core/assets.js
|
91
95
|
- lib/install/config/loaders/core/babel.js
|
@@ -102,6 +106,7 @@ files:
|
|
102
106
|
- lib/install/config/webpack/paths.yml
|
103
107
|
- lib/install/config/webpack/production.js
|
104
108
|
- lib/install/config/webpack/shared.js
|
109
|
+
- lib/install/config/webpack/test.js
|
105
110
|
- lib/install/examples/angular/hello_angular.js
|
106
111
|
- lib/install/examples/angular/hello_angular/app/app.component.ts
|
107
112
|
- lib/install/examples/angular/hello_angular/app/app.module.ts
|
@@ -118,18 +123,24 @@ files:
|
|
118
123
|
- lib/install/vue.rb
|
119
124
|
- lib/tasks/installers.rake
|
120
125
|
- lib/tasks/webpacker.rake
|
126
|
+
- lib/tasks/webpacker/check_node.rake
|
127
|
+
- lib/tasks/webpacker/check_yarn.rake
|
128
|
+
- lib/tasks/webpacker/clobber.rake
|
121
129
|
- lib/tasks/webpacker/compile.rake
|
122
130
|
- lib/tasks/webpacker/install.rake
|
123
131
|
- lib/tasks/webpacker/verify_install.rake
|
124
132
|
- lib/tasks/webpacker/yarn_install.rake
|
125
133
|
- lib/webpacker.rb
|
126
134
|
- lib/webpacker/configuration.rb
|
135
|
+
- lib/webpacker/env.rb
|
127
136
|
- lib/webpacker/file_loader.rb
|
128
137
|
- lib/webpacker/helper.rb
|
129
138
|
- lib/webpacker/manifest.rb
|
130
139
|
- lib/webpacker/railtie.rb
|
131
140
|
- lib/webpacker/version.rb
|
132
141
|
- package.json
|
142
|
+
- test/env_test.rb
|
143
|
+
- test/webpacker_test.rb
|
133
144
|
- webpacker.gemspec
|
134
145
|
- yarn.lock
|
135
146
|
homepage: https://github.com/rails/webpacker
|
@@ -156,4 +167,6 @@ rubygems_version: 2.6.8
|
|
156
167
|
signing_key:
|
157
168
|
specification_version: 4
|
158
169
|
summary: Use Webpack to manage app-like JavaScript modules in Rails
|
159
|
-
test_files:
|
170
|
+
test_files:
|
171
|
+
- test/env_test.rb
|
172
|
+
- test/webpacker_test.rb
|