代码之家  ›  专栏  ›  技术社区  ›  Jim Buck

ExtractTextWebPackagePlugin始终输出文件,即使没有任何更改

  •  2
  • Jim Buck  · 技术社区  · 7 年前

    如何绑定CSS,但仅当CSS文件发生更改时?

    从我的网页包配置中提取:

    {
        test: /\.css$/,
        use: ExtractTextPlugin.extract({
            use: 'css-loader'
        })
    },
    

    ...

    plugins: [
        new ExtractTextPlugin(isDebug ? '[name].css' : '[name].[chunkhash].css')
    ],
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Tripurari Shankar    7 年前

    无论何时 ExtractTextPlugin 看到一个 import 带有的声明 css css 文件 它是否发生变化

    如果您使用它进行调试,则使用 style-loader HMR(Hot Module Replacement) 为了更好的体验

     isDebug
            ? {
                test: /\.css$/,
                use: ["style-loader", "css-loader"]
              }
            : {
                test: /\.css$/,
                use: ExtractTextPlugin.extract({
                  use: "css-loader"
                })
              }
    

    ExtractTextPlugin 构建css文件,并使用 然后无论如何你必须移除 css 文件

    function object

    //webpack.config.js
    
    module.exports = function(env) {
      return {
          entry: {
            main: env.includeCss 
                                 ? 
                                   ["./src/index.js", "./src/main.css"]  //build with css
                                 : ["./src/index.js"] //build without css
          },
          .
          .
          .
          .
      }
    }
    

    您可以传递env。通过如下命令参数包含

    webpack --config ./webpack.config.prod.js --env.includeCss
    //notice --env.includeCss witch will set env.includeCss as true
    

    与一起运行 --env.includeCss 正常和无 --环境。包括 当你不想编译css文件时

        2
  •  1
  •   Tomasz Mularczyk    7 年前

    [chunkhash] 用于提取的CSS。这将使您的css名称更改,即使您没有更改css文件中的内容。

    改用[contenthash]。

    https://survivejs.com/webpack/optimizing/adding-hashes-to-filenames/#setting-up-hashing

    如果您使用的是ExtractTextPlugin,那么应该使用[contenthash]。这样,生成的资产只有在其内容发生更改时才会失效。