middleman-webpacked 0.0.2 → 0.0.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9c6871016b63c750529f7050aef41c01652fe011
4
- data.tar.gz: 95b3c3e2b0ec9a83d78cdf435a356c26c9b792a8
3
+ metadata.gz: ba1745c3e19d9181e2bbd1f5e0323ab053e8d0d4
4
+ data.tar.gz: dd27734e99905e4c9894f639672b632a2f63c40a
5
5
  SHA512:
6
- metadata.gz: 4010c42165f9a037890d7d4b9b44bf29979d9b4a46a10d86c1a6bb0c9e9afabc329bb3f9af837b3567dd8f7c23d9196d9fa70e7001eead92e814313759210dbf
7
- data.tar.gz: 0fc5b4352f633a13e53c47625509c15b1c62c06e3529865e41621b0ea14421c7b0763322cc8720c83f09d37303475cb92d0c8c13981332f85402c4b6f47987e8
6
+ metadata.gz: d2c09955983209d77dd0612b2fe8b085ec64a7ac4115c8441859024834aa99f6a7740d036b9a688cf6a5df16785e185c2eda8ee89b34630047803218d2b36a05
7
+ data.tar.gz: 62ae18beb74e1ab8b81d98726ea8aeba59e63aeeea7a981c1e3b58af902e807533a3c36ced070258fd2fc511cbcb69c96cf13b669735b063ba60f27696c62406
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- Middleman Webpack
1
+ Middleman Webpacked
2
2
  ===
3
3
 
4
4
  ## Usage
@@ -15,6 +15,8 @@ Setup your Webpack
15
15
  middleman webpack
16
16
  ```
17
17
 
18
+ > To enable React.js, add `--react` options when setup Webpack
19
+
18
20
  Add `javascript_pack_tag` to your layout
19
21
 
20
22
  ```erb
@@ -50,5 +52,6 @@ activate :webpack,
50
52
  * [x] Running Webpack without config
51
53
  * [ ] Automatic setup `webpack.config.js`
52
54
  * [x] Babel Support
53
- * [ ] React.js Support
55
+ * [x] React.js Support
54
56
  * [ ] Vue.js Support
57
+ * [ ] Sass Support
@@ -1,4 +1,4 @@
1
1
  PROJECT_ROOT_PATH = File.dirname(File.dirname(File.dirname(__FILE__)))
2
2
  require 'middleman-core'
3
3
  require 'middleman-core/step_definitions'
4
- require File.join(PROJECT_ROOT_PATH, 'lib', 'middleman-webpack')
4
+ require File.join(PROJECT_ROOT_PATH, 'lib', 'middleman-webpacked')
@@ -0,0 +1,15 @@
1
+ module MiddlemanWebpacked
2
+ class Build < CommandRunner
3
+ bin 'node_modules/.bin/webpack'
4
+ mode :production
5
+
6
+ def setup
7
+ @arguments.push(
8
+ '--bail',
9
+ '-p',
10
+ "--output-path #{options.source}/#{app.config[:js_dir]}",
11
+ "--config config/webpack/production.js"
12
+ )
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,58 @@
1
+ module MiddlemanWebpacked
2
+ class CommandRunner
3
+ class << self
4
+ AVAILABLE_MODE = %i[production development none]
5
+
6
+ def bin(path = nil)
7
+ return @bin if path.nil?
8
+ @bin = path
9
+ end
10
+
11
+ def mode(new_mode = nil)
12
+ return @mode if new_mode.nil?
13
+ @mode = new_mode if AVAILABLE_MODE.include?(new_mode)
14
+ end
15
+
16
+ def satisfy?
17
+ return false if bin.nil?
18
+ File.exist?(bin)
19
+ end
20
+ end
21
+
22
+ attr_reader :app, :options, :mode
23
+
24
+ def initialize(app, options)
25
+ @app = app
26
+ @options = options
27
+ @arguments = []
28
+
29
+ setup
30
+ end
31
+
32
+ def setup
33
+ raise NotImplementedError, "The command didn't setup for execute"
34
+ end
35
+
36
+ def loaders
37
+ @loaders.map do |type, loader|
38
+ "--module-bind #{type}=#{loader}-loader"
39
+ end
40
+ end
41
+
42
+ def entries
43
+ options.entry.map do |name, path|
44
+ "--entry #{name}=./src/#{path}"
45
+ end
46
+ end
47
+
48
+ def command
49
+ [
50
+ self.class.bin,
51
+ "--mode #{self.class.mode}"
52
+ ]
53
+ .concat(entries)
54
+ .concat(@arguments)
55
+ .join(' ')
56
+ end
57
+ end
58
+ end
@@ -5,14 +5,83 @@ module Middleman
5
5
  class Webpack < ::Thor::Group
