typescript - Cum să incluzi un fișier CSS extern folosind Webpack și Angular2?
Încerc să adaug o referință externă la un fișier CSS în Angular2 folosind Webpack. CSS-ul meu este definit ca
{ test: /\.css$/, loader: "style-loader!css-loader" },
în fișierul meu webpack.config.js și pot încărca CSS fără probleme atunci când fac acest lucru în head-ul unui fișier TypeScript:
require("./styles/style.css");
Totuși, când încerc să încarc un fișier CSS inline într-un component, așa cum este în:
@Component({
selector: 'todo-list',
template: `
<section class="todoapp">
</section>
`,
styles: [require('./Todolist.css')], // <--------------
directives: [TodoItem],
providers: [TodosService]
...
Primește o eroare de: EXCEPTION: TypeError: s.replace nu este o funcție
Am încercat de asemenea să încarc CSS prin:
styles: [require('style-loader!css-loader!./Todolist.css')]
dar nu prea mult noroc
orice ajutor este apreciat
salutări
Sean
Răspuns #1
Ceea ce a funcționat a fost să încarc CSS-ul ca text brut în webpack.config.js
{
test: /\.css$/,
loader: 'raw!postcss'
},
salutări
Răspunsul #2
Soluția mea actuală pentru WebPack 2 cu Angular 2 pentru loader-ul css sau scss;
{
test: /\.css$/,
loader: [
ExtractTextPlugin.extract({ fallbackLoader: "style-loader", loader: 'css-loader' }),
'to-string-loader',
'css-loader'
],
exclude: [helpers.root('Content')],
include: [helpers.root('App')]
},
{
test: /\.scss$/,
loader: [ExtractTextPlugin.extract({ fallbackLoader: 'style-loader', loader: ['css-loader'] }),
'to-string-loader',
'css-loader',
'sass-loader'
],
exclude: [helpers.root('Content')],
include: [helpers.root('App')]
},
Module complementare :
new ExtractTextPlugin({ filename: "[name].css" }),
Și acum poți folosi următoarele în componenta ta
@Component({
selector: 'logmonitor',
styleUrls: ['./logmonitor.component.scss', './logmonitor.component.css'],
templateUrl: './logmonitor.component.html'
})
Dependențele mele Dev actuale sunt:
"devDependencies": {
"@types/node": "6.0.51",
"angular2-template-loader": "0.6.0",
"awesome-typescript-loader": "2.2.4",
"css-loader": "0.26.1",
"css-to-string-loader": "0.1.2",
"file-loader": "0.9.0",
"url-loader": "0.5.7",
"html-loader": "0.4.4",
"svg-url-loader": "1.1.0",
"less": "2.7.1",
"less-loader": "2.2.3",
"node-sass": "3.13.0",
"sass-loader": "4.0.2",
"style-loader": "0.13.1",
"raw-loader": "0.5.1",
"to-string-loader": "1.1.5",
"clean-webpack-plugin": "0.1.4",
"extract-text-webpack-plugin": "2.0.0-beta.4",
"html-webpack-plugin": "2.21.0",
"webpack-notifier": "1.4.1",
"webpack": "2.1.0-beta.27",
"webpack-dev-middleware": "1.8.4",
"webpack-dev-server": "2.1.0-beta.12",
"webpack-md5-hash": "0.0.5",
"webpack-merge": "0.17.0",
"typescript": "2.0.10",
"typings": "2.0.0"
}
Actualizare pentru Webpack 2.2.1 și extract-text-webpack-plugin 2.0.0-rc.3 aici soluția de mai sus nu mai funcționează.
dependințe de dezvoltare suplimentare
"extract-text-webpack-plugin": "2.0.0-rc.3",
"postcss-loader": "1.3.0",
"postcss-import": "9.1.0",
"autoprefixer": "6.7.2",
"webpack": "2.2.1",
trebuie să adaugi un fișier postcss.config.js în rădăcina aplicației tale cu conținutul
module.exports = {
plugins: [
require('postcss-import')(),
require('autoprefixer')()
]
};
și regula nouă pentru scss este următoarea
{
test: /\.scss$/,
loader: [
{ loader: 'raw-loader' },
{ loader: 'sass-loader', query: { sourceMaps: true } },
{ loader: 'postcss-loader' }
],
exclude: [helpers.root('Content')],
include: [helpers.root('App')]
}
