Я использую плагин html-webpack-plugin, чтобы ввести теги <script>
в файл шаблона для кусков, которые генерирует веб-пакет. У меня также есть несколько глобальных таблиц стилей, которые я хочу динамически добавлять в раздел <head>
моего шаблона HTML. Для этого я также использую html-webpack-plugin следующим образом (в этом случае запись/кусок app
).Игнорировать Таблицы стилей Angular2 с ExtractTextPlugin в webpack
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
EntryPoint, WebPack также включает в себя все таблицы стилей, на который ссылается из моих Angular2 компонентов. Поскольку он проходит через зависимости приложения и находит операторы require
, добавленные angular2-template-loader. Это нежелательно, потому что я хочу, чтобы эти таблицы стилей были локальными для компонентов, к которым они принадлежат, т. Е. Быть встроенными в 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