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

webpack打包css文件问题

如下,入口文件index.js引入了base.js及index.css,base.js引入了normalize.css及base.css,配置文件如下

如下,入口文件index.js引入了base.js及index.css,base.js引入了normalize.css及base.css,配置文件如下

问:打包后index.css中只有一小部分normalize.css的代码,其他都没有这是为什么?
[打包后的index.css]



1
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}[hidden]{display:none}body{margin:0;padding:0}body,html{font-family:MicroSoft YaHei}html{overflow-x:hidden;overflow-y:auto}body,html{height:100%}body{width:100vw}

[base.js]

1
2
import '../css/normalize.css'

import '../css/base.css'

[index.js]



1
2
import './base.js'

import '../css/index.css'

[webpack.base.conf.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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
const webpack = require('webpack')

const merge = require('webpack-merge')

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

const MiniCssExtractPlugin = require('mini-css-extract-plugin') // 将 css 单独打包成文件

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

const PurifyCSS = require('purifycss-webpack')

const glob = require('glob-all')

const WorkboxPlugin = require('workbox-webpack-plugin') // 引入 PWA 插件





const path = require('path')



const productiOnConfig= require('./webpack.prod.conf.js') // 引入生产环境配置文件

const developmentCOnfig= require('./webpack.dev.conf.js') // 引入开发环境配置文件





/**

 * 根据不同的环境,生成不同的配置

 * @param {String} env "development" or "production"

 */

const generateCOnfig= env => {

    // 将需要的 Loader 和 Plugin 单独声明



    let scriptLoader = [

        {

            loader: 'babel-loader'

        }

    ]



    let cssLoader = [

        'style-loader',

        'css-loader',

        'postcss-loader', // 使用 postcss 为 css 加上浏览器前缀

        'sass-loader' // 使用 sass-loader 将 scss 转为 css

    ]



    let cssExtractLoader = [

        {

            loader: MiniCssExtractPlugin.loader,

        },

        'css-loader',

        'postcss-loader', // 使用 postcss 为 css 加上浏览器前缀

        'sass-loader' // 使用 sass-loader 将 scss 转为 css

    ]



    let fOntLoader= [

        {

            loader: 'url-loader',

            options: {

                name: '[name]-[hash:5].min.[ext]',

                limit: 5000, // fonts file size <= 5KB, use 'base64'; else, output svg file

                publicPath: 'fonts/',

                outputPath: 'fonts/'

            }

        }

    ]



    let imageLoader = [

        {

            loader: 'url-loader',

            options: {

                name: '[name]-[hash:5].min.[ext]',

                limit: 10000, // size <= 10KB

                outputPath: '/img/'

            }

        },

        // 图片压缩

        {

            loader: 'image-webpack-loader',

            options: {

                // 压缩 jpg/jpeg 图片

                mozjpeg: {

                    progressive: true,

                    quality: 50 // 压缩率

                },

                // 压缩 png 图片

                pngquant: {

                    quality: '65-90',

                    speed: 4

                }

            }

        }

    ]



    let styleLoader =

        env === 'production'

            ? cssExtractLoader // 生产环境下压缩 css 代码

            : cssLoader // 开发环境:页内样式嵌入



    return {

        entry: {

            index: './src/js/index.js',

            // comany: './src/js/company.js',

        },

        output: {

            publicPath: env === 'development' ? '/' : '../',

            path: path.resolve(__dirname, 'dist'),

            filename: 'js/[name].bundle.js',

            chunkFilename: '[name].chunk.js'

        },

        resolve: {

            alias: {

                jquery: path.resolve(__dirname, '..', './static/lib/jquery-3.3.1.min.js'),

                vue: path.resolve(__dirname, '..', 'static/lib/vue.min.js'),

                vuex: path.resolve(__dirname, '..', 'static/lib/vuex.js'),

                // vue_router: path.resolve(__dirname, '..', 'static/lib/vue-router.js')

            }

        },

        module: {

            rules: [

                { test: /\.js$/, exclude: /(node_modules)/, use: scriptLoader },

                {

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

                    use: styleLoader

                },

                {

                    test: /\.html$/,

                    use: { loader: 'html-loader' }

                },

                { test: /\.(eot|woff2?|ttf|svg)$/, use: fontLoader },

                { test: /\.(png|jpg|jpeg|gif)$/, use: imageLoader }

            ]

        },

        plugins: [

            // 开发环境和生产环境二者均需要的插件

            new HtmlWebpackPlugin({

                // title: 'webpack4 实战',

                filename: './html/index.html',

                template: './src/html/index.html',

                chunks: ['index'],

                minify: {

                    removeComments: true, // 移除 HTML 中的注释

                    collapseWhitespace: true, // 删除空白符与换行符

                    minifyCSS: true // 压缩内联 css

                }

            }),

            // new MiniCssExtractPlugin({

            //     filename: 'css/[name].css',

            //     chunkFilename: '[name].min.css'

            // }),

            // new OptimizeCssAssetsPlugin({

            //     assetNameRegExp: /\.css$/g,

            //     cssProcessor: require('cssnano'), //用于优化\最小化 CSS 的 CSS 处理器,默认为 cssnano

            //     cssProcessorOptions: { safe: true, discardComments: { removeAll: true } }, //传递给 cssProcessor 的选项,默认为{}

            //     canPrint: true //布尔值,指示插件是否可以将消息打印到控制台,默认为 true

            // }),

            new webpack.ProvidePlugin({

                $: 'jquery',

                Vue: 'vue',

                Vuex: 'vuex',

                // Vue

            }),

            new CleanWebpackPlugin(),

            // 清除无用css

            new PurifyCSS({

                paths: glob.sync([

                    // 要做css Tree Shaking  的路径文件

                    path.resolve(__dirname, './*.html'),

                    path.resolve(__dirname, './src/*.js')

                ])

            }),

            // 配置 PWA

            new WorkboxPlugin.GenerateSW({

                clientsClaim: true,

                skipWaiting: true

            })

        ]

    }

}



module.exports = env => {

    let cOnfig= env === 'production' ? productionConfig : developmentConfig

    return merge(generateConfig(env), config) // 合并 公共配置 和 环境配置

}

[webpack.prod.conf.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
// 生产配置主要是拆分代码,压缩 css

const MiniCssExtractPlugin = require('mini-css-extract-plugin') // 将 css 单独打包成文件

const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin') // 压缩 css



module.exports = {

    mode: 'production',

    optimization: {

        splitChunks: {

            chunks: 'all',

            cacheGroups: {

                jquery: {

                    name: 'chunk-jquery', // 单独将 jquery 拆包

                    priority: 15,

                    test: /[\\/]node_modules[\\/]jquery[\\/]/

                }

            }

        }

    },

    plugins: [

        new MiniCssExtractPlugin({

            filename: 'css/[name].css',

            chunkFilename: '[id].css'

        }),

        // 压缩 css

        new OptimizeCssAssetsPlugin({

            assetNameRegExp: /\.css$/g, //一个正则表达式,指示应优化/最小化的资产的名称。提供的正则表达式针对配置中ExtractTextPlugin实例导出的文件的文件名运行,而不是源CSS文件的文件名。默认为/\.css$/g

            cssProcessor: require('cssnano'), //用于优化\最小化 CSS 的 CSS处理器,默认为 cssnano

            cssProcessorOptions: { safe: true, discardComments: { removeAll: true } }, //传递给 cssProcessor 的选项,默认为{}

            canPrint: true //一个布尔值,指示插件是否可以将消息打印到控制台,默认为 true

        })

    ]

}



   



推荐阅读
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • Spring学习(4):Spring管理对象之间的关联关系
    本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
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社区 版权所有