一、先放上项目目录结构

二、问题总结

1、关于process.env.NODE_ENV问题

刚开始的时候,我想在配置文件中使用到这个环境变量,却发现一直获取不到值,晕晕晕,查了资料才知道,这个环境变量是给除配置文件之外的文件使用的。

因为我需要在webpack.base.conf.js配置文件中区分是开发环境还是生成环境,于是我做了如下处理:

// 第一:在我的npm脚本中加入--mode=production来确定这是生产环境
"build": "webpack --mode=production --config ./build/webpack.prod.conf.js --color --progress"
// 第二:通过process.argv判断是否存在标识--mode=production来区分开发环境和生产环境
const isProduction = process.argv.indexOf('--mode=production') > -1;

 2、关于clean-webpack-plugin插件清除文件问题

// 刚开始的时候我只是这样做了一个简单的配置,以为可以生效
// 然而,然并卵
new CleanWebpackPlugin('dist')
// 之后在阅读了插件源代码和编译提示之后,才找到问题所在(ps:源代码量不多)
// 第一:该插件只会清除插件所在文件夹下的子文件
// 第二:由于我的配置文件是在build目录下,所以插件的根目录在build文件夹
// 第三:因为我要删除的dist文件夹是build的兄弟目录,所以插件会跳过跳过跳过删除操作
// 综上所述,正确的操作是:设置项目根目录为插件的根目录
new CleanWebpackPlugin('dist', {
root: path.join(__dirname, '../')
})

3、关于extract-text-webpack-plugin提取css问题

刚开始我的配置是这样子的,忽视了我的配置是多入口的。在我打包出来之后,我的一部分css代码被提取出来的,而我配置成css module的代码却一直没有提取出来,因为这个问题,我找了一个晚上还是没有找出问题所在。

new ExtractTextPlugin("styles.css")

直到,我在webpack文档中我看到了这样的一段话:

警告: ExtractTextPlugin 对 每个入口 chunk 都生成一个对应的文件,所以当你配置多个入口 chunk 的时候,你必须使用 [name], [id] 或 [contenthash]

从这个时候我才明白,之所以存在“只提取部分代码的问题“,是因为我只设置了一个文件,导致了文件内容覆盖,后面入口文件提取出来的css覆盖了前面入口文件提取出来的css。

哭晕在厕所。。。

// 正确的操作如下:
new ExtractTextPlugin({
// 如果需要加上文件目录'css/[name].css',则需要考虑css里面应用文件相对目录问题
filename: '[name].css',
allChunks: true
})

4、关于css文件压缩问题

刚开始,我用了css-loader提供的minimize选项,不可能的,这辈子都不可能完成压缩的

{
loader: 'css-loader',
options: {
minimize: true
}
}

查了资料才发现,原来css-loader已经在新版本已经移除了minimize这个压缩选项,而推荐了其他的方案:

use postcss-loader with cssnano
use optimize-cssnano-plugin

而我采取了其中的第一种压缩方案,即postcss的方案,顺便也学习下postcss的配置,安装了postcss-loader和cssnano依赖之后,需要做如下配置:

// 第一:在需要用postcss处理的文件加入postcss-loader
test: /\.css/,
use:['style-loader','css-loader','postcss-loader']
// 第二:配置postcss,需要在项目根目录新建文件postcss.config.js
module.exports = {
plugins: [
require('cssnano')({
preset: 'default'
}),
]
};

5、有待更新...

三、总结

