repack 2.0.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: adec7fb8dd623e161217547c202c16ce14c70c26
4
- data.tar.gz: f7ade025adcf0f7a2a5a5ba811bdb6d13b6ed0ef
3
+ metadata.gz: 3d7448ed529be30cd53fdd1ba62d2a18bf59e607
4
+ data.tar.gz: 70cee6ab8e90ed36202d3d050ab4137aa55302e7
5
5
  SHA512:
6
- metadata.gz: 7dca33c49c3202d25fa7cd731b639bd8dbf0d7b410938a238b041f398964d508da2acb8e5b49fa558067a78f9115f8260839456e311a7e5b4585542cb8327f65
7
- data.tar.gz: c80d97d626c0652a1f1162422e2e57b30d909982bbfad19d6cd3d249044ea78afb09a6309edb1497c3355c10e34ccaad3d84951a0ddc59d9426bcd99a719ef4c
6
+ metadata.gz: 3327ba53a50986b3fead93997c37e31704d7efaff4c3024f5494a4b3998a4b5300ea6ea07ba756e1c5e3789c8d24fe61138cc1c9d3b7b8ce7b1e47ef31335ed9
7
+ data.tar.gz: 204a26b9b2559112d226b7268d7a95373de60f3b77637eb4d427634113d258c25bd7ca7f3ef6edc0ac8c9305d96fd421cc2b8b3f7de5923307dcecf65be96aa9
data/README.md CHANGED
@@ -120,7 +120,7 @@ A view generator has been added.
120
120
 
121
121
  Pull requests & issues welcome. Advice & criticism regarding webpack config approach also welcome.
122
122
 
123
- Please ensure that pull requests pass both rubocop & rspec. New functionality should be discussed in an issue first.
123
+ Please ensure that pull requests pass rspec. New functionality should be discussed in an issue first.
124
124
 
125
125
  ## Acknowledgements
126
126
 
data/Rakefile CHANGED
@@ -6,14 +6,12 @@ end
6
6
 
7
7
  require 'rdoc/task'
8
8
  require 'rspec/core/rake_task'
9
- require 'rubocop/rake_task'
10
9
 
11
- RuboCop::RakeTask.new
12
10
  RSpec::Core::RakeTask.new(:spec)
13
11
 
14
12
  RDoc::Task.new(:rdoc) do |rdoc|
15
13
  rdoc.rdoc_dir = 'rdoc'
16
- rdoc.title = 'WebpackRails'
14
+ rdoc.title = 'Repack'
17
15
  rdoc.options << '--line-numbers'
18
16
  rdoc.rdoc_files.include('README.md')
19
17
  rdoc.rdoc_files.include('lib/**/*.rb')
@@ -21,4 +19,4 @@ end
21
19
 
22
20
  Bundler::GemHelper.install_tasks
23
21
 
24
- task default: [:rubocop, :spec]
22
+ task default: [:spec]
@@ -0,0 +1,4 @@
1
+ - content_for(:body_attributes) do
2
+ data-no-turbolink="true"
3
+ #react
4
+ = javascript_include_tag *webpack_asset_paths('placeholder')
@@ -2,14 +2,11 @@ module Repack
2
2
  # :nodoc:
3
3
  class InstallGenerator < ::Rails::Generators::Base
4
4
  source_root File.expand_path("../../../../example", __FILE__)
5
-
6
5
  desc "Install everything you need for a basic webpack-rails integration"
7
6
  class_option :router, type: :boolean, default: false, description: 'Add React Router'
8
7
  class_option :redux, type: :boolean, default: false, description: 'Add Redux'
9
-
10
8
  def copy_package_json
11
9
  copy_file "package.json", "package.json"
12
-
13
10
  if options[:router]
14
11
  insert_into_file './package.json', after: /dependencies\": {\n/ do
15
12
  <<-'RUBY'
@@ -17,7 +14,6 @@ module Repack
17
14
  RUBY
18
15
  end
19
16
  end
20
-
21
17
  if options[:redux]
22
18
  insert_into_file './package.json', after: /dependencies\": {\n/ do
23
19
  <<-'RUBY'
@@ -27,7 +23,6 @@ module Repack
27
23
  RUBY
28
24
  end
29
25
  end
30
-
31
26
  if options[:router] && options[:redux]
32
27
  insert_into_file './package.json', after: /dependencies\": {\n/ do
33
28
  <<-'RUBY'
