我正在使用html-webpack-plugin插件將<script>
標籤注入到webpack生成的塊的模板文件中。我還有一些全球樣式表,我想動態添加到我的HTML模板的<head>
部分。爲此,我也使用html-webpack-plugin(如下所示)(在這種情況下,app
entry/chunk是相關的)。在Webpack中忽略Angular2組件樣式表ExtractTextPlugin
module.exports = {
entry: {
'polyfills': './ts/polyfills.ts',
'vendor': './ts/vendor.ts',
'app': './ts/app.ts'
},
module: {
loaders: [
{
test: /\.ts$/,
loaders: ['ts', 'angular2-template-loader']
},
{
test: /\.html$/,
loader: 'html-loader'
},
{
test: /\.css$/,
loaders: ['to-string-loader', ExtractTextPlugin.extract('style-loader', 'css-loader')]
}
]
},
plugins: [
new ExtractTextPlugin('css/[name].[contenthash].css'),
new webpack.ProvidePlugin({
bootstrap: 'bootstrap'
}),
new webpack.optimize.CommonsChunkPlugin({
name: 'app',
filename: 'js/[name].[chunkhash].min.js',
chunks: ['app']
}),
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
filename: 'js/[name].[chunkhash].min.js',
chunks: ['vendor']
}),
new webpack.optimize.CommonsChunkPlugin({
name: 'polyfills',
filename: 'js/[name].[chunkhash].min.js',
chunks: ['polyfills']
}),
new HtmlWebpackPlugin({
template: 'my-template.html',
filename: 'my-template.html',
inject: 'body',
hash: false
}),
]
};
下面是app.ts
文件,在那裏我已經添加了每一個我想在我的模板中包含的樣式表(它們被合併在一起,成爲一個樣式表)一個require
聲明。
require('main.css');
require('misc.css');
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app.module';
platformBrowserDynamic().bootstrapModule(AppModule);
本質上講,這工作得很好,但前提條件是,我使用此配置用於Angular2應用,它是由可具有相關聯的樣式表,像在本例中的組件。
@Component({
styleUrls: [
'my-stylesheet.css'
]
})
export class MyComponent { ... }
構建應用程序通常會導致一噸,這些樣式表的成分HTTP調用,所以要解決這個問題,我已經用angular2-template-loader直接拉進樣式表的組件。該裝載機的工作如下。
的angular2模板裝載機搜索templateUrl和styleUrls的角2組分元數據的內部 聲明和替換與相應需要聲明 的路徑。
這樣做的問題是,除了被添加到app.ts
入口點兩個樣式表的WebPack還包括每一個從我Angular2部件引用樣式表。因爲它經歷了應用程序的依賴關係,並且找到了由angular2-template-loader添加的require
語句。這是不可取的,因爲我希望這些樣式表對於它們所屬的組件是本地的,即在JS中內聯。
因此,我需要一種方法來只有包括樣式表,我require
直接在我的入口點,也許以某種方式排除組件樣式表。問題是,在這兩種情況下,該文件都具有.css
擴展名,所以它們都通過了extract-text-plugin
的測試。我看了看加載程序/插件的文檔,但找不到任何能解決我的問題的東西。
所以,我要的是一個app.[contenthash].css
文件添加到我的模板文件(這部分作品),但不包括我Angular2組件引用的樣式表(包括在內,因爲angular2模板型裝載機)。
如何防止將這些Angular2組件樣式表包含在添加到我的HTML模板中的樣式表中?
啊,這看起來不錯!我會盡快讓它旋轉,讓你知道它是如何發生的。謝謝! – Andy0708
我嘗試過玩這個遊戲,但無法啓動它。首先,我的CSS文件位於'public/css',其中組件的樣式表位於'public/css/components/**/*。css'。我試圖在第一個加載器中排除'/ public \/css \/components /',並在第二個加載器中使用'raw',並且使用了許多不同的測試和排除以及各種不同的錯誤。我不知道我是否搞亂了路徑/正則表達式或問題是什麼。如果你能提供一個前面提到的路徑的例子,那真的很棒,因爲我似乎無法讓它起作用。 – Andy0708
嘗試使用'/ public \\ css \\ components /'或'/ css \\ components /' – yurzui