ak10m / webpack-helpers

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Webpack::Helpers

A library that makes Ruby and Webpack as loosely coupled as possible.

Installation

Add this line to your application's Gemfile:

gem 'webpack-helpers'

And then execute:

$ bundle install

Or install it yourself as:

$ gem install webpack-helpers

Usage

Webpack::DevServer::Proxy

Rack Middleware for proxying access to a specific path to Webpack Dev Server.

# config.ru

require 'webpack'
require 'webpack/dev_server/proxy'

Webpack.configure do |c|
  c.dev_server.url = 'http://localhost:9000'
  c.dev_server.proxy_path = '/web/pack'
end

use Webpack::DevServer::Proxy, ssl_verify_none: true

run lambda {|env| [200, {'Content-Type' => 'text/plain'}, ['Hello']] }

With a configuration like, access to /web/pack/logo.svg will be proxied to http://localhost:9000/logo.svg.

Webpack::Manifest::Entries

Handles the manifest.json file generated by Webpack.

# manifest.json
# {
#   "script.js": "script-abcd1234.js",
#   "style.css": "/bundles/style-abcd1234.css"
#   "logo.svg": "https://cdn/logo-abcd1234.svg"
# }

require 'webpack/manifest'

manifest = Webpack::Manifest.load '/path/to/manifest.json'
manifest.lookup! 'script.js'  # => 'script-abcd1234.js'
manifest.lookup! 'style.css'  # => '/bundles/stype-abcd1234.css'
manifest.lookup! 'logo.svg'   # => 'https://cdn/logo-abcd1234.svg'
manifest.lookup! 'README.md'  # => raise Webpack::Manifest::Entries::MissingEntryError
manifest.lookup 'README.md'   # => 'README.md'

Webpack::Helpers

Use proxy_path and manifest.json to return the proper URI as seen by the application.

# manifest.json
# {
#   "script.js": "script-abcd1234.js",
#   "style.css": "/bundles/style-abcd1234.css"
#   "logo.svg": "https://cdn/logo-abcd1234.svg"
# }

require 'webpack'
require 'webpack/helpers'

Webpack.configure do |c|
  c.dev_server.url = 'http://localhost:9000'
  c.dev_server.proxy_path = '/web/pack'
  c.manifest.url = 'http://localhost:9000/manifest.json'
  c.manifest.cache = false
end

class Helper
  include Webpack::Helpers
end

helper = Helper.new

helper.webpack_bundle_path('script.js') # => '/web/pack/script-abcd1234.js'
helper.webpack_bundle_path('style.css') # => '/web/pack/bundles/style-abcd1234.css'
helper.webpack_bundle_path('logo.svg')  # => 'https://cdn/logo-abcd1234.svg'
helper.webpack_bundle_path('README.md') # => '/web/pack/README.md'

# when `dev_server.proxy_path = false`

helper.webpack_bundle_path('script.js') # => 'script-abcd1234.js'
helper.webpack_bundle_path('style.css') # => '/bundles/style-abcd1234.css'
helper.webpack_bundle_path('logo.svg')  # => 'https://cdn/logo-abcd1234.svg'
helper.webpack_bundle_path('README.md') # => 'README.md'

Webpack::Testing::Helper

require "webpack/testing/helper"

Minitest::Test.include Webpack::Testing::Helper if defined? Minitest::Test

class Webpack::SomeTest < Minitest::Test
  def test_some
    mock_dev_server('/path/to/mock/files') do |srv|
      # stub Webpack::DevServer.config
      Webpack::DevServer.configure do |c|
        c.url = "http://#{srv.host_with_port}"
      end

      # stub Webpack::Manifest.config
      Webpack::Manifest.configure do |c|
        c.url = "http://#{srv.host_with_port}/manifest.json"
      end

      # run Rack::Files server (random port)
      assert_equal "localhost", srv.host
      assert_equal 65432, srv.port # unused random port
      assert_equal "localhost:65432", srv.host_with_port
      assert_equal true, srv.running?
    end
  end
end

Rails support

By running the Rails generator command, you can generate a file in config/initializers to change the default configuration.

rails g webpack:config

helper

You can use a helper that generates HTML tags according to Webpack's manifest.json. (using Webpack::Helpers generated URI)

  • javascript_bundle_tag
  • stylesheet_bundle_tag
  • image_bundle_tag

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/ak10m/webpack-helpers.

License

The gem is available as open source under the terms of the MIT License.

About

License:MIT License


Languages

Language:Ruby 99.6%Language:Shell 0.4%