現在可以使用angular2,帶有熱模塊替換的webpack,sass源代碼和外部加載的css。花了我幾天的時間玩它,但我得到它的工作!
的依賴關係是style-loader
,css-loader
,和sass-loader
(如果使用SASS,若否,SASS裝載機可以被移除)
我使用ExtractTextPlugin生產模式來發射實際的CSS文件。
注意:爲了使它起作用,我不使用stylesUrl屬性,而是將.scss文件導入@Component裝飾器之外,以便樣式在全局上下文中加載,而不是由組件作用域。
該配置允許使用webpack開發服務器使用SCSS文件進行熱模塊替換,並將extracttextplugin用於生產模式以發佈實際的.css文件。
這是我的工作配置
{
test: /\.(scss)$/,
use:
isDevServer ? [
{
loader: 'style-loader',
},
{
loader: 'css-loader',
options: { sourceMap: true }
},
{
loader: 'postcss-loader',
options: { postcss: [AutoPrefixer(autoPrefixerOptions)], sourceMap: true }
},
{
loader: 'sass-loader',
options: { sourceMap: true }
},
{
loader: 'sass-resources-loader',
options: {
resources: [
'./src/assets/styles/variables.scss',
'./src/assets/styles/mixins.scss']
}
},
/**
* The sass-vars-loader will convert the 'vars' property or any module.exports of
* a .JS or .JSON file into valid SASS and append to the beginning of each
* .scss file loaded.
*
* See: https://github.com/epegzz/sass-vars-loader
*/
{
loader: '@epegzz/sass-vars-loader?',
options: querystring.stringify({
vars: JSON.stringify({
susyIsDevServer: susyIsDevServer
})
})
}] : // dev mode
ExtractTextPlugin.extract({
fallback: "css-loader",
use: [
{
loader: 'css-loader',
options: { sourceMap: true }
},
{
loader: 'postcss-loader',
options: { postcss: [AutoPrefixer(autoPrefixerOptions)], sourceMap: true }
},
{
loader: 'sass-loader',
options: { sourceMap: true }
},
{
loader: 'sass-resources-loader',
options: {
resources: [
'./src/assets/styles/variables.scss',
'./src/assets/styles/mixins.scss']
}
}, {
loader: '@epegzz/sass-vars-loader?',
options: querystring.stringify({
vars: JSON.stringify({
susyIsDevServer: susyIsDevServer
})
// // Or use 'files" object to specify vars in an external .js or .json file
// files: [
// path.resolve(helpers.paths.appRoot + '/assets/styles/sass-js-variables.js')
// ],
})
}],
publicPath: '/' // 'string' override the publicPath setting for this loader
})
},
然後,在你的組件,例如,app.component.ts
,你會需要你的app.style.scss
文件OUTSIDE的@Component裝飾的。
這就是訣竅。如果您使用stylesUrl
加載樣式「角度方式」,這將不起作用。這樣做會允許您爲延遲加載的組件延遲加載.css
樣式表,使初始加載時間更快。
app.component.css
/*
* THIS IS WHERE WE REQUIRE CSS/SCSS FILES THAT THIS COMPONENT NEEDS
*
* Function: To enable so-called "Lazy Loading" CSS/SCSS files "on demand" as the app views need them.
* Do NOT add styles the "Angular2 Way" in the @Component decorator ("styles" and "styleUrls" properties)
*/
import './app.style.scss'
/**
* AppComponent Component
* Top Level Component
*/
@Component({
selector: 'body',
encapsulation: ViewEncapsulation.None,
host: { '[class.authenticated]': 'appState.state.isAuthenticated' },
templateUrl: './app.template.html'
})
我已經運行此安裝沒有問題。幹得好!
更新08/2017:改進的配置爲的WebPack 3+架構要求,並與角4 AOT編譯工作。
我已經創建了https://github.com/sheerun/extracted-loader來解決這個問題 – sheerun