【问题标题】:Modify output of localIdentName / getLocalIdent修改 localIdentName / getLocalIdent 的输出
【发布时间】:2019-07-07 20:30:29
【问题描述】:

我正在开发一个小部件,它可以嵌入“任何”网站并使用 css-loader 为我的 CSS 类提供唯一名称以避免冲突。

在我的 webpack.config.js 我有以下行:

localIdentName: 'productname-[folder]-[local]',

这会输出如下类名:

  • productname-src-widgetbox
  • 产品名称-侧边栏-侧边栏

是否可以从类名中删除所有“-src”并将所有内容小写?

我找到了一个解决方案,我只是复制了整个原始 getLocalIdent() 并添加了 replace() 和 toLowerCase() 方法。但这不是一个好的解决方案,我认为:

const getLocalIdent = (loaderContext, localIdentName, localName, options) => {

  if (!options.context) {
    options.context = loaderContext.rootContext;
  }

  const request = path
    .relative(options.context, loaderContext.resourcePath)
    .replace(/\\/g, '/');

  options.content = `${options.hashPrefix + request}+${localName}`;

  localIdentName = localIdentName.replace(/\[local\]/gi, localName);

  const hash = loaderUtils.interpolateName(
    loaderContext,
    localIdentName,
    options
  );

  return hash
    .replace(new RegExp('[^a-zA-Z0-9\\-_\u00A0-\uFFFF]', 'g'), '-')
    .replace(/^((-?[0-9])|--)/, '_$1')
    .replace("-src", "").toLowerCase();
};

【问题讨论】:

    标签: reactjs webpack webpack-style-loader css-loader


    【解决方案1】:

    According to the docs for css-loader,您应该可以使用getLocalIdent 创建您自己的自定义类名。

    这样的事情可能会做你正在寻找的东西

    getLocalIdent: (context, localIdentName, localName, options) => {
      return localIdentName.replace("-src", "").toLowerCase();
    },
    

    如果你想要一些灵感,check out the default implementation of getLocalIdent.

    【讨论】:

    • 嗨!谢谢!但我已经试过了......不幸的是,我所有的课程现在都被称为 productname-[folder]-[local]。
    • 它们可以相互结合使用。例如,您可以同时指定localIdentNamegetLocalIdent,其中localIdentName 是您上面的名称,然后使用getLocalIdent 函数修改该名称。如果这不起作用,请尝试从 getLocalIdent 注销 options 以查看您有哪些选项,并尝试生成您喜欢的字符串。
    猜你喜欢
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2022-08-11
    • 2021-04-04
    • 1970-01-01
    相关资源
    最近更新 更多