@@ -36,17 +31,14 @@ module Repack
36
31
  end
37
32
  end
38
33
  end
39
-
40
34
  def copy_webpack_conf
41
35
  copy_file "webpack.config.js", "config/webpack.config.js"
42
36
  copy_file "webpack.config.heroku.js", "config/webpack.config.heroku.js"
43
37
  end
44
-
45
38
  def create_webpack_application_js
46
39
  empty_directory "client"
47
40
  empty_directory "client/containers"
48
41
  empty_directory "client/components"
49
-
50
42
  if options[:router] && options[:redux]
51
43
  copy_file "boilerplate/router_redux/application.js", "client/application.js"
52
44
  copy_file "boilerplate/routes.js", "client/routes.js"
@@ -70,9 +62,7 @@ module Repack
70
62
  copy_file "boilerplate/application.js", "client/application.js"
71
63
  copy_file "boilerplate/App.js", "client/containers/App.js"
72
64
  end
73
-
74
65
  application_view = 'app/views/layouts/application.html.erb'
75
-
76
66
  if File.exists? application_view
77
67
  insert_into_file 'app/views/layouts/application.html.erb', before: /<\/body>/ do
78
68
  <<-'RUBY'
@@ -90,7 +80,6 @@ module Repack
90
80
  puts "\n\n***WARNING*** HAML NOT SUPPORTED IN applictaion.html additional steps required\n\n"
91
81
  end
92
82
  end
93
-
94
83
  def add_to_gitignore
95
84
  append_to_file ".gitignore" do
96
85
  <<-EOF.strip_heredoc
@@ -100,17 +89,13 @@ module Repack
100
89
  EOF
101
90
  end
102
91
  end
103
-
104
92
  def run_npm_install
105
93
  run "npm install" if yes?("Would you like us to run 'npm install' for you?")
106
94
  end
107
-
108
95
  def whats_next
109
96
  puts <<-EOF.strip_heredoc
110
-
111
97
  We've set up the basics of repack for you, but you'll still
112
98
  need to:
113
-
114
99
  1. Add an element with an id of 'app' to your layout
115
100
  2. To disable hot module replacement remove <script src="http://localhost:3808/webpack-dev-server.js"></script> from layout
116
101
  3. Run 'npm run dev_server' to run the webpack-dev-server
@@ -119,18 +104,14 @@ module Repack
119
104
  get '*unmatched_route', to: <your client controller>#<default action>
120
105
  This must be the very last route in your routes.rb file
121
106
  e.g. get '*unmatched_route', to: 'home#index'
122
-
123
107
  FOR HEROKU DEPLOYS:
124
108
  1. npm run heroku-setup
125
109
  2. Push to heroku the post-build hook will take care of the rest
126
-
127
110
  See the README.md for this gem at
128
111
  https://github.com/cottonwoodcoding/repack/blob/master/README.md
129
112
  for more info.
130
-
131
113
  Thanks for using repack!
132
-
133
114
  EOF
134
115
  end
135
116
  end
136
- end
117
+ end
@@ -37,9 +37,15 @@ module Repack
37
37
  def create_rails_view
38
38
  name = @view.downcase.gsub(/ /, '_')
39
39
  empty_directory "app/views/#{name.pluralize}"
40
- file = "app/views/#{name.pluralize}/index.html.erb"
41
- copy_file "boilerplate/views/rails_view.html.erb", file
42
- gsub_file file, /placeholder/, name
40
+ if Gem.loaded_specs.has_key? 'haml-rails'
41
+ file = "app/views/#{name.pluralize}/index.html.haml"
42
+ copy_file "boilerplate/views/rails_view.html.haml", file
43
+ gsub_file file, /placeholder/, name
44
+ else
45
+ file = "app/views/#{name.pluralize}/index.html.erb"
46
+ copy_file "boilerplate/views/rails_view.html.erb", file
47
+ gsub_file file, /placeholder/, name
48
+ end
43
49
  end
44
50
  end
45
51
  end
