如何在 webpack 中设置 file-loader 的特定前缀?
How to set the specific prefix for file-loader in webpack?
我有 sass 个字体的文件:
$icons-font-path: "~material-design-icons/iconfont/";
@font-face {
font-family: 'Material Icons';
font-style: normal;
font-weight: 400;
src: local('Material Icons'), local('MaterialIcons-Regular'), url(#{$icons-font-path}/MaterialIcons-Regular.woff2) format('woff2');
}
以及将字体下载到特定目录的文件加载器 (/home/user/project/example/src/static/fonts/
):
{
test: /\.(woff|woff2|eot|ttf)$/,
loader: 'file',
query: {
name: path.join(STATIC_PATH, 'fonts', '/[name]-[hash].[ext]')
}
},
它对我来说工作正常,但 css 在 url
中有相同的路径,例如:
@font-face {
font-family: 'Material Icons';
font-style: normal;
font-weight: 400;
src: local('Material Icons'), local('MaterialIcons-Regular'), url(/home/user/project/example/src/static/fonts/MaterialIcons-Regular.woff2) format('woff2');
}
如何将 woff2
复制到特定目录并为 url(prefix/MaterialIcons-Regular.woff2)
设置特定前缀?
您可能想要使用 sass-loader and the resolve-url-loader 的某种组合。
您的 webpack 加载器配置将如下所示:
module.exports = {
module: {
loaders: [
{
test : /\.scss$/,
loaders: ['style', 'css', 'resolve-url', 'sass?sourceMap']
}
]
},
resolveUrlLoader: {
absolute: '/prefix'
}
};
resolve-url-loader 将允许您指定相对于 .sass
文件的字体 url()
。 .css
应该有一个 Webpack 可以解析为模块的路径 url。
关键是让 Webpack 找到您在 url()
语句中指定的所有资产。到那时 resolve-url-loader 就完成了。永远不需要 absolute
选项,因为您应该始终设置 Webpack 以查找所有 "modules",包括资产。
默认情况下(我不是 Webpack 专家)所有 css 和资产都被复制到输出并且正确的相对路径被重写到 css url()
声明。
我认为你的问题的症结类似于 CDN 部署,你需要一些绝对前缀。如果是这种情况,请查看 public path 属性。我自己没有使用过它,但它似乎是相关的。
我有 sass 个字体的文件:
$icons-font-path: "~material-design-icons/iconfont/";
@font-face {
font-family: 'Material Icons';
font-style: normal;
font-weight: 400;
src: local('Material Icons'), local('MaterialIcons-Regular'), url(#{$icons-font-path}/MaterialIcons-Regular.woff2) format('woff2');
}
以及将字体下载到特定目录的文件加载器 (/home/user/project/example/src/static/fonts/
):
{
test: /\.(woff|woff2|eot|ttf)$/,
loader: 'file',
query: {
name: path.join(STATIC_PATH, 'fonts', '/[name]-[hash].[ext]')
}
},
它对我来说工作正常,但 css 在 url
中有相同的路径,例如:
@font-face {
font-family: 'Material Icons';
font-style: normal;
font-weight: 400;
src: local('Material Icons'), local('MaterialIcons-Regular'), url(/home/user/project/example/src/static/fonts/MaterialIcons-Regular.woff2) format('woff2');
}
如何将 woff2
复制到特定目录并为 url(prefix/MaterialIcons-Regular.woff2)
设置特定前缀?
您可能想要使用 sass-loader and the resolve-url-loader 的某种组合。
您的 webpack 加载器配置将如下所示:
module.exports = {
module: {
loaders: [
{
test : /\.scss$/,
loaders: ['style', 'css', 'resolve-url', 'sass?sourceMap']
}
]
},
resolveUrlLoader: {
absolute: '/prefix'
}
};
resolve-url-loader 将允许您指定相对于 .sass
文件的字体 url()
。 .css
应该有一个 Webpack 可以解析为模块的路径 url。
关键是让 Webpack 找到您在 url()
语句中指定的所有资产。到那时 resolve-url-loader 就完成了。永远不需要 absolute
选项,因为您应该始终设置 Webpack 以查找所有 "modules",包括资产。
默认情况下(我不是 Webpack 专家)所有 css 和资产都被复制到输出并且正确的相对路径被重写到 css url()
声明。
我认为你的问题的症结类似于 CDN 部署,你需要一些绝对前缀。如果是这种情况,请查看 public path 属性。我自己没有使用过它,但它似乎是相关的。