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