webpack-rails-react 0.9.9 → 1.0.0

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: a11fdc7f90667286b9ead38db9f12d238b2f9122
4
- data.tar.gz: c6940d59b10f4f1578a762b62f33440524ebce2d
3
+ metadata.gz: d23277a4284c9caef4383ca8d2bda3752ff30011
4
+ data.tar.gz: afd4a1123d9adebbbc20f78049983e7a9a73c487
5
5
  SHA512:
6
- metadata.gz: a5e9a18c7cc297c191ee8ee46fd28fbe8bd595ee609826bee233206bbcf69c60cbdb9122777e073adb386c4f314071be27eb27502c3c3fe8d6d6fc36e23e6212
7
- data.tar.gz: 84b15d55ad4aa77194f9fb819afaf5073076a056c33a167b8fcb5e00b68443be3c2a55142523a681a639be8d938b304d8a9d3ab068f7010f8ebc8a78e08e91c4
6
+ metadata.gz: b306c9405d3358b76914c6f139f0314c48b30ef031797ac186e6c354c67a1deab5caa39916bad5df86ec0e69da87206ecc6aba4d8926a743a10b8a0141ade174
7
+ data.tar.gz: b5c6a79127db665d8f381c3a22155d244507a3d6690dc031ec88e8ebadddef654cbb343687f39b3ae45789179db7b4e2de257bbd4b1ee1ea3e4b44deb560179e
data/README.md CHANGED
@@ -1,28 +1,22 @@
1
- [![Build Status](https://travis-ci.org/mipearson/webpack-rails.svg?branch=master)](https://travis-ci.org/mipearson/webpack-rails) [![Gem Version](https://badge.fury.io/rb/webpack-rails.svg)](http://badge.fury.io/rb/webpack-rails)
1
+ # webpack-rails-react
2
2
 
3
- # webpack-rails
3
+ **webpack-rails-react** gives you tools to integrate Webpack and React in to an existing Ruby on Rails application.
4
4
 
5
- **webpack-rails** gives you tools to integrate Webpack in to an existing Ruby on Rails application.
6
-
7
- It will happily co-exist with sprockets but does not use it for production fingerprinting or asset serving. **webpack-rails** is designed with the assumption that if you're using Webpack you treat Javascript as a first-class citizen. This means that you control the webpack config, package.json, and use npm to install Webpack & its plugins.
5
+ It will happily co-exist with sprockets but does not use it for production fingerprinting or asset serving. **webpack-rails-react** is designed with the assumption that if you're using Webpack you treat Javascript as a first-class citizen. This means that you control the webpack config, package.json, and use npm to install Webpack & its plugins.
8
6
 
9
7
  In development mode [webpack-dev-server](http://webpack.github.io/docs/webpack-dev-server.html) is used to serve webpacked entry points and offer hot module reloading. In production entry points are built in to `public/webpack`. **webpack-rails** uses [stats-webpack-plugin](https://www.npmjs.com/package/stats-webpack-plugin) to translate entry points in to asset paths.
10
8
 
11
- It was designed for use at [Marketplacer](http://www.marketplacer.com) to assist us in migrating our Javascript (and possibly our SCSS) off of Sprockets. It first saw production use in June 2015.
12
-
13
- Our examples show **webpack-rails** co-existing with sprockets (as that's how environment works), but sprockets is not used or required for development or production use of this gem.
9
+ It was forked from the [Marketplacer](http://www.marketplacer.com) repo: (https://github.com/mipearson/webpack-rails) and support for React / Babel / ES6 was added.
14
10
 
15
11
  This gem has been tested against Rails 4.2 and Ruby 2.2. Earlier versions of Rails (>= 3.2) and Ruby (>= 1.9) may work, but we haven't tested them.
16
12
 
17
- ## Using webpack-rails
18
-
19
- **We have a demo application: [webpack-rails-demo](https://github.com/mipearson/webpack-rails-demo)**
13
+ ## Using webpack-rails-react
20
14
 
21
15
  ### Installation
22
16
 
23
- 1. Add `webpack-rails` to your gemfile
17
+ 1. Add `webpack-rails-react` to your gemfile
24
18
  1. Run `bundle install` to install the gem
25
- 1. Run `bundle exec rails generate webpack_rails:install` to copy across example files
19
+ 1. Run `bundle exec rails generate webpack_rails_react:install` to copy across example files
26
20
  1. Run `foreman start` to start `webpack-dev-server` and `rails server` at the same time
27
21
  1. Add the webpack entry point to your layout (see next section)
28
22
  1. Edit `client/application.js` and write some code
@@ -46,14 +40,6 @@ If you're using the webpack dev server's live reload feature (not the React hot
46
40
  <script src="http://localhost:3808/webpack-dev-server.js"></script>
47
41
  ```
48
42
 
49
- ### How it works
50
-
51
- Have a look at the files in the `examples` directory. Of note:
52
-
53
- * We use [foreman](https://github.com/ddollar/foreman) and a `Procfile` to run our rails server & the webpack dev server in development at the same time
54
- * The webpack and gem configuration must be in sync - look at our railtie for configuration options
55
- * We require that **stats-webpack-plugin** is loaded to automatically generate a production manifest & resolve paths during development
56
-
57
43
  ### Configuration Defaults
58
44
 
59
45
  * Webpack configuration lives in `config/webpack.config.js`
@@ -96,6 +82,5 @@ Please ensure that pull requests pass both rubocop & rspec. New functionality sh
96
82
 
97
83
  ## Acknowledgements
98
84
 
99
- * Len Garvey for his [webpack-rails](https://github.com/lengarvey/webpack-rails) gem which inspired this implementation
100
- * Sebastian Porto for [Rails with Webpack](https://reinteractive.net/posts/213-rails-with-webpack-why-and-how)
101
- * Clark Dave for [How to use Webpack with Rails](http://clarkdave.net/2015/01/how-to-use-webpack-with-rails/)
85
+ * mipearson for his [webpack-rails](https://github.com/mipearson/webpack-rails) gem which inspired this implementation
86
+ * David Jungst for his fork of [webpack-rails](https://github.com/wdjungst/webpack-rails-react) and idea / implementation to add React / Babel / ES6 boilerplate.
data/example/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "webpack-rails-react",
2
+ "name": "webpack-rails",
3
3
  "version": "0.0.1",
4
4
  "license": "MIT",
5
5
  "dependencies": {
@@ -1,4 +1,4 @@
1
- module WebpackRails
1
+ module WebpackRailsReact
2
2
  # :nodoc:
3
3
  class InstallGenerator < ::Rails::Generators::Base
4
4
  source_root File.expand_path("../../../../example", __FILE__)
@@ -31,7 +31,7 @@ module WebpackRails
31
31
 
32
32
  ReactDOM.render(
33
33
  <App />,
34
- Document.findElementById('app')
34
+ document.getElementById('app')
35
35
  )
36
36
  EOF
37
37
  end
File without changes
data/lib/webpack/rails.rb CHANGED
@@ -1,2 +1,2 @@
1
- require 'webpack/rails/version'
2
- require 'webpack/railtie' if defined? ::Rails::Railtie
1
+ require 'webpack/rails/react/version'
2
+ require 'webpack/railtie' if defined? ::Rails::Railtie
@@ -0,0 +1,36 @@
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
@@ -0,0 +1,91 @@
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,6 +1,8 @@
1
1
  module Webpack
2
2
  # :nodoc:
3
3
  module Rails
4
- VERSION = "0.9.9"
4
+ module React
5
+ VERSION = "1.0.0"
6
+ end
5
7
  end
6
8
  end
@@ -1,13 +1,13 @@
1
1
  require 'rails'
2
2
  require 'rails/railtie'
3
- require 'webpack/rails/helper'
3
+ require 'webpack/rails/react/helper'
4
4
 
5
5
  module Webpack
6
6
  # :nodoc:
7
7
  class Railtie < ::Rails::Railtie
8
8
  config.after_initialize do
9
9
  ActiveSupport.on_load(:action_view) do
10
- include Webpack::Rails::Helper
10
+ include Webpack::Rails::React::Helper
11
11
  end
12
12
  end
13
13
 
@@ -30,4 +30,4 @@ module Webpack
30
30
  load "tasks/webpack.rake"
31
31
  end
32
32
  end
33
- end
33
+ end
metadata CHANGED
@@ -1,10 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webpack-rails-react
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.9
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dave Jugnst
8
+ - Jake Sorce
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
@@ -28,6 +29,7 @@ description: Production-tested, JavaScript-first tooling to use webpack within y
28
29
  Rails application
29
30
  email:
30
31
  - djungst@gmail.com
32
+ - jakesorce@gmail.com
31
33
  executables: []
32
34
  extensions: []
33
35
  extra_rdoc_files: []
@@ -39,15 +41,15 @@ files:
39
41
  - example/dot_gitignore
40
42
  - example/package.json
41
43
  - example/webpack.config.js
42
- - lib/generators/webpack_rails/install_generator.rb
44
+ - lib/generators/webpack_rails_react/install_generator.rb
43
45
  - lib/tasks/webpack.rake
44
- - lib/webpack-rails.rb
46
+ - lib/webpack-rails-react.rb
45
47
  - lib/webpack/rails.rb
46
- - lib/webpack/rails/helper.rb
47
- - lib/webpack/rails/manifest.rb
48
- - lib/webpack/rails/version.rb
48
+ - lib/webpack/rails/react/helper.rb
49
+ - lib/webpack/rails/react/manifest.rb
50
+ - lib/webpack/rails/react/version.rb
49
51
  - lib/webpack/railtie.rb
50
- homepage: https://github.com/wdjungst/webpack-rails-react
52
+ homepage: https://github.com/jakesorce/webpack-rails-react
51
53
  licenses:
52
54
  - MIT
53
55
  metadata: {}
@@ -59,7 +61,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
59
61
  requirements:
60
62
  - - ">="
61
63
  - !ruby/object:Gem::Version
62
- version: '0'
64
+ version: 2.0.0
63
65
  required_rubygems_version: !ruby/object:Gem::Requirement
64
66
  requirements:
65
67
  - - ">="
@@ -72,3 +74,4 @@ signing_key:
72
74
  specification_version: 4
73
75
  summary: Webpack / Rails / React
74
76
  test_files: []
77
+ has_rdoc:
@@ -1,32 +0,0 @@
1
- require 'action_view'
2
- require 'webpack/rails/manifest'
3
-
4
- module Webpack
5
- module Rails
6
- # Asset path helpers for use with webpack
7
- module Helper
8
- # Return asset paths for a particular webpack entry point.
9
- #
10
- # Response may either be full URLs (eg http://localhost/...) if the dev server
11
- # is in use or a host-relative URl (eg /webpack/...) if assets are precompiled.
12
- #
13
- # Will raise an error if our manifest can't be found or the entry point does
14
- # not exist.
15
- def webpack_asset_paths(source)
16
- return "" unless source.present?
17
-
18
- paths = Webpack::Rails::Manifest.asset_paths(source)
19
- host = ::Rails.configuration.webpack.dev_server.host
20
- port = ::Rails.configuration.webpack.dev_server.port
21
-
22
- if ::Rails.configuration.webpack.dev_server.enabled
23
- paths.map! do |p|
24
- "//#{host}:#{port}#{p}"
25
- end
26
- end
27
-
28
- paths
29
- end
30
- end
31
- end
32
- end
@@ -1,89 +0,0 @@
1
- require 'net/http'
2
- require 'uri'
3
-
4
- module Webpack
5
- module Rails
6
- # Webpack manifest loading, caching & entry point retrieval
7
- class Manifest
8
- # Raised if we can't read our webpack manifest for whatever reason
9
- class ManifestLoadError < StandardError
10
- def initialize(message, orig)
11
- super "#{message} (original error #{orig})"
12
- end
13
- end
14
-
15
- # Raised if a supplied entry point does not exist in the webpack manifest
16
- class EntryPointMissingError < StandardError
17
- end
18
-
19
- class << self
20
- # :nodoc:
21
- def asset_paths(source)
22
- paths = manifest["assetsByChunkName"][source]
23
- if paths
24
- # Can be either a string or an array of strings.
25
- # Do not include source maps as they are not javascript
26
- [paths].flatten.reject { |p| p =~ /.*\.map$/ }.map do |p|
27
- "/#{::Rails.configuration.webpack.public_path}/#{p}"
28
- end
29
- else
30
- raise EntryPointMissingError, "Can't find entry point '#{source}' in webpack manifest"
31
- end
32
- end
33
-
34
- private
35
-
36
- def manifest
37
- if ::Rails.configuration.webpack.dev_server.enabled
38
- # Don't cache if we're in dev server mode, manifest may change ...
39
- load_manifest
40
- else
41
- # ... otherwise cache at class level, as JSON loading/parsing can be expensive
42
- @manifest ||= load_manifest
43
- end
44
- end
45
-
46
- def load_manifest
47
- data = if ::Rails.configuration.webpack.dev_server.enabled
48
- load_dev_server_manifest
49
- else
50
- load_static_manifest
51
- end
52
- JSON.parse(data)
53
- end
54
-
55
- def load_dev_server_manifest
56
- http = Net::HTTP.new(
57
- "localhost",
58
- ::Rails.configuration.webpack.dev_server.port)
59
- http.use_ssl = ::Rails.configuration.webpack.dev_server.https
60
- http.verify_mode = OpenSSL::SSL::VERIFY_NONE
61
- http.get(dev_server_path).body
62
- rescue => e
63
- 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)
64
- end
65
-
66
- def load_static_manifest
67
- File.read(static_manifest_path)
68
- rescue => e
69
- raise ManifestLoadError.new("Could not load compiled manifest from #{static_manifest_path} - have you run `rake webpack:compile`?", e)
70
- end
71
-
72
- def static_manifest_path
73
- ::Rails.root.join(
74
- ::Rails.configuration.webpack.output_dir,
75
- ::Rails.configuration.webpack.manifest_filename
76
- )
77
- end
78
-
79
- def dev_server_path
80
- "/#{::Rails.configuration.webpack.public_path}/#{::Rails.configuration.webpack.manifest_filename}"
81
- end
82
-
83
- def dev_server_url
84
- "http://localhost:#{::Rails.configuration.webpack.dev_server.port}#{dev_server_path}"
85
- end
86
- end
87
- end
88
- end
89
- end