看了官方的升级通告,据说webpack4的打包效率提升近一倍,于是最近在项目分支上升级了下webpack4,过程中的一些报错及问题简单整理下,以供交流。

在之前的旧项目上单纯的升级webpack版本后,控制台会逐个出现以下系列问题,需要逐个修改:

1、首先是关于CommonsChunkPlugin的报错

CommonsChunkPlugin在webpack4中已被移除,是被移除的四个常用plugin之一(UglifyjsWebpackPlugin,CommonsChunkPlugin,ModuleConcatenationPlugin,NoEmitOnErrorsPlugin),改用optimization.splitChunks和optimization.runtimeChunk替代。

2、无法识别ts文件导致的报错(error:'app.module.ts is not a module'   ||   'you may need an appropriate loader to handle this file type'),如图

这里的问题是由于webpack的配置文件中关于ts-loader的语法问题导致,修改成如下的语法即可


module: {
rules: [
{test: /\.tsx?$/,loaders: ['ts-loader']}
]
}

3、webpack.optimize.UglifyJsPlugin has been removed,如图

webpack4基于零配置的思想,部分插件被移除,如webpack.optimize.UglifyJsPlugin在webpack4中已经被移除,在optimization对象中配置optimization.minimize=true即可,如果是生产环境的模式(mode:production)下,则该属性默认为true,默认压缩。

4、webpack.NoErrorsPlugin is not a constructor,具体error如图

该过滤error的插件需修改如下


new webpack.NoEmitOnErrorsPlugin(),

5、45:15-36 Critical dependency: the request of a dependency is an expression

解决warning,需在plugins中添加以下插件代码


// Workaround for angular/angular#11580
new webpack.ContextReplacementPlugin(
/angular(\\|\/)core/,
path.resolve(__dirname, './')
),

此处需要使用上下文替换插件进行相关规则的替换,详见angular&webpack简介ContextReplacementPlugin

6、System.import() is deprecated and will be removed soon. Use import() instead.

这个warning目前没有找到@angular/core版本的解决方案,warning的产生应该是angular/core源码中使用了webpack中即将删除的方法system.import,希望有这个warning解决方案的朋友告知下,谢谢哈

7、如果项目配置的是动态路由模式,webpack4中默认会生成类似0.js、1.js、2.js...这样的默认模块名称。

如果需要语义化模块名称,需要在两处进行配置:

1、在动态路由下的require.ensure方法里配置(这里项目使用的是react-router,所以就以此为参考说明),require.ensure方法参数说明如下图1,图2即具体模块名称的配置

图1

图2

2、在webpack.config的output中需要开启自定义的模块名称chunkFilename定义

然后build打包后,会发现bundule文件中就会出现刚才配置的模块名称“login”

end

webpack4试水总结的更多相关文章

  1. POJ 2502 - Subway Dijkstra堆优化试水

    做这道题的动机就是想练习一下堆的应用,顺便补一下好久没看的图论算法. Dijkstra算法概述 //从0出发的单源最短路 dis[][] = {INF} ReadMap(dis); for i = 0 ...

  2. 大众点评试水O2O新模式:实体店试穿,扫描二维码付款 现场取货

    在餐饮美食行业取得不错的成绩之后,大众点评将触角延伸到了线下的传统商铺,开始涉足线下商品的 O2O 团购.和传统的线上下单,线下消费的 O2O 模式不同.大众点评的 O2O 团购用户,可在店内试穿后通 ...

  3. Json.Net6.0入门学习试水篇

    原文:Json.Net6.0入门学习试水篇 前言 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.简单地说,JSON 可以将 JavaScript 对象中 ...

  4. 第一回:Scrapy的试水

    前言:今天算是见到Scrapy的第二天,之前只是偶尔查了查,对于这个框架的各种解释,我-----都-----看------不------懂----,没办法,见面就是刚. 目的:如题,试水 目标:< ...

  5. CSharpGL(49)试水OpenGL软实现

    CSharpGL(49)试水OpenGL软实现 CSharpGL迎来了第49篇.本篇内容是用C#编写一个OpenGL的软实现.暂且将其命名为SoftGL. 目前已经实现了由Vertex Shader和 ...

  6. UITableView(自定义cell)试水心得

    初次试水自定义cell的UITableView 实现目标      最终实现结果   界面复原度:98% 未能完全复刻的地方:下半部分的tableview与头部的控件间距上的误差 原因:在做table ...

  7. 微博试水卖车社交电商怎样令4S“颤抖”?

        微博对社交电商的探索一直在深入,年初.微博上线了"支付"产品.从而使社交产业链实现了闭环,随后,微博又尝试售卖多种商品,不断扩大移动电商的试水范围,近期微博大规模汽车销售收 ...

  8. phaser2->3:来个打地鼠试水

    本文中phaser具体版本 phaser2:2.8.1 phaser3:3.17.0 一.实现效果二.实现细节三.项目总结四.参考文档 一.实现效果 源码地址(phaser2&phaser3) ...

  9. CentOS7 docker试水

    CentOS 7.0,无外网直接访问权限,有一台代理服务器. 首先安装docker-ce,参考http://blog.51cto.com/aaronsa/2056882 除非特殊说明,以下操作都用ro ...

随机推荐

  1. linux mysql安装问题

    1.rpm -qa | grep mysql   //首先检查是否安装了mysql   2.如果安装了,卸载 rpm -e mysql   3\ 下载地址 http://dev.mysql.com/d ...

  2. 论文参考文献中J、M等是什么意思

    最近不务正业的写论文,记录下常见的文献标示 国家期刊出版格式要求在中图分类号的下面应标出文献标识码,规定如下: 作者可从下列A.B.C.D.E中选用一种标识码来揭示文章的性质: A—理论与应用研究学术 ...

  3. pandas练习(四)--- 应用Apply函数

    探索学生对酒的消费情况 数据见github 步骤1 - 导入必要的库 import pandas as pd import numpy as np 步骤2 - 数据集 path4 = "./ ...

  4. Let it Go

    <冰雪奇缘> 主题歌曲         The snow glows white on the mountain tonight Not a footprint to be seen. A ...

  5. ant编译无法依赖rt.jar

    最近同事在用ant编译投产的时候报了一个错误: 程序包com.sun.org.apache.xml.internal.security.exceptions不存在 大致网上搜集了一下资源:具体原因是相 ...

  6. Python 类中的"静态"成员变量

    本文环境:Python 2.7 一个类的三个对象实例的属性被同时修改 有段代码如下: class task_queue: queue=[] def append(self,obj): self.que ...

  7. Linux中tomcat日志按日期自动分割

    Linux中tomcat日志分割需要用到cronolog 附上cronolog-1.6.2.tar.gz 1. 安装cronolog tar –zxvf cronolog-1.6.2.tar.gz . ...

  8. 20145127《java程序设计》第六周学习总结

    教材学习内容总结 第十章 输入与输出 文件的读写 网络上传数据的基础 10.1 InputStream与OutputStream 流(Stream)是对「输入输出」的抽象,注意「输入输出」是相对程序而 ...

  9. TCP 的连接建立:采用三报文握手

  10. 矩阵二分快速幂优化dp动态规划

    矩阵快速幂代码: int n; // 所有矩阵都是 n * n 的矩阵 struct matrix { int a[100][100]; }; matrix matrix_mul(matrix A, ...