2015-01-08 6 views
10

Sto usando lo webpack-dev-server con le sue bandiere --inline e --host. Tutto funziona bene.Come si usa la modalità inline con l'API webpack-dev-server e Gulp

webpack-dev-server --inline --host example.com

Poi ho guardato il confezionamento di questo compito utilizzando gulp e l'API webpack-dev-server.

var gulp    = require('gulp'); 
var gutil   = require('gulp-util'); 
var Webpack   = require('webpack'); 
var WebpackDevServer = require('webpack-dev-server'); 
var WebpackConfig = require('./webpack.config.js'); 

gulp.task('default', ['webpack-dev-server']); 

gulp.task('webpack-dev-server', function(callback) { 
    new WebpackDevServer(Webpack(WebpackConfig), { 
    host: 'example.com', 
    inline: true, 
    publicPath: WebpackConfig.output.publicPath, 
    }).listen(port, host, function(err) { 
    if(err) throw new gutil.PluginError('webpack-dev-server', err); 
    gutil.log('[webpack-dev-server]', 'http://example.com:8080'); 
    }); 
}); 

Questo non sembra funzionare, credo che ci sia alcun inline o host per l'API.

Qualche idea se è possibile?

risposta

-1

modalità inline è abilitato per default - andare a http://host:port/webpack-dev-server/

+1

Forse ho frainteso quello che modalità inline in realtà è , ma pensavo che implicasse una modalità non ifram. Da http: // host: port/webpack-dev-server/è ciò che sto cercando di evitare in quanto causa problemi di layout. – Hugh

+1

Penso di aver sbagliato e hai ragione. Quello che vuoi non è l'host: port/? Per impostazione predefinita è possibile accedere ai file in una modalità non iframe. –

+0

Potresti avere ragione. La documentazione è un po 'confusa in quanto sembra menzionare prima una modalità implicita inline e quindi una esplicita. Sfortunatamente anche l'impostazione dell'host è molto utile per me. Penso di aver bisogno di approfondire il codice un po 'di più. – Hugh

4

L'opzione in linea non può essere attivata tramite una bandiera nelle opzioni passate al server. Tuttavia dando un'occhiata allo command line script si può vedere che si tratta solo di aggiungere script di immissione aggiuntivi alle opzioni passate al compilatore del webpack.

È possibile ripetere la stessa cosa nel codice.

WebpackConfig.entry = [ 
    WebPackConfig.entry, // assuming you have a single existing entry 
    require.resolve("webpack-dev-server/client/") + '?http://localhost:9090', 
    'webpack/hot/dev-server' 
] 
4

Nella versione attuale Webpack (1.13.2) questo può essere fatto.

Dal documentation:

Per utilizzare la modalità in linea, sia

specificare --inline sulla riga di comando.
specificare devServer: { inline: true } nel vostro webpack.config.js

+1

Non sono mai riuscito a farlo funzionare e la documentazione dice ancora che il server non sa nulla di webpack.config.js ... –

0

Sembra che che le risposte ottenuto obsoleti e non sono riuscito a utilizzare uno di loro di aggiungere il inline via sorso, così ho aperto webpack-dev-server.js e copiato il metodo che lo fa a il mio file gulp e modificato un po '. Funziona (anche se è un po 'brutto):

function addInline(config, hot) { 
    var devClient = [require.resolve("webpack-dev-server/client/") + "?http://localhost:8080"]; 

    if (hot) { 
     devClient.push("webpack/hot/dev-server"); 
    } 
    [].concat(config).forEach(function (config) { 
     if (typeof config.entry === "object" && !Array.isArray(config.entry)) { 
      Object.keys(config.entry).forEach(function (key) { 
       config.entry[key] = devClient.concat(config.entry[key]); 
      }); 
     } else { 
      config.entry = devClient.concat(config.entry); 
     } 
    }); 
} 

Sarà necessario passare il config in là prima di passare a webpack:

var webpackDevelopmentConfig = require('./Source/config/webpack.config.development.js'); 
addInline(webpackDevelopmentConfig) 

var compiler = webpack(webpackDevelopmentConfig);