6
6
  include Thor::Actions
7
7
 
8
+ BABEL_TEMPLATE = File.expand_path('../../template/babelrc.tt', __FILE__)
9
+ SHARED_WEBPACK_TEMPLATE = File.expand_path('../../template/shared.webpack.tt', __FILE__)
10
+ DEVELOPMENT_WEBPACK_TEMPLATE = File.expand_path('../../template/dev.webpack.tt', __FILE__)
11
+ PRODUCTION_WEBPACK_TEMPLATE = File.expand_path('../../template/prod.webpack.tt', __FILE__)
12
+
8
13
  check_unknown_options!
9
14
 
15
+ class_option 'react',
16
+ type: :boolean,
17
+ default: false,
18
+ desc: 'Add react support'
19
+
20
+ def self.source_root
21
+ File.expand_path('../../template', __FILE__)
22
+ end
23
+
24
+ def initialize(*args)
25
+ super
26
+
27
+ @app = ::Middleman::Application.new do
28
+ config[ :mode ] = :config
29
+ config[ :disable_sitemap ] = true
30
+ config[ :watcher_disable ] = true
31
+ config[ :exit_before_ready ] = true
32
+ end
33
+
34
+ @packages = default_packages
35
+ end
36
+
10
37
  def webpack
11
- run 'yarn add webpack webpack-dev-server webpack-cli babel-loader --dev'
38
+ @presets = ['env']
39
+ @loaders = []
40
+
41
+ enable_react if options[:react]
42
+
43
+ generate_config
44
+ run "yarn add #{@packages.join(' ')} --dev"
45
+ end
46
+
47
+ def generate_config
48
+ template BABEL_TEMPLATE, File.join(@app.root_path, '.babelrc')
49
+ template SHARED_WEBPACK_TEMPLATE, File.join(@app.root_path, 'config', 'webpack', 'shared.js')
50
+ template DEVELOPMENT_WEBPACK_TEMPLATE, File.join(@app.root_path, 'config', 'webpack', 'development.js')
51
+ template PRODUCTION_WEBPACK_TEMPLATE, File.join(@app.root_path, 'config', 'webpack', 'production.js')
52
+ end
53
+
54
+ def enable_react
55
+ @packages.push(
56
+ 'babel-preset-react',
57
+ 'react',
58
+ 'react-dom',
59
+ 'react-hot-loader'
60
+ )
61
+ @presets = ['env', 'react']
62
+ @loaders.push({
63
+ test: /\.(js|jsx)$/,
64
+ use: 'babel-loader'
65
+ })
12
66
  end
13
67
 
14
68
  # Add to CLI
15
69
  Base.register( self, 'webpack', 'webpack [options]', 'Install webpack to middleman')
70
+
71
+ protected
72
+
73
+ def default_packages
74
+ [
75
+ 'webpack',
76
+ 'webpack-cli',
77
+ 'webpack-merge',
78
+ 'webpack-dev-server',
79
+ 'babel-loader',
80
+ 'babel-core',
81
+ 'babel-preset-env',
82
+ 'compression-webpack-plugin'
83
+ ]
84
+ end
16
85
  end
17
86
  end
18
87
  end
@@ -1,20 +1,23 @@
1
1
  # Require core library
2
2
  require 'middleman-core'
3
3
 
4
+ require 'middleman-webpacked/command_runner'
5
+ require 'middleman-webpacked/server'
6
+ require 'middleman-webpacked/build'
7
+
4
8
  # Extension namespace
5
9
  module Middleman
6
10
  class WebpackedExtension < ::Middleman::Extension
7
- option :source, '.webpack-cache', 'The webpack dist path'
8
- option :entry, {bundle: 'index.js'}, 'The entry points(s) of the compilation'
11
+ include MiddlemanWebpacked
9
12
 
10
- WEBPACK_DEV_SERVER_BIN = 'node_modules/.bin/webpack-dev-server'
11
- WEBPACK_BIN = 'node_modules/.bin/webpack'
13
+ option :source, '.webpack-cache', 'The webpack cache path'
14
+ option :entry, {bundle: 'index.js'}, 'The entry points(s) of the compilation'
12
15
 
