babel和webpack的区别 babel JS编译工具,不关心模块化 webpack 打包构建工具(模块话 / 构建工具),配合loader plugin的集合 babel 不处理模块化,需要配合 webpack一起使用 webpack5主要是内部效率的优化,使用没有区别 webpack本身支持模块化 import babel-polyfill 会污染全局环境 window.Promise = ... 如果是做一个 系统没问题,但是 库的话就有问题 使用babel-runtime (变成一个变量) var _Promise = require("@babel/runtime-corejs2/core-js/promise.js"); 如何按需引用 “useBuiltIns”: "usage", "corejs": 3 为什么要打包构建 体积更小(Tree-Shaking、压缩、合并),加载更快 编译高级语言或语法(TS,ES6+,模块化,scss ) 兼容性和错误检查( Polyfill、postcss、eslint ) ES6 module:静态引入,编译时引入,条件中引入 报错 commonJs:动态引入,执行时引用,可以在条件判断中使用 所以只有ES6 才能静态分析,实现tree-shaking presets(常用plugins的集合)和 plugins polyfill的集合 core-js / regenerator 已经被弃用了,直接使用 core-js @babel/preset-env 只解析 ES6的语法(箭头函数,函数屌调用),但是像 promise / includes 函数 都是没有的,需要 core-js 1.多入口 多个input入口,output 改为【name】 htmlWebapckPlugin 中增加 chunks:[input入口名称] 2.抽离CSS文件 style-loader 直接将CSS打包进JS中了,然后塞到style标签中 生产中 style-loader改为 min-css-extract-plugin
module / chunk / bundle的区别 module - 各个源码文件,webpack中一切皆是模块 chunk - 多个模块合并成的,如 entry / split chunk / import() bundle - 最终的输出文件 为什么proxy 不能被 polyfill class 可以使用 function模拟,promise 可以用callback 模拟 但是 proxy 用 defineProperty 无法模拟 loader和plugin的区别 loader 模块转化器 less => css。 plugin 扩展插件 如 HtmlWebpackPlugin。增加新功能 1.优化打包效率 - 开发体验和效率 cacheDirectory: true缓存让第二次打包构建速度更快 use: ‘babel-loader?cacheDirectory’ 2.ignorePlugin 避免引用无用模块,比如处理 moment 默认引入 所有内容自己去手动引入 中文 语言包
3.noParse: 区别在于 这个是直接打包
ignore 直接不引入,代码中需要自己去引入 noParse引入,但是不打包 4.happyPack 多进程打包 JS单线程,开启多进程打包,提高构建速度,特别是多核CPU 5.parallelUglify Plugin 多进程压缩JS, 生产环境即可 webpack内置了 uglify 工具压缩JS,单进程的 如果项目较小,没必要使用,开启多进程可能反而变慢(进程开销)
热更新: 状态不会丢失,页面不刷新,而自动刷新,状态会丢失 hot需要自己去检测哪些模块开启热更新 统一、高效的开发环境 统一的构建流程和产出标准 集成公司构建规范(提测、上线等) 常用 loader 和plugin 标签:babel,笔记,loader,webpack,引入,JS,打包 From: https://www.cnblogs.com/escapist/p/18061844