我目前正在开发一个使用不同前端主题的应用程序。这些主题只是用户可以选择的 CSS 文件。
从技术上讲,这些主题是 .scss 文件,它们由 webpack 编译并通过 angular 中的标准链接标签加载:
<link rel="stylesheet", ng-href="themes/{{theme}}.css">
我剥离的 webpack 配置如下所示:
theme1CssExtractor = new ExtractTextPlugin('themes/theme-1.css'),
theme2CssExtractor = new ExtractTextPlugin('themes/theme-2.css'),
module.exports = new WebpackConfig().merge({
entry: {
app: [
'./app/main.ts',
'./assets/sass/themes/theme-1.scss',
'./assets/sass/themes/theme-2.scss'
],
},
output: {
path: "build/",
filename: "[name].bundle.js",
publicPath: "/build/"
},
plugins: [
theme1CssExtractor,
theme2CssExtractor,
],
module: {
loaders: [
{
test: /\.ts$/,
loaders: ['awesome-typescript-loader']
},
[
{
test: /theme-1\.scss$/,
include: path.resolve(__dirname, "assets/sass/themes"),
loader: theme1CssExtractor.extract(
"style",
"css!sass?includePaths[]=" + path.resolve(__dirname, './node_modules/compass-mixins/lib')
)
},
{
test: /theme-2\.scss$/,
include: path.resolve(__dirname, "assets/sass/themes"),
loader: theme2CssExtractor.extract(
"style",
"css!sass?includePaths[]=" + path.resolve(__dirname, './node_modules/compass-mixins/lib')
)
}
]
]
}
在我想使用启用了热模块替换 (HMR) 功能的 webpack-dev-server 之前,这完全可以正常工作,因为 extractTextPlugin 不支持 HMR。当我简单地禁用 extractTextPlugin (options.disable) 或删除它们时,所有主题都会编译到主模块中,这 - 当然 - 会破坏主题,因为所有主题都被一起应用。
如何在不使用 extractTextPlugin 的情况下直接使用 webpack 生成这些 CSS 文件?我尝试了不同的条目/块、文件加载器等各种尝试,但没有任何效果。
它应该很简单:从 SCSS-Files 生成静态 CSS-Files,而不使用 ExtractTextPlugin 将它们转换为 JS-Files。
如果有人能指出我正确的方向,那就太好了。