13
16
  def initialize(app, options_hash={}, &block)
14
17
  super
15
18
 
16
- fail 'Webpack Dev Server not found' unless File.exists?(WEBPACK_DEV_SERVER_BIN)
17
- fail 'Webpack not found' unless File.exist?(WEBPACK_BIN)
19
+ fail 'Webpack Dev Server not found' unless Server.satisfy?
20
+ fail 'Webpack not found' unless Build.satisfy?
18
21
  end
19
22
 
20
23
  def after_configuration
@@ -30,19 +33,11 @@ module Middleman
30
33
  end
31
34
 
32
35
  def command
33
- return build_command if app.build?
34
- "#{WEBPACK_DEV_SERVER_BIN} --mode development " \
35
- '--module-bind js=babel-loader ' \
36
- '--hot --progress --color --inline --content-base source ' \
37
- "#{options.entry.map { |name, path| "--entry #{name}=./src/#{path}" }.join(' ')} " \
38
- "--output-public-path /#{app.config[:js_dir]} "
39
- end
40
-
41
- def build_command
42
- "#{WEBPACK_BIN} --mode production " \
43
- '--module-bind js=babel-loader ' \
44
- "#{options.entry.map { |name, path| "--entry #{name}=./src/#{path}" }.join(' ')} " \
45
- "--bail -p --output-path #{options.source}/#{app.config[:js_dir]}"
36
+ if app.build?
37
+ Build
38
+ else
39
+ Server
40
+ end.new(app, options).command
46
41
  end
47
42
 
48
43
  def after_build
@@ -0,0 +1,18 @@
1
+ module MiddlemanWebpacked
2
+ class Server < CommandRunner
3
+ bin 'node_modules/.bin/webpack-dev-server'
4
+ mode :development
5
+
6
+ def setup
7
+ @arguments.push(
8
+ '--hot',
9
+ '--progress',
10
+ '--color',
11
+ '--inline',
12
+ '--content-base source',
13
+ "--output-public-path http://localhost:8080/#{app.config[:js_dir]}",
14
+ "--config #{app.root_path}/config/webpack/development.js"
15
+ )
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,3 @@
1
+ {
2
+ "presets": <%= @presets %>
3
+ }
@@ -0,0 +1,12 @@
1
+ const merge = require('webpack-merge')
2
+ const sharedConfig = require('./shared.js')
3
+
4
+ module.exports = merge(sharedConfig, {
5
+ devServer: {
6
+ headers: {
7
+ 'Access-Control-Allow-Origin': '*',
8
+ 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, PATCH, OPTIONS',
9
+ 'Access-Control-Allow-Headers': 'X-Requested-With, content-type, Authorization',
10
+ },
11
+ },
12
+ })
@@ -0,0 +1,6 @@
1
+ const merge = require('webpack-merge')
2
+ const sharedConfig = require('./shared.js')
3
+
4
+ module.exports = merge(sharedConfig, {
5
+ devtool: false
6
+ })
@@ -0,0 +1,12 @@
1
+ module.exports = {
2
+ module: {
3
+ rules: [
4
+ <%- @loaders.map do |loader| %>
5
+ {
6
+ test: <%= loader[:test].inspect %>,
7
+ use: "<%= loader[:use] %>"
8
+ }
9
+ <% end.join(',') %>
10
+ ]
11
+ }
12
+ }
@@ -1,3 +1,3 @@
1
1
  module MiddlemanWebpacked
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: middleman-webpacked
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aotokitsuruya
@@ -37,8 +37,15 @@ files:
37
37
  - Rakefile
38
38
  - features/support/env.rb
39
39
  - lib/middleman-webpacked.rb
40
+ - lib/middleman-webpacked/build.rb
41
+ - lib/middleman-webpacked/command_runner.rb
40
42
  - lib/middleman-webpacked/commands/webpack.rb
41
43
  - lib/middleman-webpacked/extension.rb
44
+ - lib/middleman-webpacked/server.rb
45
+ - lib/middleman-webpacked/template/babelrc.tt
46
+ - lib/middleman-webpacked/template/dev.webpack.tt
47
+ - lib/middleman-webpacked/template/prod.webpack.tt
48
+ - lib/middleman-webpacked/template/shared.webpack.tt
42
49
  - lib/middleman-webpacked/version.rb
43
50
  - middleman-webpacked.gemspec
44
51
  homepage: https://github.com/elct9620/middleman-webpacked