2015-10-17 12 views
39

webpack-dev-serverをhtml-webpack-pluginで開発して、リビジョンソースのindex.htmlを生成しました。私がindex.htmlを変更するたびに、バンドルシステムは再構築されません。私はインデックスがエントリにないことを知っているが、これを解決する方法はありますか?webpack-dev-serverとhtml-webpack-pluginを使用してindex.htmlを見る方法

+1

私の解決策で問題が解決しましたか?私はあなたがこれを行ういくつかの他の方法を見つけたかどうかを知りたいです。 –

+0

私は同じボートに乗っています。私は別の資産を参照して、2つの異なるindex.html、生産用と開発用の1つを避けようとしています。 – Spock

+1

@ Spock下の私の答えを参照してください。エントリポイントでテンプレートを要求することができます。テンプレートを変更するたびに、開発者サーバーが更新されます。 –

答えて

38

問題は、index.htmlがWebpackによって監視されていないことです。コード内のどこかで「必要」または「インポート」されているローダーがテストしているファイルのみを監視します。

溶液には2つの部分があります。

最初は、エントリポイントにindex.htmlファイルが必要です。技術的には、アプリケーションのどこにでもそれを要求できますが、これは非常に便利です。 html-webpack-pluginでテンプレートを使用している場合は、テンプレートを要求することもできます。

私は私のエントリポイントである私のindex.jsファイル、で私のindex.htmlを要求さ:

最後に
require('./index.html') 
const angular = require('angular') 
const app = angular.module('app', []) 
//...so on and so forth 

、あなたのWebPACKの設定に、あなたの他のローダーの全てでraw-loaderをインストールして追加ファイル。したがって:

{ 
    test: /\.html$/, 
    loader: "raw-loader" 
} 

生ローダは単なるテキストの文字列に「必要」された任意のファイルについて変換されますと、その後、WebPACKのはあなたのためにそれを見て、DEV-サーバーに変更を加えるたびに更新されます。

Webpack自体も、あなたのプログラムも、ロードされた段階でindex.htmlファイル(またはテンプレート)で実際に何もしません。それは私が開発サーバを実行している場合ので、ちょうど良い対策のために、私はそれを追加し、本番やテスト環境のための完全に不要です。

/* eslint no-undef: 0 */ 

if (process.env.NODE_ENV === 'development') { 
    require('./index.html') 
} 

const angular = require('angular') 
const app = angular.module('app', []) 
//...so on and so forth 

理論的にはあなたが他の静的なHTMLの束「に必要」することができますあなたが見たいファイルです。 ...またはその問題のテキストファイル。私はAngularディレクティブテンプレートにはrawローダーを使用しますが、エントリーポイントの先頭に追加する必要はありません。

module.exports = function(app) { 
    app.directive('myDirective', function(aListItem) { 
    return { 
     template: require('./myTemplate.html'), 
     restrict: 'E', 
     controller: function($scope) { 
     $scope.someThingThatGoesInMyTemplate = 'I love raw-loader!' 
     } 
    } 
    }) 
} 
+0

イエス様、時間が飛ぶ!私はこれに戻りませんでした、すみません。これは素晴らしいです、美しく動作します! – Spock

+0

すてきな回避策! – elaijuh

+0

ここでprocess.envのステータスを取得するのは混乱します。これはサーバー側で実行されていますか?そのコードスニペットをindex.jsで使用すると機能しません。その変数の認識はありません。それはクライアント側であるため未定義です。あなたはこの仕事をどのようにするかを明確にすることができますか? – spb

6

単にあなたのdevServerの設定にwatchContentBase: trueを追加します。これは次のように私は、ディレクティブのテンプレートプロパティの内部で必要とすることができます。 webpack-dev-serverはcontentBase dirにあるすべてのファイルの変更を監視します。ここでは、./src内のすべてのファイルが

webpack.config.js見る:

... devServer: { port: 8080, contentBase: './src', watchContentBase: true }

+0

私はhtml/twigを見るための単純な解決策を見いだそうとしています(テンプレート)ディレクトリに移動し、それらの変更時にページをリロードするだけです。私はSPA以外のサイト(Craft CMS)にwebpack&dev-serverを使用しています。 ''。単純な解決策は、ドキュメント全体の中にあったが、ユースケースのピックアップではなかった。この回答ありがとう! –

関連する問題