webpack hot-Modul-Ersatz: css ohne refresh
Bisher habe ich mit livereload, so dass, wenn ich ändern, JS, templates oder wird die Seite aktualisiert, und wenn ich CSS, es würde hotswap-die neue CSS ohne refresh.
Ich versuche webpack jetzt und habe fast die selbe Verhalten, mit einer Ausnahme: wenn die CSS-änderungen, frischt es das ganze Fenster. Ist es möglich zu machen, hotswap-CSS-ohne refresh?
Config so weit:
var webpackConfig = {
entry: ["webpack/hot/dev-server", __dirname + '/app/scripts/app.js'],
debug: true,
output: {
path: __dirname + '/app',
filename: 'scripts/build.js'
},
devtool: 'source-map',
plugins: [
new webpack.HotModuleReplacementPlugin(),
new htmlWebpackPlugin({
template: __dirname + '/app/index.html',
inject: 'body',
hash: true,
config: config
}),
new webpack.ProvidePlugin({
'angular': 'angular'
}),
new ExtractTextPlugin("styles.css")
],
module: {
loaders: [
{
test: /\.scss$/,
loader: "style!css!sass?includePaths[]=" + __dirname + "/app/bower_components/compass-mixins/lib&includePaths[]=" + __dirname + '/instance/sth/styles&includePaths[]=' + __dirname + '/app/scripts'
}
]
}
};
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist einer der Nachteile der Verwendung von
ExtractTextPlugin
wie bereits in das Projekt README. Sie können das Problem beheben, durch das aufteilen der Konfiguration. Dh. separate Konfiguration für Entwicklung, ohne die es, und eines für die Produktion mit.Ist es nun möglich, angular2, webpack mit hot-Modul-Ersatz, sass sourcemaps und extern geladene css. Es dauerte mich Tage mit ihm spielen, aber ich habe es funktioniert!
Sind die Abhängigkeiten
style-loader
,css-loader
, undsass-loader
(bei Verwendung von sass, wenn nicht, die sass-loader kann entfernt werden)Benutze ich ExtractTextPlugin für die Produktion Modus zu emittieren ist .css-Dateien.
HINWEIS: um dieses Zu erhalten, um zu arbeiten, ich glaube nicht, das stylesUrl Eigentum, sondern ich importieren .scss-Datei außerhalb der @Component decorator so, dass die Stile laden im globalen Kontext eher als Gültigkeitsbereich von Komponente.
Ermöglicht diese Konfiguration für Hot-Modul-Ersatz mit SCSS-Dateien mit webpack dev-server, und extracttextplugin für die Produktion Modus zu emittieren ist .css-Dateien.
Hier ist meine funktionierende config
Dann, in Ihre Komponenten, beispielsweise
app.component.ts
Sie würde erfordern, Ihrapp.style.scss
Datei AUßERHALB der @Component decorator.Dass ist der trick. Das wird nicht funktionieren, wenn Sie Last Stile der "Winkel-Weg" mit
stylesUrl
. Doing es auf diese Art und Weise wird es Ihnen lazy load.css
stylesheets für Komponenten, die faul sind geladen, wodurch die anfänglichen Ladezeiten noch schneller.app.Komponente.css
Hatte ich keine Probleme mit diesem setup. Hier gehen Sie!
Aktualisiert 08/2017: Verbesserte config für webpack 3+ schema Anforderungen, und arbeiten mit Winkel-4 AOT-Kompilierung.
Gibt ' s eigentlich eine einfache Möglichkeit, dies zu tun. Ich bin mit sass-loader mit extract-text-plugin, das erzeugt css-Dateien.
Was Sie tun müssen, ist fügen Sie id, um Ihre css enthalten
Nun, Sie brauchen, um sicherzustellen wenn HMR geschieht, aktualisieren Sie die url mit der aktuellen version/Zeitstempel. Sie können dies tun, in einer solchen Art und Weise:
So, wenn css-änderungen, wir werden Update-url der css-Datei enthalten, um es neu laden.
Obwohl ExtractTextPlugin Staaten "Keine Hot-Modul-Ersatz" in seiner README-Sektion, ich behoben, aktualisieren Sie manuell die CSS-Dateien durch die BrowserSync-API.
Ich verwendet Blick zu hören für alle änderungen in meiner CSS-Dateien, und dann verwendet, BrowserSync, Sie zu aktualisieren.
Können Sie auch leicht tun, indem Sie Bearbeiten Ihrer build-Skript mit etwas von der folgenden:
Hoffe, das hilft.
Können Sie 'css-hot-loader' zu aktivieren HMR für Ihre extrahiert css.
Es funktioniert für mich perfekt.