热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

cssloader往CSS中添加了,但是html中没有添加对应的hash,导致两者对应不上

问题出现的环境背景及自己尝试过哪些方法

问题出现的环境背景及自己尝试过哪些方法

1
2
目前在整理自己的学习目录时碰到一个问题:使用css-loader中localIdentName: [name]__[local]--[hash:base64:5]为样式添加hash等,最后添加成功了,但是HTML模版里的却没有添加成功。只能使用[local]了。

也使用了HtmlWebpackPlugin,但是无效

图片描述

相关代码

webpack.base.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
const path = require('path');

const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin')



module.exports = {

  context: path.resolve(__dirname, '../../'),

  output: {

    publicPath: './',

    path: path.resolve(__dirname, '../../dist'), // 打包后的文件存放的地方

    filename: '[name].[hash:8].js'// 打包后输出文件的文件名

  },

  resolve: {

    extensions: ['.js', '.vue', '.json'],

    alias: {

      vue$: 'vue/dist/vue.esm.js',

      '@': path.resolve('src')

    }

  },

  module: {

    rules: [

      {

        test: /(\.html|\.xml)$/,

        use: [

          {

            loader: 'html-loader',

          }

        ],

        exclude: /node_modules/

      },

      {

        test: /(\.jsx|\.js)$/,

        use: {

          loader: 'babel-loader',

          options: {

            presets: [

              'env',

              'react'

            ]

          }

        },

        exclude: /node_modules/

      },

      {

        test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,

        loader: 'url-loader',

        options: {

          limit: 10000,

          name: "[name].[hash:7].[ext]",

          publicPath: "./images/", // 打包后CSS引入的基础路径

          outputPath: "images/" // 打包后输出目录

        }

      },

      {

        test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,

        loader: 'url-loader',

        options: {

          limit: 10000,

          name: 'media/[name].[hash:7].[ext]'

        }

      },

      {

        test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,

        loader: 'url-loader',

        options: {

          limit: 10000,

          name: 'fonts/[name].[hash:7].[ext]'

        }

      }

    ]

  },

  plugins: [

    new OptimizeCSSAssetsPlugin({}),

  ],

};

webpack.pro.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
const webpack = require('webpack');

const program = require('commander');

const HtmlWebpackPlugin = require('html-webpack-plugin');

const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin');

const CleanWebpackPlugin = require('clean-webpack-plugin');

const path = require('path');

const baseCOnfig= require('../config/webpack.base.config');

const merge = require('webpack-merge');

const ora = require('ora');

const MiniCssExtractPlugin = require("mini-css-extract-plugin");



const spinner = ora({

  spinner: {

    frames:['←','↑','→','↓'],

    interval: 80,

  },

  color: 'red',

  text: 'Loading...',

});



program

  .command('project [file]')

  .action((project, file) => {

    const entry = path.resolve(__dirname, '../../', 'projects', project, file, 'main.js');

    const inlineCOnfig= merge(baseConfig, {

      entry: function setEntry() {

        return entry; // 入口文件

      },

      mode: 'production',

      module: {

        rules: [

          {

            test: /\.(sa|sc|c)ss$/,

            use: [

              {

                loader: "style-loader"

              },

              {

                loader: MiniCssExtractPlugin.loader,

              },

              {

                loader: "css-loader",

                options: {

                  modules: true, // 指定使用CSS modules

                  localIdentName: '[name]__[local]--[hash:base64:5]' // 指定css的类名格式

                }

              },

              {

                loader: "postcss-loader",

                options: {           // 如果没有options这个选项将会报错 No PostCSS Config found

                  config: {

                    path: './'

                  }

              }

              }

            ]

          }

        ]

      },

      plugins: [

        new MiniCssExtractPlugin({

          filename: "[name].[chunkhash:8].css",

          chunkFilename: "[id].css"

        }),

        new HtmlWebpackPlugin({

          template: path.resolve(__dirname,'../../', 'projects', project, file, 'index.html'),// template

          minify: {

              removeAttributeQuotes:true

            },

            hash: true,

            filename:'index.html'

        }),

        new FriendlyErrorsPlugin({

          compilationSuccessInfo: {

            messages: ['Your application build successed\n'],

          },

        }),

        new CleanWebpackPlugin('../../dist', {

          root: __dirname,

          verbose: true,

          dry: false

        })

      ],

    });

    spinner.start();

    webpack(inlineConfig, (err, stats) => {

      spinner.stop();

      if (err) {

        console.log(err);

      }

      console.log('build successed');

    });

  });



