Webpack 2.2.1, 각도 2.4.7.Webpack 2 : SASS 테마, 각도
나는 SASS를 사용하여 여러 테마를 가지고 있지만 각 테마에 대해 개별 CSS 파일을 만들도록 Webpack을 얻을 수없는 사이트를 만들고 있습니다. ExtractTextPlugin은 각 엔트리 포인트에 대해 별도의 CSS 파일을 만들지 만 필요한 특정 테마가 아닌 약속을 보여줍니다. 각 ThemeX.scss를 /themes/ThemeX.css와 같은 것으로 출력 할 수있는 방법이 있습니까? 테마의 이름은 다르게되어 있지만, 간결하게하기 위해 ThemeA.css와 같은 이름을 사용하고 있습니다. 그들은 실제로 Sales.css, Engineers.css, 것 등을 테마
예 디렉토리 구조는 다음과 같습니다
src/assets/styles/themes/ThemeA/ThemeA.scss
src/assets/styles/themes/ThemeB/ThemeB.scss
웹팩 설정
const extractThemePlugin = new ExtractTextPlugin("themes/[name].css");
{
test: /\.scss$/,
include: helpers.root('src/assets/styles/themes'),
use: extractThemePlugin.extract({
fallback: "style-loader",
use: ["css-loader", "sass-loader"]
})
}
plugins: [ extractThemePlugin, ...and others ]
것들 시도했습니다.
1 : 진입 점으로 ThemeX.scss 파일의 각 설정 :
개별 파일을 생성하지만 그들 각각의 ThemeA.css, ThemeB 때문에, 다른 사본입니다entry: {
'main': './src/main.browser.ts',
'themeA': helpers.root('src/assets/styles/themes/themeA/themeA.scss'),
'themeB': helpers.root('src/assets/styles/themes/themeB/themeB.scss')
}
. css와 ThemeC.css 모두 ThemeA.css의 내용을 포함합니다.
2 : 루트 app.module.ts에서 각 테마 가져 오기. 이것은 단지 파일들을 하나의 CSS 파일로 묶어줍니다.
3 : 각 테마에 대해 ExtractTextPlugin 인스턴스를 만듭니다. 또한 # 1과 비슷한 내용으로 중복 된 파일을 만듭니다. 그런 다음
let extractTheme1 = new ExtractTextPlugin('theme1.css');
let extractTheme2 = new ExtractTextPlugin('theme2.css');
:
먼저 웹팩 설정의 상단에 이것을 넣어 :
const extractThemeAPlugin = new ExtractTextPlugin("themes/themeA.css");
const extractThemeBPlugin = new ExtractTextPlugin("themes/themeB.css");
그게 올바른 길로 나를 잡았습니다. 제외 항목 (테마가 5 개 이상이기 때문에 악몽이었을 수도 있음) 대신 각 테마와 일치하는 테스트를 설정했습니다. 그런 다음 HtmlWebpackExcludeAssetsPlugin을 포함시켜 HtmlWebpackPlugin이 각 테마에 대한 링크 요소를 만들지 않도록해야했습니다. –