data/lib/repack.rb CHANGED
@@ -1 +1 @@
1
- require 'webpack/rails'
1
+ require 'repack/rails'
@@ -0,0 +1,32 @@
1
+ require 'action_view'
2
+ require 'repack/manifest'
3
+
4
+ module Repack
5
+ # Asset path helpers for use with webpack
6
+ module Helper
7
+ # Return asset paths for a particular webpack entry point.
8
+ #
9
+ # Response may either be full URLs (eg http://localhost/...) if the dev server
10
+ # is in use or a host-relative URl (eg /webpack/...) if assets are precompiled.
11
+ #
12
+ # Will raise an error if our manifest can't be found or the entry point does
13
+ # not exist.
14
+ def webpack_asset_paths(source, extension: nil)
15
+ return "" unless source.present?
16
+
17
+ paths = Repack::Manifest.asset_paths(source)
18
+ paths = paths.select {|p| p.ends_with? ".#{extension}" } if extension
19
+
20
+ host = ::Rails.configuration.repack.dev_server.host
21
+ port = ::Rails.configuration.repack.dev_server.port
22
+
23
+ if ::Rails.configuration.repack.dev_server.enabled
24
+ paths.map! do |p|
25
+ "//#{host}:#{port}#{p}"
26
+ end
27
+ end
28
+
29
+ paths
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,87 @@
1
+ require 'net/http'
2
+ require 'uri'
3
+
4
+ module Repack
5
+ # Webpack manifest loading, caching & entry point retrieval
6
+ class Manifest
7
+ # Raised if we can't read our webpack manifest for whatever reason
8
+ class ManifestLoadError < StandardError
9
+ def initialize(message, orig)
10
+ super "#{message} (original error #{orig})"
11
+ end
12
+ end
13
+
14
+ # Raised if a supplied entry point does not exist in the webpack manifest
15
+ class EntryPointMissingError < StandardError
16
+ end
17
+
18
+ class << self
19
+ # :nodoc:
20
+ def asset_paths(source)
21
+ paths = manifest["assetsByChunkName"][source]
22
+ if paths
23
+ # Can be either a string or an array of strings.
24
+ # Do not include source maps as they are not javascript
25
+ [paths].flatten.reject { |p| p =~ /.*\.map$/ }.map do |p|
26
+ "/#{::Rails.configuration.repack.public_path}/#{p}"
27
+ end
28
+ else
29
+ raise EntryPointMissingError, "Can't find entry point '#{source}' in webpack manifest"
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ def manifest
36
+ if ::Rails.configuration.repack.dev_server.enabled
37
+ # Don't cache if we're in dev server mode, manifest may change ...
38
+ load_manifest
39
+ else
40
+ # ... otherwise cache at class level, as JSON loading/parsing can be expensive
41
+ @manifest ||= load_manifest
42
+ end
43
+ end
44
+
45
+ def load_manifest
46
+ data = if ::Rails.configuration.repack.dev_server.enabled
47
+ load_dev_server_manifest
48
+ else
49
+ load_static_manifest
50
+ end
51
+ JSON.parse(data)
52
+ end
53
+
54
+ def load_dev_server_manifest
55
+ http = Net::HTTP.new(
56
+ "localhost",
57
+ ::Rails.configuration.repack.dev_server.port)
58
+ http.use_ssl = ::Rails.configuration.repack.dev_server.https
59
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
60
+ http.get(dev_server_path).body
61
+ rescue => e
62
+ raise ManifestLoadError.new("Could not load manifest from webpack-dev-server at #{dev_server_url} - is it running, and is stats-webpack-plugin loaded?", e)
63
+ end
64
+
65
+ def load_static_manifest
66
+ File.read(static_manifest_path)
67
+ rescue => e
68
+ raise ManifestLoadError.new("Could not load compiled manifest from #{static_manifest_path} - have you run `rake webpack:compile`?", e)
69
+ end
70
+
71
+ def static_manifest_path
72
+ ::Rails.root.join(
73
+ ::Rails.configuration.repack.output_dir,
74
+ ::Rails.configuration.repack.manifest_filename
75
+ )
76
+ end
77
+
78
+ def dev_server_path
79
+ "/#{::Rails.configuration.repack.public_path}/#{::Rails.configuration.repack.manifest_filename}"
80
+ end
81
+
82
+ def dev_server_url
83
+ "http://localhost:#{::Rails.configuration.repack.dev_server.port}#{dev_server_path}"
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,2 @@
1
+ require 'repack/version'
2
+ require 'repack/railtie' if defined? ::Rails::Railtie
@@ -0,0 +1,33 @@
1
+ require 'rails'
2
+ require 'rails/railtie'
3
+ require 'repack/helper'
4
+
5
+ module Repack
6
+ # :nodoc:
7
+ class Railtie < ::Rails::Railtie
8
+ config.after_initialize do
9
+ ActiveSupport.on_load(:action_view) do
10
+ include Repack::Helper
11
+ end
12
+ end
13
+
14
+ config.repack = ActiveSupport::OrderedOptions.new
15
+ config.repack.config_file = 'config/repack.config.js'
16
+ config.repack.binary = 'node_modules/.bin/repack'
17
+
18
+ config.repack.dev_server = ActiveSupport::OrderedOptions.new
19
+ config.repack.dev_server.host = 'localhost'
20
+ config.repack.dev_server.port = 3808
21
+ config.repack.dev_server.https = false # note - this will use OpenSSL::SSL::VERIFY_NONE
22
+ config.repack.dev_server.binary = 'node_modules/.bin/repack-dev-server'
23
+ config.repack.dev_server.enabled = !::Rails.env.production?
24
+
25
+ config.repack.output_dir = "public/client"
26
+ config.repack.public_path = "client"
27
+ config.repack.manifest_filename = "manifest.json"
28
+
29
+ rake_tasks do
30
+ load "tasks/webpack.rake"
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,3 @@
1
+ module Repack
2
+ VERSION = "2.0.1"
3
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: repack
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dave Jungst
@@ -53,6 +53,7 @@ files:
53
53
  - example/boilerplate/views/ContainerTemplate.js