program.parse(process.argv);

webpack.dev.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
const webpack = require('webpack');

const program = require('commander');

const HtmlWebpackPlugin = require('html-webpack-plugin');

const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin');

const path = require('path');

const baseCOnfig= require('../config/webpack.base.config');

const serverCOnfig= require('../server/devServer');

const merge = require('webpack-merge');

const webpackDevMiddleware = require('webpack-dev-middleware');

const webpackHotMiddleware = require('webpack-hot-middleware');

const express = require('express');

const opn = require('opn');



const app = express();



let entry;



program

  .command('project [file]')

  .action((project, file) => {

    entry = path.resolve(__dirname, '../../', 'projects', project, file, 'main.js');

    const inlineCOnfig= merge(baseConfig, {

      entry: function setEntry() {

        return [entry, 'webpack-hot-middleware/client?reload=true']; // 入口文件

      },

      mode: 'development',

      devtool: 'source-map',

      devServer: serverConfig,

      module: {

        rules: [

          {

            test: /\.(sa|sc|c)ss$/,

            use: [

              {

                loader: "style-loader"

              },

              {

                loader: "css-loader",

                options: {

                  modules: true, // 指定使用CSS modules

                  localIdentName: '[name]__[local]--[hash:base64:5]' // 指定css的类名格式

                }

              },

              {

                loader: "postcss-loader",

                options: {           // 如果没有options这个选项将会报错 No PostCSS Config found

                  config: {

                    path: './'

                  }

              }

              }

            ]

          }

        ]

      },

      plugins: [

        new webpack.HotModuleReplacementPlugin(),

        new FriendlyErrorsPlugin({

          compilationSuccessInfo: {

            messages: [`Your application is running: http://${serverConfig.host}:${serverConfig.port}\n`],

          },

        }),

        new HtmlWebpackPlugin({

          template: path.resolve(__dirname,'../../', 'projects', project, file, 'index.html')// template

        }),

      ],

    });

    const compiler = webpack(inlineConfig);



    app.use(webpackDevMiddleware(compiler, {

      logLevel: 'error',

      progress: true,

      logTime: true,

    }));

    app.use(webpackHotMiddleware(compiler, {

      noInfo: true,

      log: false,

      heartbeat: 2000,

    }));

    app.listen(3000);

    // opn('http://localhost:3000');

  });



program.parse(process.argv);



