Webpack Web包-在SASS/SCSS'中替换字符串@导入&x27;声明
目前正在为4个相同的站点优化一个共享网页包构建,其中样式仅因SASS中特定于站点的变量重写而不同,我正在寻找一种方法,在运行Webpack Web包-在SASS/SCSS'中替换字符串@导入&x27;声明,webpack,sass,Webpack,Sass,目前正在为4个相同的站点优化一个共享网页包构建,其中样式仅因SASS中特定于站点的变量重写而不同,我正在寻找一种方法,在运行SASS加载程序或css加载程序和SASS编译器之前,动态替换SASS文件顶部的@import引用跑步 例如,像text input.scss这样的组件可能具有以下结构: @import '../../styles/global/_variables.scss'; @import '../../styles/<<<SITENAME>>>/
SASS加载程序
或css加载程序
和SASS编译器之前,动态替换SASS文件顶部的@import
引用跑步
例如,像text input.scss
这样的组件可能具有以下结构:
@import '../../styles/global/_variables.scss';
@import '../../styles/<<<SITENAME>>>/_variables.scss';
.some-class {
...
}
结果是,在运行sass加载程序时,sass编译器会看到字符串替换文件,如下所示:
@import '../../styles/global/_variables.scss';
@import '../../styles/site1/_variables.scss';
.some-class {
...
}
我尝试了string replace loader
,但在SASS编译器尝试解析所有文件名之前,无法让它运行并执行替换,考虑到webpack的模块解析工作方式,这很有意义
是否有一个插件或加载程序可以解决这个问题,从网页包
谢谢我终于想出了处理这个问题的“webpack方法”创建一个别名
使用上面的示例,从上面执行命令:
webpack env.sitename=site1 --progress --config ./wp.config.js
我在我的网页配置中创建了一个名为siteStyles
的别名:
{
...
resolve: {
alias: {
...
siteStyles: path.join(ROOT_DIR, `path/to/${env.sitename}/scss`)
}
}
...
}
*注意:ROOT\u DIR
是表示项目根的变量
有了别名,我们现在可以利用SCSS/SASS的路径解析功能,在我们的SCSS/SASS文件中使用波浪线(~
),如下所示:
@import~siteStyles/component/foo代码>
导入将解析为根目录/path/to/site1/scss/component
目录中的foo.scss
通过Web包别名、SASS/SCSS的~
功能和绝对文件系统路径的组合,我能够在构建过程中解析正确的站点特定样式。您是否设法解决了这个问题?如果是这样,你能发布你的答案吗?@vanomart刚刚发布了我的解决方案。对耽搁表示歉意
{
...
resolve: {
alias: {
...
siteStyles: path.join(ROOT_DIR, `path/to/${env.sitename}/scss`)
}
}
...
}