middleman-webpacker 1.0.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: adfa59b40717784472840824fa064fbc97d2a0ac
4
+ data.tar.gz: 592239fd7fe623e02f8454741d9fddf7df9fe3bd
5
+ SHA512:
6
+ metadata.gz: 7a45408ba7a24ae2037c972f6097c8298bca8a6517cce153e809e2a072da7a32e31f22704711c9dc8cbc7d7b2851aa5fc33c21a19c14b475db55f7d072963536
7
+ data.tar.gz: f83fef594378fd4dd232095f285cf570346a6f0e88ebacef14045532dfe1c101c09ebd56f07e68e1d0f50fcc7672baba6e0190b6be7da57aa8c60bc3a9b30948
data/.gitignore ADDED
@@ -0,0 +1,6 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+
5
+
6
+ /pkg
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/LICENSE.md ADDED
@@ -0,0 +1,18 @@
1
+ Copyright (c) 2010-2017 Thomas Reynolds
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
4
+ this software and associated documentation files (the "Software"), to deal in
5
+ the Software without restriction, including without limitation the rights to
6
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
7
+ the Software, and to permit persons to whom the Software is furnished to do so,
8
+ subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
15
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
16
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
17
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
18
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,68 @@
1
+ # Middleman Webpacker Extension
2
+
3
+ This extensions allows to use Webpack in [Middleman](https://middlemanapp.com/) (>= 4) applications through the external pipeline feature introduced in Middleman 4.
4
+
5
+ It's heavily inspired in the Webpacker gem for Rails.
6
+
7
+ ## Dependencies
8
+
9
+ * Middleman >= 4
10
+
11
+ ## Installation
12
+
13
+ If you're just getting started, install the middleman gem and generate a new project:
14
+
15
+ ```
16
+ gem install middleman
17
+ middleman init MY_PROJECT
18
+ ```
19
+
20
+ If you already have a Middleman project: Add this to the Gemfile and run `bundle install`
21
+
22
+ ```
23
+ gem 'middleman-webpacker'
24
+ ```
25
+
26
+ ## Configuration
27
+
28
+ ```
29
+ activate :webpack
30
+ ```
31
+
32
+ Then you need to provide your Webpack configuration inside the `config` folder. The extension requires to have 2 configuration files:
33
+ * `development.js` used during development.
34
+ * `production.js` used when building the site.
35
+
36
+ The extension provides the following configuration options:
37
+
38
+ `dist_path` (default: 'dist')
39
+
40
+ Output directory configured in Webpack.
41
+
42
+ `stylesheets_base_path` (default: '')
43
+
44
+ Base path where stylesheets will be placed inside dist_path.
45
+
46
+ `javascripts_base_path` (default: '')
47
+
48
+ Base path where javascripts will be placed inside dist_path.
49
+
50
+ `images_base_path` (default: 'img/')
51
+
52
+ Base path where images will be placed inside dist_path.
53
+
54
+ ## Usage
55
+
56
+ When activating the extension, Webpack will be used with the provided configuration. The extension is configured to have Webpack take care of all assets: Javascript, stylesheets, images and fonts.
57
+
58
+ This means that all of these assets need to be covered in your Webpack configuration.
59
+
60
+ In order to be able to use the assets compiled by Webpack from the HTML you can use the following helpers:
61
+ * `javascript_pack_tag` which replaces `javascript_include_tag`
62
+ * `stylesheet_pack_tag` which replaces `stylesheet_link_tag`
63
+ * `image_pack_tag` which replaces `image_tag`
64
+ * `asset_pack_path` which replaces `asset_path`
65
+
66
+ ## TODO
67
+
68
+ 1. Provide a base Webpack configuration (a la webpacker)
data/Rakefile ADDED
@@ -0,0 +1,14 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'cucumber/rake/task'
5
+
6
+ Cucumber::Rake::Task.new(:cucumber, 'Run features that should pass') do |t|
7
+ t.cucumber_opts = '--color --tags ~@wip --strict'
8
+ end
9
+
10
+ require 'rake/clean'
11
+
12
+ task test: ['cucumber']
13
+
14
+ task default: :test
@@ -0,0 +1,5 @@
1
+ PROJECT_ROOT_PATH = File.dirname(File.dirname(File.dirname(__FILE__)))
2
+
3
+ require 'middleman-core'
4
+ require 'middleman-core/step_definitions'
5
+ require File.join(PROJECT_ROOT_PATH, 'lib', 'middleman-webpacker')
@@ -0,0 +1,39 @@
1
+ require 'middleman-core'
2
+ require 'middleman-webpacker/helpers'
3
+
4
+ module MiddlemanWebpacker
5
+ class Extension < ::Middleman::Extension
6
+
7
+ DEVELOPMENT_WEBPACK_CMD = './node_modules/webpack/bin/webpack.js ' \
8
+ '--watch -d --progress --color --config config/webpack/development.js'
9
+ PRODUCTION_WEBPACK_CMD = 'NODE_ENV=production ./node_modules/webpack/bin/webpack.js ' \
10
+ '--bail -p --config config/webpack/production.js'
11
+
12
+ option :dist_path, 'dist', 'Output directory configured in Webpack'
13
+ option :stylesheets_base_path, '', 'Base path where stylesheets will be placed inside dist_path'
14
+ option :javascripts_base_path, '', 'Base path where javascripts will be placed inside dist_path'
15
+ option :images_base_path, 'img/', 'Base path where images will be placed inside dist_path'
16
+
17
+ self.defined_helpers = [MiddlemanWebpacker::Helpers]
18
+
19
+ def initialize(app, options_hash = {}, &block)
20
+ super
21
+
22
+ output_path = File.join(app.root, options.dist_path)
23
+ Manifest.file_path = File.join(output_path, 'manifest.json')
24
+ end
25
+
26
+ def after_configuration
27
+ @app.ignore /stylesheets/
28
+ @app.ignore /javascripts/
29
+ @app.ignore /images/
30
+ @app.ignore /fonts/
31
+
32
+ @app.activate :external_pipeline,
33
+ name: :webpack,
34
+ command: @app.build? ? PRODUCTION_WEBPACK_CMD : DEVELOPMENT_WEBPACK_CMD,
35
+ source: options.dist_path,
36
+ latency: 1
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,25 @@
1
+ module MiddlemanWebpacker
2
+ class FileLoader
3
+ class NotFoundError < StandardError; end
4
+ class FileLoaderError < StandardError; end
5
+
6
+ class_attribute :instance
7
+ attr_accessor :data
8
+
9
+ def self.load(path = file_path)
10
+ self.instance = new(path)
11
+ end
12
+
13
+ private
14
+
15
+ def initialize(path)
16
+ @path = path
17
+ @data = load
18
+ end
19
+
20
+ def load
21
+ {}.freeze
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,29 @@
1
+ require 'middleman-webpacker/manifest'
2
+
3
+ module MiddlemanWebpacker
4
+ module Helpers
5
+
6
+ def stylesheet_pack_tag(name, **options)
7
+ stylesheet_link_tag(Manifest.lookup("#{extension_options.stylesheets_base_path}#{name}.css"), **options)
8
+ end
9
+
10
+ def javascript_pack_tag(name, **options)
11
+ javascript_include_tag(Manifest.lookup("#{extension_options.javascripts_base_path}#{name}.js"), **options)
12
+ end
13
+
14
+ def image_pack_tag(name, **options)
15
+ image_tag(Manifest.lookup("#{extension_options.images_base_path}#{name}"), **options)
16
+ end
17
+
18
+ def asset_pack_path(name, **options)
19
+ asset_path(Manifest.lookup(name), **options)
20
+ end
21
+
22
+ private
23
+
24
+ def extension_options
25
+ app.extensions[:webpack].options
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,26 @@
1
+ require 'middleman-webpacker/file_loader'
2
+
3
+ module MiddlemanWebpacker
4
+ class Manifest < FileLoader
5
+
6
+ class_attribute :file_path
7
+
8
+ def self.lookup(name)
9
+ load
10
+
11
+ unless instance
12
+ raise MiddlemanWebpacker::FileLoader::FileLoaderError.new('load must be called first')
13
+ end
14
+
15
+ instance.data[name.to_s] or raise(MiddlemanWebpacker::FileLoader::NotFoundError.new(
16
+ "Can't find #{name} in #{file_path}. Is webpack still compiling?"))
17
+ end
18
+
19
+ private
20
+
21
+ def load
22
+ return super unless File.exist?(@path)
23
+ JSON.parse(File.read(@path))
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,3 @@
1
+ module MiddlemanWebpacker
2
+ VERSION = '1.0.0'
3
+ end
@@ -0,0 +1,6 @@
1
+ require 'middleman-core'
2
+
3
+ Middleman::Extensions.register(:webpack) do
4
+ require 'middleman-webpacker/extension'
5
+ MiddlemanWebpacker::Extension
6
+ end
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+ require 'middleman-webpacker/version'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'middleman-webpacker'
7
+ s.version = MiddlemanWebpacker::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = [ 'MarsBased' ]
10
+ s.email = [ 'hello@marsbased.com' ]
11
+ s.homepage = 'https://github.com/marsbased/middleman-webpacker'
12
+ s.summary = %q{ Extension to use Middleman with Webpack }
13
+ s.description = %q{ Extension to use Middleman with Webpack }
14
+ s.license = 'MIT'
15
+
16
+ s.files = `git ls-files -z`.split("\0")
17
+ s.test_files = `git ls-files -z -- {spec,features,fixtures}/*`.split("\0")
18
+ s.require_paths = [ 'lib' ]
19
+
20
+ s.required_ruby_version = '>= 2.2.0'
21
+
22
+ s.add_runtime_dependency('middleman-core', ['>= 4.2.1'])
23
+
24
+ s.add_development_dependency('rake')
25
+ s.add_development_dependency('cucumber')
26
+ s.add_development_dependency('rspec')
27
+ end
metadata ADDED
@@ -0,0 +1,114 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: middleman-webpacker
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - MarsBased
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-11-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: middleman-core
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 4.2.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 4.2.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: cucumber
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: " Extension to use Middleman with Webpack "
70
+ email:
71
+ - hello@marsbased.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - ".gitignore"
77
+ - Gemfile
78
+ - LICENSE.md
79
+ - README.md
80
+ - Rakefile
81
+ - features/support/env.rb
82
+ - lib/middleman-webpacker.rb
83
+ - lib/middleman-webpacker/extension.rb
84
+ - lib/middleman-webpacker/file_loader.rb
85
+ - lib/middleman-webpacker/helpers.rb
86
+ - lib/middleman-webpacker/manifest.rb
87
+ - lib/middleman-webpacker/version.rb
88
+ - middleman-webpacker.gemspec
89
+ homepage: https://github.com/marsbased/middleman-webpacker
90
+ licenses:
91
+ - MIT
92
+ metadata: {}
93
+ post_install_message:
94
+ rdoc_options: []
95
+ require_paths:
96
+ - lib
97
+ required_ruby_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: 2.2.0
102
+ required_rubygems_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ requirements: []
108
+ rubyforge_project:
109
+ rubygems_version: 2.6.8
110
+ signing_key:
111
+ specification_version: 4
112
+ summary: Extension to use Middleman with Webpack
113
+ test_files:
114
+ - features/support/env.rb