推荐阅读
  • 手动将 Webpack 2.x 迁移到最新版 Webpack 4.8.3(当前 GitHub 最新版本)
    手动webpack2.x升级到webpack4.8.3(当前github最新版本)一直使用的webpack是2.3.3版本作为生产环境使用,看了react-create- ... [详细]
  • 本文探讨了Android系统中支持的图像格式及其在不同版本中的兼容性问题,重点涵盖了存储、HTTP传输、相机功能以及SparseArray的应用。文章详细分析了从Android 10 (API 29) 到Android 11 的存储规范变化,并讨论了这些变化对图像处理的影响。此外,还介绍了如何通过系统升级和代码优化来解决版本兼容性问题,以确保应用程序在不同Android版本中稳定运行。 ... [详细]
  • Node.js 配置文件管理方法详解与最佳实践
    本文详细介绍了 Node.js 中配置文件管理的方法与最佳实践,涵盖常见的配置文件格式及其优缺点,并提供了多种实用技巧和示例代码,帮助开发者高效地管理和维护项目配置,具有较高的参考价值。 ... [详细]
  • 大家好,我是梅巴哥er。本文将深入探讨Redux框架中的第三个实战案例,具体实现每两秒自动点击按钮以触发颜色变化的功能。该案例中,一个关键点在于是否需要使用异步操作来处理定时任务,我们将详细分析其必要性和实现方式。通过这一实例,读者可以更好地理解Redux在实际项目中的应用及其异步处理机制。 ... [详细]
  • 深入解析 Django 中用户模型的自定义方法与技巧 ... [详细]
  • 深入解析JWT的实现与应用
    本文深入探讨了JSON Web Token (JWT) 的实现机制及其应用场景。JWT 是一种基于 RFC 7519 标准的开放性认证协议,用于在各方之间安全地传输信息。文章详细分析了 JWT 的结构、生成和验证过程,并讨论了其在现代 Web 应用中的实际应用案例,为开发者提供了全面的理解和实践指导。 ... [详细]
  • 本文深入探讨了 Vue.js 中异步组件的应用与优化策略。首先,文章介绍了异步组件的基本概念及其在现代前端开发中的重要性。为了确保最佳实践,建议使用 Webpack 作为模块打包工具,因为 Browserify 默认不支持异步组件的加载。接着,详细解释了异步组件的使用方法,并提供了官方文档的相关链接以供参考。此外,文章还讨论了多种优化技巧,包括代码分割、懒加载和性能调优,以提升应用的整体性能和用户体验。 ... [详细]
  • 深入解析Gradle中的Project核心组件
    在Gradle构建系统中,`Project` 是一个核心组件,扮演着至关重要的角色。通过使用 `./gradlew projects` 命令,可以清晰地列出当前项目结构中包含的所有子项目,这有助于开发者更好地理解和管理复杂的多模块项目。此外,`Project` 对象还提供了丰富的配置选项和生命周期管理功能,使得构建过程更加灵活高效。 ... [详细]
  • 利用Jenkins与SonarQube集成实现高效代码质量检测与优化
    本文探讨了通过在 Jenkins 多分支流水线中集成 SonarQube,实现高效且自动化的代码质量检测与优化方法。该方案不仅提高了开发团队的代码审查效率,还确保了软件项目的持续高质量交付。 ... [详细]
  • Webpack与Babel的配置详解及优化策略深入探讨了这两个工具在现代前端开发中的应用。Babel作为一款强大的JavaScript编译器,能够将最新版的JavaScript代码转换为广泛兼容的版本,从而突破浏览器对ES规范的支持限制,确保开发者可以无缝使用最新的语言特性。本文不仅介绍了如何高效配置Webpack与Babel,还提供了多种优化策略,以提升构建性能和代码质量。 ... [详细]
  • 在 CentOS 7 上部署和配置 RabbitMQ 消息队列系统时,首先需要安装 Erlang,因为 RabbitMQ 是基于 Erlang 语言开发的。具体步骤包括:安装必要的依赖项,下载 Erlang 源码包(可能需要一些时间,请耐心等待),解压源码包,解决可能出现的错误,验证安装是否成功,并将 Erlang 添加到环境变量中。接下来,下载 RabbitMQ 的 tar.xz 压缩包,并进行解压和安装。确保每一步都按顺序执行,以保证系统的稳定性和可靠性。 ... [详细]
  • MySQL索引详解及其优化策略
    本文详细解析了MySQL索引的概念、数据结构及管理方法,并探讨了如何正确使用索引以提升查询性能。文章还深入讲解了联合索引与覆盖索引的应用场景,以及它们在优化数据库性能中的重要作用。此外,通过实例分析,进一步阐述了索引在高读写比系统中的必要性和优势。 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • 本文深入探讨了 hCalendar 微格式在事件与时间、地点相关活动标记中的应用。作为微格式系列文章的第四篇,前文已分别介绍了 rel 属性用于定义链接关系、XFN 微格式增强链接的人际关系描述以及 hCard 微格式对个人和组织信息的描述。本次将重点解析 hCalendar 如何通过结构化数据标记,提高事件信息的可读性和互操作性。 ... [详细]
  • 本文探讨了利用Java实现WebSocket实时消息推送技术的方法。与传统的轮询、长连接或短连接等方案相比,WebSocket提供了一种更为高效和低延迟的双向通信机制。通过建立持久连接,服务器能够主动向客户端推送数据,从而实现真正的实时消息传递。此外,本文还介绍了WebSocket在实际应用中的优势和应用场景,并提供了详细的实现步骤和技术细节。 ... [详细]
author-avatar
小豇豆和花椰菜
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有