Improve webpack-dev-server compatibility with non-localhost setups.
This commit is contained in:
parent
c68ea29d5d
commit
10deca824e
6 changed files with 45 additions and 8 deletions
|
@ -3,7 +3,8 @@ module JavascriptHelper
|
||||||
javascript_include_tag asset_path(js)
|
javascript_include_tag asset_path(js)
|
||||||
end
|
end
|
||||||
|
|
||||||
def page_specific_javascript_bundle_tag(js)
|
# deprecated; use webpack_bundle_tag directly instead
|
||||||
javascript_include_tag(*webpack_asset_paths(js))
|
def page_specific_javascript_bundle_tag(bundle)
|
||||||
|
webpack_bundle_tag(bundle)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
30
app/helpers/webpack_helper.rb
Normal file
30
app/helpers/webpack_helper.rb
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
require 'webpack/rails/manifest'
|
||||||
|
|
||||||
|
module WebpackHelper
|
||||||
|
def webpack_bundle_tag(bundle)
|
||||||
|
javascript_include_tag(*gitlab_webpack_asset_paths(bundle))
|
||||||
|
end
|
||||||
|
|
||||||
|
# override webpack-rails gem helper until changes can make it upstream
|
||||||
|
def gitlab_webpack_asset_paths(source, extension: nil)
|
||||||
|
return "" unless source.present?
|
||||||
|
|
||||||
|
paths = Webpack::Rails::Manifest.asset_paths(source)
|
||||||
|
if extension
|
||||||
|
paths = paths.select { |p| p.ends_with? ".#{extension}" }
|
||||||
|
end
|
||||||
|
|
||||||
|
# include full webpack-dev-server url for rspec tests running locally
|
||||||
|
if Rails.env.test? && Rails.configuration.webpack.dev_server.enabled
|
||||||
|
host = Rails.configuration.webpack.dev_server.host
|
||||||
|
port = Rails.configuration.webpack.dev_server.port
|
||||||
|
protocol = Rails.configuration.webpack.dev_server.https ? 'https' : 'http'
|
||||||
|
|
||||||
|
paths.map! do |p|
|
||||||
|
"#{protocol}://#{host}:#{port}#{p}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
paths
|
||||||
|
end
|
||||||
|
end
|
|
@ -28,9 +28,9 @@
|
||||||
= stylesheet_link_tag "application", media: "all"
|
= stylesheet_link_tag "application", media: "all"
|
||||||
= stylesheet_link_tag "print", media: "print"
|
= stylesheet_link_tag "print", media: "print"
|
||||||
|
|
||||||
= javascript_include_tag(*webpack_asset_paths("runtime"))
|
= webpack_bundle_tag "runtime"
|
||||||
= javascript_include_tag(*webpack_asset_paths("common"))
|
= webpack_bundle_tag "common"
|
||||||
= javascript_include_tag(*webpack_asset_paths("main"))
|
= webpack_bundle_tag "main"
|
||||||
|
|
||||||
- if content_for?(:page_specific_javascripts)
|
- if content_for?(:page_specific_javascripts)
|
||||||
= yield :page_specific_javascripts
|
= yield :page_specific_javascripts
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
title: Add webpack_bundle_tag helper to improve non-localhost GDK configurations
|
||||||
|
merge_request: 10604
|
||||||
|
author:
|
|
@ -11,6 +11,7 @@ var WatchMissingNodeModulesPlugin = require('react-dev-utils/WatchMissingNodeMod
|
||||||
var ROOT_PATH = path.resolve(__dirname, '..');
|
var ROOT_PATH = path.resolve(__dirname, '..');
|
||||||
var IS_PRODUCTION = process.env.NODE_ENV === 'production';
|
var IS_PRODUCTION = process.env.NODE_ENV === 'production';
|
||||||
var IS_DEV_SERVER = process.argv[1].indexOf('webpack-dev-server') !== -1;
|
var IS_DEV_SERVER = process.argv[1].indexOf('webpack-dev-server') !== -1;
|
||||||
|
var DEV_SERVER_HOST = process.env.DEV_SERVER_HOST || 'localhost';
|
||||||
var DEV_SERVER_PORT = parseInt(process.env.DEV_SERVER_PORT, 10) || 3808;
|
var DEV_SERVER_PORT = parseInt(process.env.DEV_SERVER_PORT, 10) || 3808;
|
||||||
var DEV_SERVER_LIVERELOAD = process.env.DEV_SERVER_LIVERELOAD !== 'false';
|
var DEV_SERVER_LIVERELOAD = process.env.DEV_SERVER_LIVERELOAD !== 'false';
|
||||||
var WEBPACK_REPORT = process.env.WEBPACK_REPORT;
|
var WEBPACK_REPORT = process.env.WEBPACK_REPORT;
|
||||||
|
@ -182,12 +183,13 @@ if (IS_PRODUCTION) {
|
||||||
if (IS_DEV_SERVER) {
|
if (IS_DEV_SERVER) {
|
||||||
config.devtool = 'cheap-module-eval-source-map';
|
config.devtool = 'cheap-module-eval-source-map';
|
||||||
config.devServer = {
|
config.devServer = {
|
||||||
|
host: DEV_SERVER_HOST,
|
||||||
port: DEV_SERVER_PORT,
|
port: DEV_SERVER_PORT,
|
||||||
headers: { 'Access-Control-Allow-Origin': '*' },
|
headers: { 'Access-Control-Allow-Origin': '*' },
|
||||||
stats: 'errors-only',
|
stats: 'errors-only',
|
||||||
inline: DEV_SERVER_LIVERELOAD
|
inline: DEV_SERVER_LIVERELOAD
|
||||||
};
|
};
|
||||||
config.output.publicPath = '//localhost:' + DEV_SERVER_PORT + config.output.publicPath;
|
config.output.publicPath = '//' + DEV_SERVER_HOST + ':' + DEV_SERVER_PORT + config.output.publicPath;
|
||||||
config.plugins.push(
|
config.plugins.push(
|
||||||
// watch node_modules for changes if we encounter a missing module compile error
|
// watch node_modules for changes if we encounter a missing module compile error
|
||||||
new WatchMissingNodeModulesPlugin(path.join(ROOT_PATH, 'node_modules'))
|
new WatchMissingNodeModulesPlugin(path.join(ROOT_PATH, 'node_modules'))
|
||||||
|
|
|
@ -48,8 +48,8 @@ Steps to split page-specific JavaScript from the main `main.js`:
|
||||||
|
|
||||||
```haml
|
```haml
|
||||||
- content_for :page_specific_javascripts do
|
- content_for :page_specific_javascripts do
|
||||||
= page_specific_javascript_bundle_tag('lib_chart')
|
= webpack_bundle_tag 'lib_chart'
|
||||||
= page_specific_javascript_bundle_tag('graphs')
|
= webpack_bundle_tag 'graphs'
|
||||||
```
|
```
|
||||||
|
|
||||||
The above loads `chart.js` and `graphs_bundle.js` for this page only. `chart.js`
|
The above loads `chart.js` and `graphs_bundle.js` for this page only. `chart.js`
|
||||||
|
|
Loading…
Reference in a new issue