博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
webpack升级2.0遇到的坑
阅读量:6081 次
发布时间:2019-06-20

本文共 2020 字,大约阅读时间需要 6 分钟。

  • 可删除的内容

    DedupePlugin函数被删除了    OccurrenceOrderPlugin函数变成默认引用的,之前引用的也可以删除了    module.preLoaders被取消了    json-loader变成内置了,不需要在单独安装json-loader包
  • 语法的改变

    以前省略的用来配置解析各种类型文件的loader,现在不能省略后缀loader,比如babel,现在必须写babel-loader
  • 打包流程的改变

    webpack之前的打包流程是:babel-loader转码 -> webpack打包 -> uglify压缩   webpack2.0的打包流程:webpack打包 -> babel-loader转码 -> uglify压缩
  • webpack2的实现了tree-shaking的原理

    **什么是tree-shaking**?    所谓tree-shaking就是去掉不需要的代码,保留活代码。  commonjs模块是动态加载的并且可以重命名,在静态分析时要知道哪些代码时不被执行的,需要对数据流进行分析。  tree-shaking借助es6模块机制。  通过import/export等关键字来定义输入输出的方法,且其重命名只能通过as这个关键字,  模块一旦被import进来,就是只读的,这样,我们只根据名字,就可以从入口文件一路溯源到模块定义处,只把用到的方法打包进来。

    webpack想要知道哪些代码不需要就的解析es6模块语法,webpack借助acorn(只有解析功能,没有转换功能)实现的,webpack2会统计每个模块export方法被使用的次数,并把没有用到的export删除掉。eg:

    **help.js**export function foo() {    return 'foo';}export function bar() {    return 'bar';}**main.js**import {foo} from './helps';**help.bundle.js 打包之后的help.js的文件**function(module, exports, __webpack_require__) {    /* harmony export */ exports["foo"] = foo;    /* unused harmony export bar */; 未被使用的模块会被标记成这样    function foo() {        return 'foo';    }    function bar() {        return 'bar';    }}**help.bundle.min.js 压缩之后的help.bundle.js**/* 经过压缩后未被使用的 bar模块被删除了 */function (t, n, r) {    function e() {        return "foo"    }    n.foo = e}

    使用tree-shaking需要设置.bablerc文件中的es2015

    {   "presets": [     [           "es2015", {"modules": false}],           // webpack understands the native import syntax, and uses it for tree shaking           "stage-2",           // Specifies what level of language features to activate.           // Stage 2 is "draft", 4 is finished, 0 is strawman.           // See https://tc39.github.io/process-document/           "react"           // Transpile React components to JavaScript     ],   "plugins": [       "react-hot-loader/babel"       // Enables React code to work with HMR.     ]   }
  • UglifyjsWebpackPlugin插件的修改

    UglifyjsWebpackPlugin插件在代码压缩时候的使用需要手动生命sourceMap的值是true,默认的是false,  在压缩的时候会生成.map文件(在dll的配置文件中,编译时不生成all.map文件,在dev.config中导致load map文件找不到)

    clipboard.png

转载地址:http://awegx.baihongyu.com/

你可能感兴趣的文章
newinstance()和new有什么区别
查看>>
android下载封装类
查看>>
[node] 用 node-webkit 开发桌面应用
查看>>
Nginx访问控制和虚拟主机
查看>>
report widget not working for external users
查看>>
windows phone 摄像头得到图片是旋转90°
查看>>
Linux--sed使用
查看>>
没有显示器的情况下安装和使用树莓派
查看>>
Q85 最大矩形
查看>>
【android】使用handler更新UI
查看>>
mochiweb 源码阅读(十五)
查看>>
Android获取设备採用的时间制式(12小时制式或24小时制式)
查看>>
前端面试中的常见的算法问题
查看>>
CENTOS7下安装REDIS
查看>>
hdu1236 排名(结构体排序)
查看>>
C# 99乘法表
查看>>
WCF 第五章 行为 系列文章
查看>>
全文检索、数据挖掘、推荐引擎系列3---全文内容推荐引擎之中文分词
查看>>
使用File Explorer访问虚拟机上的文件
查看>>
项目实现多数据库支持
查看>>