如何使用 Webpack 删除/取消导入内联 CSS?

Posted

技术标签:

【中文标题】如何使用 Webpack 删除/取消导入内联 CSS?【英文标题】:How to remove/unimport inline CSS with Webpack? 【发布时间】:2017-01-17 07:33:30 【问题描述】:

好的,我已经使用 Webpack style-loadercss-loader 导入了一个 css 文件,如下所示:

import './style.css'

Webpack 通过style 标签将它附加到我的页面。到目前为止,一切都很好。但是,当应用程序的状态发生变化时,我想删除这种特殊的样式。当然,我可以使用document.querySelector('style') 将其删除,但是有一些自然的 Webpack 方式可以做到这一点吗?

提前致谢。

【问题讨论】:

目的是什么?您是否尝试复制 Webpack 开发服务器/中间件的 HMR 功能? 每个 JS 视图都有自己的风格。当我更改视图时,前一个视图的样式仍然附加在 html 中。 @DamjanPavlica 在这种情况下,您可能不需要通用样式加载器。您可以使用css-loader 并在您的视图中添加<style> 标签inside 我不确定在那个级别上与 Webpack 集成是否是个好主意。例如。 Angular 2 starter kit 使用to-string-loader with css-loader 使它们成为内联样式(Angular 2 也使用 shadow DOM 来隔离视图/组件样式)。 psst, meta.***.com/questions/334859/… 【参考方案1】:

使用 style-loader,您可以将一些 css 文件标记为惰性,并在挂载路由时调用 .use(),在卸载路由时调用 .unuse()

React 钩子示例:

import styles from './styles.lazy.css';

export function LegacyRoute() 
  useLayoutEffect(() => 
    styles.use();
    return () =>  styles.unuse() ;
  , []);
  return <p>Hello World</p>;

webpack 配置:

module.exports = 
  module: 
    rules: [
      
        test: /\.css$/i,
        exclude: /\.lazy\.css$/i,
        use: ['style-loader', 'css-loader'],
      ,
      
        test: /\.lazy\.css$/i,
        use: [
           loader: 'style-loader', options:  injectType: 'lazyStyleTag'  ,
          'css-loader',
        ],
      ,
    ],
  ,
;

来源: https://github.com/webpack-contrib/style-loader#lazystyletag

【讨论】:

【参考方案2】:

不是这个问题的确切答案,但如果您正在寻找 create-react-app 解决方案并且无法编辑 webpack.config.json,请查看此答案:https://***.com/a/67352039/5648839

【讨论】:

以上是关于如何使用 Webpack 删除/取消导入内联 CSS?的主要内容,如果未能解决你的问题,请参考以下文章

React:使用 Webpack 在 JSX 中内联 CSS 模块

如何使用 webpack 设置内联 svg

如何使用 Photoshop CS5 绘制一个 Android 矩形图标

如何使用内联 带有webpack的React应用程序中的标签

[webpack] 如何把代码内联进html中?

photoshop cs3里的自动对齐图层功能,如何取消?