如何在生产中的 Sass 文件的 url 背景中添加子文件夹?
how can I add an subfolder in the url background in the Sass files in production?
在 NextJS 的开发模式下,我的 SASS 文件中的路径如下例所示:
background-image: url(/images/bg-header.png) !important;
但在生产模式下,我会将网站上传到域的子文件夹,例如:
www.domain.com/subfolder/
我需要这样构建:
background-image: url(/subfolder/images/bg-header.png) !important;
如何获取?
另外,我在我的配置文件中使用了 withCSS
和 withSass
,我尝试了几个 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: {}
}
};
在 NextJS 的开发模式下,我的 SASS 文件中的路径如下例所示:
background-image: url(/images/bg-header.png) !important;
但在生产模式下,我会将网站上传到域的子文件夹,例如:
www.domain.com/subfolder/
我需要这样构建:
background-image: url(/subfolder/images/bg-header.png) !important;
如何获取?
另外,我在我的配置文件中使用了 withCSS
和 withSass
,我尝试了几个 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: {}
}
};