webpack - 如何在生产中的 Sass 文件的 url 背景中添加子文件夹?
问题描述
在NextJS的开发模式下,我的SASS文件中有以下示例中的路径:
background-image: url(/images/bg-header.png) !important;
但在生产模式下,我会将网站上传到域的子文件夹中,例如:
www.domain.com/subfolder/
我需要它像这样构建:
background-image: url(/subfolder/images/bg-header.png) !important;
我怎么才能得到它?
另外我正在使用withCSS
andwithSass
在我的配置文件中,我尝试了几个next.config.js
,但没有任何效果。
const config = {
....
webpack: (config, options) => {
// config.resolve.alias["@assets"] = '/subfolder/';
config.plugins.push(
new MiniCssExtractPlugin({
filename: 'static/css/[name].css',
chunkFilename: 'static/css/[name].chunk.css',
publicPath: '/subfolder/'
})
);
return config
},
};
module.exports = withSass(withCss(config));
我也试过这个,它也不起作用。
config.module.rules.push({
test: /\.(png|jpg|gif|svg|ico)$/,
use: [
{
loader: "url-loader",
options: {
limit: 8192,
fallback: "file-loader",
publicPath: "/subfolder/",
outputPath: "/subfolder/",
name: "/subfolder/[name].[ext]"
}
}
]
});
解决方案
感谢@grzegorz-t 评论我已经能够解决它,我把解决方案放在这里。
npm install postcss-url --save-dev
postcss.config.js
const isProd = process.env.NODE_ENV === 'production';
const subFolder = isProd ? '/subfolder' : '';
module.exports = {
plugins: {
'postcss-url': {
url: (asset) => {
if (asset.url[0] === '/'){
return subFolder+asset.url
}
return asset.url;
}
},
autoprefixer: {}
}
};
推荐阅读
- php - 在php中更改上传目录时出错
- c++ - 在 boost::multi_array 中跨维度执行操作?
- excel - 在公式 VBA 中使用活动单元格值和地址
- sql - 如何选择最早日期的不同事物
- mysql - Axios GET 请求在 IOS 设备上不起作用
- c++ - 优化:我可以避免在这个循环中动态分配向量吗?
- android - Kotlin:Desirealize 一个看起来像数组但在形状上不是数组的 Json 对象
- shopify - 在装箱单中显示价格 - Shopify
- r - Shiny - 下载 DT 表而不下载操作按钮
- javascript - 在 jimp 中创建一个新图像并保存为具有自定义调色板和位深度的位图