在学习webpack的过程中,我主要以webpack中文文档(https://webpack.docschina.org/concepts/)和github这两个网站为主,当然也少不了百度和google。学习下来发现,只要你认真看官方文档及去github上找官方给出来的示例,总能找到你的解决方案。

最后,贴出我的demo(https://github.com/xieqian-xq/demo/tree/master/webpack)。

还请各位大神多多指教

webpack4之踩坑总结的更多相关文章

  1. 升级至webpack4.x踩坑记(热更新局部更新失败的问题修复)

    零.前言 webpack升级的时候,会碰到各种个样的问题,大多数网上都能查到解决方案最简单的方案. 思路如下: 1.把css-loader,xxxloader等依赖都升级到最新 2.根据webpack ...

  2. webpack踩坑--webpack 2.x升级至4.x

    一.安装webpack-cli,webpack@4.26.1 1.npm install webpack-cli -D 2.npm install webpack@4.26.1 -D 二.踩坑 执行n ...

  3. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  4. Spark踩坑记——数据库(Hbase+Mysql)

    [TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...

  5. 【踩坑速记】二次依赖?android studio编译运行各种踩坑解决方案,杜绝弯路,总有你想要的~

    这篇博客,只是把自己在开发中经常遇到的打包编译问题以及解决方案给大家稍微分享一下,不求吸睛,但求有用. 1.大家都知道我们常常会遇到dex超出方法数的问题,所以很多人都会采用android.suppo ...

  6. NPOI导出Excel (C#) 踩坑 之--The maximum column width for an individual cell is 255 charaters

    /******************************************************************* * 版权所有: * 类 名 称:ExcelHelper * 作 ...

  7. 我的微信小程序入门踩坑之旅

    前言 更好的阅读体验请:我的微信小程序入门踩坑之旅 小程序出来也有一段日子了,刚出来时也留意了一下.不过赶上生病,加上公司里也有别的事,主要是自己犯懒,就一直没做.这星期一,赶紧趁着这股热乎劲,也不是 ...

  8. router路由去掉#!的踩坑记

    项目中在研究去掉router#!的过程中的踩坑过程.

  9. vue+ vue-router + webpack 踩坑之旅

    说是踩坑之旅 其实是最近在思考一些问题 然后想实现方案的时候,就慢慢的查到这些方案   老司机可以忽略下面的内容了 1)起因  考虑到数据分离的问题  因为server是express搭的   自然少 ...

随机推荐

  1. 贷款资讯类APP、贷款资讯网站廉价卖,需要的进来看看

    [app介绍]卡贷资讯app为您提供信用卡申请攻略及借款资讯以及贷款口子,让你借钱借款路上不再愁.[功能特点]1.资讯:聚合各种贷款资讯知识,掌握核心信用卡申请攻略,借款借钱不亏,亦不被骗:2.工具: ...

  2. Win10系统如何在防火墙里开放端口

    Win10系统如何在防火墙里开放端口(下面傻瓜式教学) 然后怎么做呢?????? 下一步.下一步.下一步.下一步.下一步.下一步.下一步.下一步.下一步.下一步......... 随便起个名字 KO

  3. 好程序员技术教程分享JavaScript运动框架

    好程序员技术教程分享JavaScript运动框架,有需要的朋友可以参考下. JavaScript的运动,即让某元素的某些属性由一个值变到另一个值的过程.如让div的width属性由200px变到400 ...

  4. 一款DMA性能优化记录:异步传输和指定实时信号做async IO

    关键词:DMA.sync.async.SIGIO.F_SETSIG. DMA本身用于减轻CPU负担,进行CPU off-load搬运工作. 在DMA驱动内部实现有同步和异步模式,异步模式使用dma_a ...

  5. JS 禁止Ctrl+C + 禁止右键操作

    <script type="text/javascript"> document.oncontextmenu = new Function("return f ...

  6. 从HTTL模板引擎看软件设计原则

    HTTL (Hyper-Text Template Language) 是一个高性能的开源JAVA模板引擎, 适用于动态HTML页面输出, 可替代JSP页面, 指令和Velocity相似.作者是阿里巴 ...

  7. django 之 stark组件

    ----------------------------------------------------------------烦恼没完没了,内心动荡不安,呜呼哀哉. 一.有个特殊的需求,需要用sta ...

  8. PS调出清新风格社区街拍照片

    原图: 首先呢,我们还是先看一下在直方图,但是呢,你会发现,这张照片的直方图毫无特色. 简直是标准得不能再标准的直方图了.所以各位那我们就跳过这步吧.你要真跳过这步你就完了.直方图还有三个儿子啊,通道 ...

  9. 删除a表中和b表相同的数据

    删除a表中和b表相同的数据 - 冯索的专栏 - CSDN博客https://blog.csdn.net/wugouzi/article/details/9374329 oracle 查找A表存在B表不 ...

  10. js对象取值的两种方式

    :"李四"}; var v1 = obj.name1; //张三, 使用点的方式 //报错,不能使用点的方式 ]; //李四,使用中括号的方式 var key = "na ...