middleman-webpacked 0.0.2 → 0.0.3

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: 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