webpack开发环境速度优化
随着项目的增大,项目运行速度会越来越慢,导致影响开发进度。需要提升开发时代码的运行速度。
1. ScopeHoisting作用域提升
该插件在production模式下默认开启。development下需要手动启动。
1 .使用条件
和TreeShaking一样,必须使用ES6的模块,使用import/export语法。
2. 优点:
1)节省内存开销。因为默认每个bundle会打成闭包。
2)减少体积,提升速度。因为如果不使用es模块,默认会包裹一层require。
3. 用法
1. 首先阻止babel将es6的模块进行转换
{
test: /\.jsx?$/,
use: {
loader: 'babel-loader',
options: {
// 切记modules: false
presets: [['@babel/preset-env', {modules: false}], '@babel/preset-react'],
plugins: [
['@babel/plugin-proposal-decorators', {legacy: true}],
['@babel/plugin-proposal-class-properties', {loose: true}]
]
},
},
exclude: /node_modules/
}
2. 引入的第三方库尽量使用es版本
3. 在plugins中配置插件
plugins: [
new webpack.optimize.ModuleConcatenationPlugin(),
]
4. node_modules中的模块优先使用指向es模块的文件
resolve: {
mainFields: ['jsnext:main', 'browser', 'main']
},
2. 热更新
当项目特别大时,页面重新加载会非常缓慢,可以通过热更新,只更改修改的部分。
1. sevServer中开启热更新
module.exports = {
...
devServer: {
hot: true //默认开启webpack.HotModuleReplacementPlugin
}
}
2. css样式热更新
开发模式下使用style-loader, 默认实现了HMR。(css-hot-loader在hot:true时有问题)
{
test: /\.css$/,
use: [
'style-loader',
'css-loader'
]
},
3. jsx代码热更新
使用react-hot-loader插件,在需要的模块包裹hot函数。
{
test: /\.jsx?$/,
use: {
loader: 'babel-loader',
options: {
presets: [['@babel/preset-env', {modules: false}], '@babel/preset-react'],
plugins: [
['@babel/plugin-proposal-decorators', {legacy: true}],
['@babel/plugin-proposal-class-properties', {loose: true}],
['react-hot-loader/babel']
]
},
},
exclude: /node_modules/
},
在代码中使用hot方法
import React from 'react';
import { hot } from 'react-hot-loader/root'; function Test(props) {
return(
<div className="hehe">ppp</div>
)
} export default process.env.NODE_ENV === 'development' ? hot(Test) : Test;
也可以不使用该插件,自己实现逻辑
// 尽量在子组件实现该逻辑;它不接受css文件的变化
if(module.hot) {
module.hot.accept(['./example.js'], () => {
ReactDOM.render(<App/>, window.root)
})
}
webpack开发环境速度优化的更多相关文章
- 分离Webpack开发环境与生产环境的配置
这是Webpack+React系列配置过程记录的第五篇.其他内容请参考: 第一篇:使用webpack.babel.react.antdesign配置单页面应用开发环境 第二篇:使用react-rout ...
- 从零开始配置TypeScript + React + React-Router + Redux + Webpack开发环境
转载请注明出处! 说在前面的话: 1.为什么不使用现成的脚手架?脚手架配置的东西太多太重了,一股脑全塞给你,我只想先用一些我能懂的库和插件,然后慢慢的添加其他的.而且自己从零开始配置也能学到更多的东西 ...
- 从0构建webpack开发环境(一) 一个简单webpack.config.js
本文基于webpack4.X,使用的包管理工具是yarn 概念相关就不搬运了,直接开始 首先项目初始化 mkdir webpack-demo && cd webpack-demo ya ...
- webpack开发环境配置和生产环境配置
开发环境配置 在开发环境下,我们首先考虑的是方便开发,方便代码调试,不需要考虑代码合并和css样式分离这些. 这里主要说三个 :1.css模块化:2.模块热替换功能:3.source-map(代码映射 ...
- webpack 开发环境与生成环境的 配置
写在前面 最近学习react,之前做vue项目的时候,一直都是拿来主义,浑浑噩噩,感觉不太好,趁学习react的机会,在顺带学习一下webpack.一般配置文件分两份,为开发环境和生成环境.有此区分, ...
- 从0构建webpack开发环境(三) 开发环境以及 webpack-dev-server 的使用
sourceMap 实际应用开发过程中大部分时间都是处于开发模式中,其中需要频繁的修改代码.调试和打包. 但是打包后的代码多个模块压缩到了一个bundle文件,如果出现警告或者异常很难定位到具体模块和 ...
- react+webpack开发环境配置
react是目前非常热门的前端框架,提倡组件化开发.所谓的组件,简单理解,就是一个独立的页面部件(包括页面模版,样式,逻辑等),它是一个独立的整体. webpack,是一个模块打包工具,其主要功能,就 ...
- vue2+webpack 开发环境配置
前提条件: 1.安装node.js https://nodejs.org/en/ 下载安装合适的平台 2.安装npm 第一步:初始化项目 新建文件夹 E:\app 推荐vue项目目录结构: confi ...
- webpack开发环境和生产环境切换原理
在package.json中有如下设置: "scripts": { "dev": "node build/dev-server.js" ...
随机推荐
- java笔记2—函数
函数: 1.什么是函数? 函数是定义在类中具有特定功能的一段独立小程序. 函数也称方法. 2.函数的格式: [ 修饰符 ] 返回值类型 函数名(参数类型 形式参数) ...
- maven 打包错误 Cannot access central in offline mode
出错的场景是这样的,先是在一台联网的linux机器上下载项目需要的包,linux机器上jdk为1.8 springboot1.5.然后将项目代码和.m2目录拷贝到一台windows机器上,window ...
- python_二叉树简单实现
今日头条面试题,先做下: 二叉树代码实现 class Node: def __init__(self,item): self.item = item self.child1 = None self.c ...
- 缺陷的背后(三)---mysql之sql_mode为空的陷阱
导语 mysql服务器可以在不同的sql_mode模式下运行,并且可以根据sql_mode系统变量的值,为不同的客户机应用不同的模式.sql_mode会影响mysql支持的sql语法,并且会执行数据验 ...
- 那些年,Linus torvalds大神喷过的技术
Linus Torvalds 被认为是最伟大的程序员之一,因为他写出了使用最广泛的软件,如 Linux 内核和 Git 版本控制系统.但是他这个人经常因为讲话带有情绪,甚至是因为带有脏话的意见而饱受非 ...
- cocoaPods升级遇到的问题 升级ruby 升级cocoaPos
最近重复了一次,修复一些更改. 1.查询 rvm版本rvm -v 2.查询ruby版本ruby -v 3.查询 gem 版本gem -v 4.查询ruby 镜像gem sources -l 5.升级r ...
- 【转载】C#中List集合First和FirstOrDefault方法有何不同
在C#的List集合中查找一个符合条件的元素,一般我们会用First方法或者FirstOrDefault方法来返回第一个符合条件的对象,First方法和FirstOrDefault的调用都是使用Lam ...
- vue中v-if和v-for指令最好不要同时使用
建议不要在与v-for相同的元素上使用v-if.因为v-for指令的优先级高于v-if当它们处于同一节点.v-for 的优先级比 v-if 更高,这意味着 v-if 将分别重复运行于每个 v-for ...
- mysql 数据库 规范
目录 mysql 数据库 规范 基础规范 命名规范 表设计规范 字段设计规范 索引设计规范 SQL编写规范 行为规范 mysql 数据库 规范 基础规范 必须使用InnoDB存储引擎 解读:支持事务. ...
- Node.js学习(第二章:node核心模块--fs)
前言 Node.js中赋予了JavaScript很多在浏览器中没有的能力,譬如:文件读写,创建http服务器等等,今天我们就来看看在node中怎样用JavaScript进行文件的读写操作. 读文件 我 ...