Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带有动态查询的网页包加载器_Javascript_Webpack - Fatal编程技术网

Javascript 带有动态查询的网页包加载器

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

我在我的网页包配置中为SVG文件设置了一个网页包加载器,看起来像这样

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并指向这些目录。

有两种方法:

  • 在两个单独的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

  • 有两种方法:

  • 在两个单独的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

  • 我有完全相同的问题。除了我需要检查svg文件名和它的添加。有可能这样做吗?测试:/.*multicolor\.svg$/??@palyxk如果您需要更复杂、易于理解的测试,请使用函数。这比复杂的regexp要容易维护得多。实际上,使用exclude是正确的想法,我刚刚在paths中遇到了混乱,我也有完全相同的问题。除了我需要检查svg文件名和它的添加。有可能这样做吗?测试:/.*multicolor\.svg$/??@palyxk如果您需要更复杂、易于理解的测试,请使用函数。这比复杂的regexp更容易维护。实际上,使用exclude是正确的想法,我只是在路径中有混乱