Javascript 带有动态查询的网页包加载器
我在我的网页包配置中为SVG文件设置了一个网页包加载器,看起来像这样Javascript 带有动态查询的网页包加载器,javascript,webpack,Javascript,Webpack,我在我的网页包配置中为SVG文件设置了一个网页包加载器,看起来像这样 const SVGO_CONFIG = JSON.stringify({ plugins: [ {removeTitle: true}, ], }); const SVG_LOADER = { test: /\.svg$/, loader: 'babel!svg-react!svgo?' + SVGO_CONFIG, }; 这允许我导入svg文件,就像它们是这样的组件一样 import Icon f
const SVGO_CONFIG = JSON.stringify({
plugins: [
{removeTitle: true},
],
});
const SVG_LOADER = {
test: /\.svg$/,
loader: 'babel!svg-react!svgo?' + SVGO_CONFIG,
};
这允许我导入svg文件,就像它们是这样的组件一样
import Icon from 'src/images/icon.svg';
但在某些情况下,我希望能够告诉svgo加载程序
从文件中剥离fill
和stroke
属性。我可以通过在配置中设置另一个插件来实现这一点
const SVGO_CONFIG = JSON.stringify({
plugins: [
{removeTitle: true},
{removeAttrs: {attrs: "(fill|stroke)"}},
],
});
但这将适用于我导入的所有svg文件。有没有一种简单的方法来标记import语句,以便像这样稍微修改配置
import TransparentIcon from 'src/images/icon.svg?removeFill`;
我的半个解决方案是用一个额外的扩展名保存文件(或保存在另一个文件夹中),但这意味着我无法选择在导入文件时是否剥离属性。为此,您可以使用
include
。例如:
const SVG_LOADER = {
test: /\.svg$/,
loader: 'babel!svg-react!svgo?' + SVGO_CONFIG,
include: [path.join(__dirname, 'svgs/demo.svg', ...]
};
你需要两条像这样的规则。您应该确保它们的
include
不重叠,否则它将同时执行这两个命令。解决此问题的一个简单方法是将SVG按目录拆分并指向这些目录。为此,您可以使用include
。例如:
const SVG_LOADER = {
test: /\.svg$/,
loader: 'babel!svg-react!svgo?' + SVGO_CONFIG,
include: [path.join(__dirname, 'svgs/demo.svg', ...]
};
你需要两条像这样的规则。您应该确保它们的
include
不重叠,否则它将同时执行这两个命令。解决此问题的一个简单方法是按目录拆分SVG并指向这些目录。有两种方法:
test
属性的正则表达式,如下所示:
const SVGO_CONFIG = JSON.stringify({
plugins: [
{removeTitle: true},
],
});
const SVG_LOADER = {
test: /\.svg$/,
loader: 'babel!svg-react!svgo?' + SVGO_CONFIG,
};
const SVGO_CONFIG_REMOVE_FILL = JSON.stringify({
plugins: [
{removeTitle: true},
{removeAttrs: {attrs: "(fill|stroke)"}},
],
});
const SVG_LOADER_REMOVE_FILL = {
test: /\.svg\?removeFill$/,
loader: 'babel!svg-react!svgo?' + SVGO_CONFIG_REMOVE_FILL,
};
module.exports=函数(内容){
返回内容;
};
module.exports.pitch=函数(保留请求、继续请求、数据){
var i;
var len=this.loaders.length;
var装载机;
if(this.resourceQuery==='?removeFill'){
对于(i=0;i
有两种方法:
test
属性的正则表达式,如下所示:
const SVGO_CONFIG = JSON.stringify({
plugins: [
{removeTitle: true},
],
});
const SVG_LOADER = {
test: /\.svg$/,
loader: 'babel!svg-react!svgo?' + SVGO_CONFIG,
};
const SVGO_CONFIG_REMOVE_FILL = JSON.stringify({
plugins: [
{removeTitle: true},
{removeAttrs: {attrs: "(fill|stroke)"}},
],
});
const SVG_LOADER_REMOVE_FILL = {
test: /\.svg\?removeFill$/,
loader: 'babel!svg-react!svgo?' + SVGO_CONFIG_REMOVE_FILL,
};
module.exports=函数(内容){
返回内容;
};
module.exports.pitch=函数(保留请求、继续请求、数据){
var i;
var len=this.loaders.length;
var装载机;
if(this.resourceQuery==='?removeFill'){
对于(i=0;i
我有完全相同的问题。除了我需要检查svg文件名和它的添加。有可能这样做吗?测试:/.*multicolor\.svg$/??@palyxk如果您需要更复杂、易于理解的测试,请使用函数。这比复杂的regexp要容易维护得多。实际上,使用exclude是正确的想法,我刚刚在paths中遇到了混乱,我也有完全相同的问题。除了我需要检查svg文件名和它的添加。有可能这样做吗?测试:/.*multicolor\.svg$/??@palyxk如果您需要更复杂、易于理解的测试,请使用函数。这比复杂的regexp更容易维护。实际上,使用exclude是正确的想法,我只是在路径中有混乱