我正在配置Webpack在一个现有的项目,我是避免改变项目结构。在scss文件中,我包含了以/(例如url(‘/fonts/mem.woff 2’)开头的文件,我相信这就是我问题的原因。
styles.scss
@font-face {
font-family: 'MyFont';
src: url('/fonts/mem.woff2') format('woff2'),
url('/fonts/slick.woff') format('woff');
font-weight: 600;
font-style: normal;
}而错误是:
错误:无法解析‘/字体/mem.woff2’中的‘D:\Programming\Demos\webpack-紧凑\src’在(D:\Programming\Demos\webpack-compact\node_modules\enhanced-resolve\lib\Resolver.js:293:18) at D:\Programming\Demos\webpack-compact\node_modules\enhanced-resolve\lib\Resolver.js:362:15 at D:\Programming\Demos\webpack-compact\node_modules\enhanced-resolve\lib\Resolver.js:410‘:5在#en2# (eval at create (D:\Programming\Demos\webpack-compact\node_modules\enhanced-resolve\node_modules\tapable\lib\Hoo at D:\Programming\Demos\webpack-compact\node_modules\enhanced-resolve\lib\Resolver.js:410:5 at eval )\ D:\Programming\Demos\webpack-compact\node_modules\enhanced-resolve\lib\Resolver.j处的lib\Descriptio(在D:\Programming\Demos\webpack-compact\node_modules\enhanced-resolve\lib\Resolver.j上创建(D:\Programming\Demos\webpack-compact\node_modules\enhanced- )
我的webpack档案如下所示:
module.exports = env => {
const isDev = env.NODE_ENV == 'dev';
return {
target: 'web',
mode: 'development',
devtool: 'inline-source-map',
entry: {
index: path.resolve(__dirname, "src", "index.js")
},
output: {
filename: '[name].js',
path: path.resolve(__dirname, 'dist'),
},
devServer: {
contentBase: path.resolve(__dirname, 'dist'),
port: '8080',
host: 'localhost',
hot: true,
open: true,
inline: true
},
plugins: [
new CleanWebpackPlugin(),
new HtmlWebpackPlugin({
title: 'Development',
template: path.resolve(__dirname, "src", "index.html"),
filename: 'index.html',
})
],
module:{
rules: [
{
test: /\.(woff|woff2|eot|ttf|otf)$/,
loader: 'file-loader',
options: {
name: '[name].[ext]',
outputPath: 'fonts/',
},
}
...我知道如果我用./将字体路径更改为./它将有效。我的问题是,是否可以只更改webpack的配置,而不是转到所有scss文件并更改url上的路径(‘/fonts/mem.woff2’)?
发布于 2021-01-17 11:57:22
我相信用webpack.NormalModuleReplacementPlugin是可能的。
下面是你能做到的方法:
plugins: [
//…
new webpack.NormalModuleReplacementPlugin(
/^\/fonts\/mem\.woff2/,
function (resource) {
resource.request = resource.request.replace(/^\//, './');
}
)
]由于示例中有两种字体,所以可以应用另一个webpack.NormalModuleReplacementPlugin插件。
https://stackoverflow.com/questions/65760110
复制相似问题