热门标签 | 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);



推荐阅读
  • 本文详细介绍了如何在 Vue CLI 3.0 和 2.0 中配置 proxy 来解决开发环境下的跨域问题,包括具体的配置项和使用场景。 ... [详细]
  • 小编给大家分享一下Vue3中如何提高开发效率,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获, ... [详细]
  • 本文详细介绍了如何在 Node.js 环境中利用 Nodemailer 库实现邮件发送功能,包括环境配置、代码实现及常见问题解决方法。 ... [详细]
  • 本打算教一步步实现koa-router,因为要解释的太多了,所以先简化成mini版本,从实现部分功能到阅读源码,希望能让你好理解一些。希望你之前有读过koa源码,没有的话,给你链接 ... [详细]
  • 本文介绍了.hbs文件作为Ember.js项目中的视图层,类似于HTML文件的功能,并详细讲解了如何在Ember.js应用中集成Bootstrap框架及其相关组件的方法。 ... [详细]
  • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • publicclassBindActionextendsActionSupport{privateStringproString;privateStringcitString; ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • 理解浏览器历史记录(2)hashchange、pushState
    阅读目录1.hashchange2.pushState本文也是一篇基础文章。继上文之后,本打算去研究pushState,偶然在一些信息中发现了锚点变 ... [详细]
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • 深入理解:AJAX学习指南
    本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ... [详细]
  • 本文详细记录了腾讯ABS云平台的一次前端开发岗位面试经历,包括面试过程中遇到的JavaScript相关问题、Vue.js等框架的深入探讨以及算法挑战等内容。 ... [详细]
  • 本文介绍了编程语言的基本分类,包括机器语言、汇编语言和高级语言的特点及其优缺点。随后详细讲解了Python解释器的安装与配置方法,并探讨了Python变量的定义、使用及内存管理机制。 ... [详细]
  • 1.绑定htmlcss1.1对象语法:  传给v-bind:class一个对象,以动态地切换class   ... [详细]
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社区 版权所有