Css 网页包:有没有办法在处理之前替换导入的文件路径?
设置:react、网页包、常规css和样式加载器,没有什么特别之处 我希望能够在构建步骤中替换导入的文件。就像我用envCss 网页包:有没有办法在处理之前替换导入的文件路径?,css,webpack,Css,Webpack,设置:react、网页包、常规css和样式加载器,没有什么特别之处 我希望能够在构建步骤中替换导入的文件。就像我用env和_THEME=true构建应用一样用另一个不同名称的css文件替换一个css文件 例如,我有两个css文件,style.css和style.theme.css,在react组件中,我只导入一个像这样的文件import./style.css'(我不想更改这一行,我知道如果这里有env var,我可以设置条件) 因此,如果我用和_THEME=true启动webpack,我希望它实
和_THEME=true构建应用一样
用另一个不同名称的css文件替换一个css文件
例如,我有两个css文件,style.css
和style.theme.css
,在react组件中,我只导入一个像这样的文件import./style.css'
(我不想更改这一行,我知道如果这里有env var,我可以设置条件)
因此,如果我用和_THEME=true
启动webpack,我希望它实际导入style.THEME.css
,而不是常规的style.css
,,但前提是style.THEME.css
存在
我提出了这个解决方案,它是装载机的测试条件:
// ...
test: filePath => {
if (!/\.(s*)css$/.test(path.extname(filePath))) {
return false;
}
const { dir, name, ext } = path.parse(filePath);
const themeFilePath = `${dir}/${name}.theme${ext}`;
if (WITH_THEME && fs.existsSync(themeFilePath)) {
return false;
} else {
return true;
}
},
// ...
但是用这种方法,我需要在组件中导入style.css
和style.theme.css
,这样webpack就可以排除其中一个。有更好的方法吗?也许有一些后css解决方案?我最终得到的是:
我为主题配置
文件制作了网页包别名,我在每个css
文件(@import'~scss config';
)中导入该文件
它允许有多个主题文件,但您只需要导入一个配置文件,在构建步骤中将其替换为所需的主题文件
resolve: {
// ...
alias: {
'scss-config': path.resolve(
__dirname,
`./src/styles/config-${env.THEME || 'default'}.scss`
)
}
},