Improve webpack-dev-server compatibility with non-localhost setups.

This commit is contained in:
Mike Greiling 2017-04-12 19:05:23 +00:00 committed by Alfredo Sumaran
parent c68ea29d5d
commit 10deca824e
6 changed files with 45 additions and 8 deletions

View file

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

View 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

View file

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

View file

@ -0,0 +1,4 @@
---
title: Add webpack_bundle_tag helper to improve non-localhost GDK configurations
merge_request: 10604
author:

View file

@ -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'))

View file

@ -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`