54
54
  - example/boilerplate/views/ViewTemplate.js
55
55
  - example/boilerplate/views/rails_view.html.erb
56
+ - example/boilerplate/views/rails_view.html.haml
56
57
  - example/dot_gitignore
57
58
  - example/package.json
58
59
  - example/webpack.config.heroku.js
@@ -60,12 +61,12 @@ files:
60
61
  - lib/generators/repack/install_generator.rb
61
62
  - lib/generators/repack/view_generator.rb
62
63
  - lib/repack.rb
64
+ - lib/repack/helper.rb
65
+ - lib/repack/manifest.rb
66
+ - lib/repack/rails.rb
67
+ - lib/repack/railtie.rb
68
+ - lib/repack/version.rb
63
69
  - lib/tasks/webpack.rake
64
- - lib/webpack/rails.rb
65
- - lib/webpack/rails/react/helper.rb
66
- - lib/webpack/rails/react/manifest.rb
67
- - lib/webpack/rails/react/version.rb
68
- - lib/webpack/railtie.rb
69
70
  homepage: https://github.com/cottonwoodcoding/reapack
70
71
  licenses:
71
72
  - MIT
data/lib/webpack/rails.rb DELETED
@@ -1,2 +0,0 @@
1
- require 'webpack/rails/react/version'
2
- require 'webpack/railtie' if defined? ::Rails::Railtie
@@ -1,36 +0,0 @@
1
- require 'action_view'
2
- require 'webpack/rails/react/manifest'
3
-
4
- module Webpack
5
- module Rails
6
- module React
7
- # Asset path helpers for use with webpack
8
- module Helper
9
- # Return asset paths for a particular webpack entry point.
10
- #
11
- # Response may either be full URLs (eg http://localhost/...) if the dev server
12
- # is in use or a host-relative URl (eg /webpack/...) if assets are precompiled.
13
- #
14
- # Will raise an error if our manifest can't be found or the entry point does
15
- # not exist.
16
- def webpack_asset_paths(source, extension: nil)
17
- return "" unless source.present?
18
-
19
- paths = Webpack::Rails::React::Manifest.asset_paths(source)
20
- paths = paths.select {|p| p.ends_with? ".#{extension}" } if extension
21
-
22
- host = ::Rails.configuration.webpack.dev_server.host
23
- port = ::Rails.configuration.webpack.dev_server.port
24
-
25
- if ::Rails.configuration.webpack.dev_server.enabled
26
- paths.map! do |p|
27
- "//#{host}:#{port}#{p}"
28
- end
29
- end
30
-
31
- paths
32
- end
33
- end
34
- end
35
- end
36
- end
@@ -1,91 +0,0 @@
1
- require 'net/http'
2
- require 'uri'
3
-
4
- module Webpack
5
- module Rails
6
- module React
7
- # Webpack manifest loading, caching & entry point retrieval
8
- class Manifest
9
- # Raised if we can't read our webpack manifest for whatever reason
10
- class ManifestLoadError < StandardError
11
- def initialize(message, orig)
12
- super "#{message} (original error #{orig})"
13
- end
14
- end
15
-
16
- # Raised if a supplied entry point does not exist in the webpack manifest
17
- class EntryPointMissingError < StandardError
18
- end
19
-
20
- class << self
21
- # :nodoc:
22
- def asset_paths(source)
23
- paths = manifest["assetsByChunkName"][source]
24
- if paths
25
- # Can be either a string or an array of strings.
26
- # Do not include source maps as they are not javascript
27
- [paths].flatten.reject { |p| p =~ /.*\.map$/ }.map do |p|
28
- "/#{::Rails.configuration.webpack.public_path}/#{p}"
29
- end
30
- else
31
- raise EntryPointMissingError, "Can't find entry point '#{source}' in webpack manifest"
32
- end
33
- end
34
-
35
- private
36
-
37
- def manifest
38
- if ::Rails.configuration.webpack.dev_server.enabled
39
- # Don't cache if we're in dev server mode, manifest may change ...
40
- load_manifest
41
- else
42
- # ... otherwise cache at class level, as JSON loading/parsing can be expensive
43
- @manifest ||= load_manifest
44
- end
45
- end
46
-
47
- def load_manifest
48
- data = if ::Rails.configuration.webpack.dev_server.enabled
49
- load_dev_server_manifest
50
- else
51
- load_static_manifest
52
- end
53
- JSON.parse(data)
54
- end
55
-
56
- def load_dev_server_manifest
57
- http = Net::HTTP.new(
58
- "localhost",
59
- ::Rails.configuration.webpack.dev_server.port)
60
- http.use_ssl = ::Rails.configuration.webpack.dev_server.https
61
- http.verify_mode = OpenSSL::SSL::VERIFY_NONE
62
- http.get(dev_server_path).body
63
- rescue => e
64
- raise ManifestLoadError.new("Could not load manifest from webpack-dev-server at #{dev_server_url} - is it running, and is stats-webpack-plugin loaded?", e)
65
- end
66
-
67
- def load_static_manifest
68
- File.read(static_manifest_path)
69
- rescue => e
70
- raise ManifestLoadError.new("Could not load compiled manifest from #{static_manifest_path} - have you run `rake webpack:compile`?", e)
71
- end
72
-
73
- def static_manifest_path
74
- ::Rails.root.join(
75
- ::Rails.configuration.webpack.output_dir,
76
- ::Rails.configuration.webpack.manifest_filename
77
- )
78
- end
79
-
80
- def dev_server_path
81
- "/#{::Rails.configuration.webpack.public_path}/#{::Rails.configuration.webpack.manifest_filename}"
82
- end
83
-
84
- def dev_server_url
85
- "http://localhost:#{::Rails.configuration.webpack.dev_server.port}#{dev_server_path}"
86
- end
87
- end
88
- end
89
- end
90
- end
91
- end
@@ -1,8 +0,0 @@
1
- module Webpack
2
- # :nodoc:
3
- module Rails
4
- module React
5
- VERSION = "2.0.0"
6
- end
7
- end
8
- end
@@ -1,33 +0,0 @@
1
- require 'rails'
2
- require 'rails/railtie'
3
- require 'webpack/rails/react/helper'
4
-
5
- module Webpack
6
- # :nodoc:
7
- class Railtie < ::Rails::Railtie
8
- config.after_initialize do
9
- ActiveSupport.on_load(:action_view) do
10
- include Webpack::Rails::React::Helper
11
- end
12
- end
13
-
14
- config.webpack = ActiveSupport::OrderedOptions.new
15
- config.webpack.config_file = 'config/webpack.config.js'
16
- config.webpack.binary = 'node_modules/.bin/webpack'
17
-
18
- config.webpack.dev_server = ActiveSupport::OrderedOptions.new
19
- config.webpack.dev_server.host = 'localhost'
20
- config.webpack.dev_server.port = 3808
21
- config.webpack.dev_server.https = false # note - this will use OpenSSL::SSL::VERIFY_NONE
22
- config.webpack.dev_server.binary = 'node_modules/.bin/webpack-dev-server'
23
- config.webpack.dev_server.enabled = !::Rails.env.production?
24
-
25
- config.webpack.output_dir = "public/client"
26
- config.webpack.public_path = "client"
27
- config.webpack.manifest_filename = "manifest.json"
28
-
29
- rake_tasks do
30
- load "tasks/webpack.rake"
31
- end
32
- end
33
- end