Skip to content

Commit b0f3dae

Browse files
committed
Support both Webpacker and Shakapacker
We plan to eventually drop support for Webpacker. But until the Rails 6 migration is finished, we aim to support both. Decouple from experimental Rails version environment variable and detect Shakapacker global instead. Enhance install generator to create required PostCSS config. which is no longer generated by Shalapacker's install generator. REDMINE-19438
1 parent 09d996e commit b0f3dae

File tree

7 files changed

+48
-27
lines changed

7 files changed

+48
-27
lines changed

Gemfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,13 @@ if Pageflow::RailsVersion.experimental?
2828
# use shakapacker need to add it to their Gemfile themselves. Requiring
2929
# shakapacker in an engine file (like we normally do) would force all
3030
# host application to install shakapacker.
31-
gem 'shakapacker'
31+
gem 'shakapacker', '~> 7.0'
3232
else
3333
# Make webpacker available in specs. Host applications that want to
3434
# use webpacker need to add it to their Gemfile themselves. Requiring
3535
# webpacker in an engine file (like we normally do) would force all
3636
# host application to install webpacker.
37-
gem 'webpacker'
37+
gem 'webpacker', '~> 4.2'
3838
end
3939

4040
# Make tests fail on JS errors

entry_types/scrolled/app/helpers/pageflow_scrolled/packs_helper.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ module PageflowScrolled
22
# @api private
33
module PacksHelper
44
def scrolled_frontend_javascript_packs_tag(entry, options)
5-
if Pageflow::RailsVersion.experimental?
5+
if defined?(Shakapacker)
66
javascript_pack_tag(
77
*scrolled_frontend_packs(entry, **options),
88
defer: false
@@ -15,7 +15,7 @@ def scrolled_frontend_javascript_packs_tag(entry, options)
1515
end
1616

1717
def scrolled_frontend_stylesheet_packs_tag(entry, options)
18-
if Pageflow::RailsVersion.experimental?
18+
if defined?(Shakapacker)
1919
stylesheet_pack_tag(
2020
*scrolled_frontend_packs(entry, **options),
2121
media: 'all'
@@ -29,7 +29,7 @@ def scrolled_frontend_stylesheet_packs_tag(entry, options)
2929
end
3030

3131
def scrolled_editor_javascript_packs_tag(entry)
32-
if Pageflow::RailsVersion.experimental?
32+
if defined?(Shakapacker)
3333
javascript_pack_tag(
3434
*scrolled_editor_packs(entry),
3535
defer: false

entry_types/scrolled/app/helpers/pageflow_scrolled/themes_helper.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ def scrolled_theme_asset_path(theme,
66
theme_file_role: nil,
77
theme_file_style: :resized,
88
relative_url: false)
9-
prefix = Pageflow::RailsVersion.experimental? ? 'static' : 'media'
9+
prefix = defined?(Shakapacker) ? 'static' : 'media'
1010

1111
path =
1212
theme.files.dig(theme_file_role, theme_file_style) ||

entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_head.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<%= stylesheet_link_tag 'pageflow_paged/editor', media: 'all' %>
22

3-
<% if Pageflow::RailsVersion.experimental? %>
3+
<% if defined?(Shakapacker) %>
44
<%= stylesheet_pack_tag 'pageflow-scrolled-frontend' %>
55
<% else %>
66
<%= stylesheet_packs_with_chunks_tag 'pageflow-scrolled-frontend' %>

entry_types/scrolled/lib/generators/pageflow_scrolled/install/install_generator.rb

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,18 @@ def theme_plugin
3030
end
3131

3232
def install_packages
33-
if Pageflow::RailsVersion.experimental?
33+
if defined?(Shakapacker)
3434
run 'yarn add css-loader style-loader' \
3535
' mini-css-extract-plugin css-minimizer-webpack-plugin' \
36-
' postcss postcss-loader postcss-url' \
36+
' postcss postcss-preset-env postcss-loader postcss-import postcss-url postcss-flexbugs-fixes' \
3737
' @fontsource/source-sans-pro'
3838
else
3939
run 'yarn add postcss-url@^8.0.0 @fontsource/source-sans-pro'
4040
end
4141
end
4242

4343
def webpack_config
44-
return unless Pageflow::RailsVersion.experimental?
44+
return unless defined?(Shakapacker)
4545

4646
gsub_file(
4747
'config/webpack/webpack.config.js',
@@ -54,7 +54,11 @@ def webpack_config
5454
'const webpackConfig = generateWebpackConfig()',
5555
<<~JS
5656
const webpackConfig = merge(
57-
generateWebpackConfig(),
57+
generateWebpackConfig({
58+
resolve: {
59+
extensions: ['.css']
60+
}
61+
}),
5862
require('pageflow/config/webpack5'),
5963
require('pageflow-scrolled/config/webpack')
6064
)
@@ -88,7 +92,7 @@ def webpack_config
8892
end
8993

9094
def webpack_environment
91-
return if Pageflow::RailsVersion.experimental?
95+
return if defined?(Shakapacker)
9296

9397
inject_into_file('config/webpack/environment.js',
9498
before: "module.exports = environment\n") do
@@ -109,7 +113,7 @@ def webpack_environment
109113
end
110114

111115
def webpacker_yml
112-
return if Pageflow::RailsVersion.experimental?
116+
return if defined?(Shakapacker)
113117

114118
gsub_file('config/webpacker.yml',
115119
'extract_css: false',
@@ -122,12 +126,29 @@ def webpacker_yml
122126
end
123127

124128
def postcss_config
125-
return if Pageflow::RailsVersion.experimental?
126-
127-
inject_into_file('postcss.config.js',
128-
after: "require('postcss-import'),\n") do
129-
" // Make relative urls in fontsource packages work\n" \
130-
" require('postcss-url')({url: 'rebase'}),\n"
129+
if defined?(Shakapacker)
130+
create_file 'postcss.config.js', <<~JS
131+
module.exports = {
132+
plugins: [
133+
require('postcss-import'),
134+
// Make relative urls in fontsource packages work
135+
require('postcss-url')({url: 'rebase'}),
136+
require('postcss-flexbugs-fixes'),
137+
require('postcss-preset-env')({
138+
autoprefixer: {
139+
flexbox: 'no-2009'
140+
},
141+
stage: 3
142+
})
143+
]
144+
}
145+
JS
146+
else
147+
inject_into_file('postcss.config.js',
148+
after: "require('postcss-import'),\n") do
149+
" // Make relative urls in fontsource packages work\n" \
150+
" require('postcss-url')({url: 'rebase'}),\n"
151+
end
131152
end
132153
end
133154

entry_types/scrolled/spec/support/config/webpacker.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
unless Pageflow::RailsVersion.experimental?
1+
unless defined?(Shakapacker)
22
# Make sure packs are recompiled for Capybara specs when Rollup
33
# outputs change
44

pageflow.gemspec

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -128,13 +128,6 @@ Gem::Specification.new do |s|
128128
# which we currently depend on in pageflow/engine.rb
129129
s.add_dependency 'sprockets', '< 4'
130130

131-
# Used for Webpack build in host application
132-
if Pageflow::RailsVersion.experimental?
133-
s.add_dependency 'shakapacker', '~> 7.0'
134-
else
135-
s.add_dependency 'webpacker', '~> 4.2'
136-
end
137-
138131
# Using translations from rails locales in javascript code.
139132
s.add_dependency 'i18n-js', '~> 2.1'
140133

@@ -164,6 +157,13 @@ Gem::Specification.new do |s|
164157
# string encryptor/decryptor
165158
s.add_dependency 'symmetric-encryption', '~> 4.3.1'
166159

160+
# Used for Webpack build in host application
161+
if Pageflow::RailsVersion.experimental?
162+
s.add_development_dependency 'shakapacker', '~> 7.0'
163+
else
164+
s.add_development_dependency 'webpacker', '~> 4.2'
165+
end
166+
167167
# Used by the dummy rails application
168168
s.add_development_dependency 'mysql2', '~> 0.5.2'
169169

0 commit comments

Comments
 (0)