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)
  })
}

原文地址:https://www.cnblogs.com/lyraLee/p/12040335.html

时间: 2025-01-17 09:29:15

webpack开发环境速度优化的相关文章

从0构建webpack开发环境(三) 开发环境以及 webpack-dev-server 的使用

sourceMap 实际应用开发过程中大部分时间都是处于开发模式中,其中需要频繁的修改代码.调试和打包. 但是打包后的代码多个模块压缩到了一个bundle文件,如果出现警告或者异常很难定位到具体模块和位置,所以webpack提供了source map的配置 devtool, 该配置可选且具有多个配置项 ,具体包含以下: devtool 构建速度 重新构建速度 生产环境 品质(quality) (none) +++ +++ yes 打包后的代码 eval +++ +++ no 生成后的代码 che

vue-cli webpack 开发环境跨域

edit dev.proxyTable option in config/index.js. The dev server is using http-proxy-middleware for proxying 为了解决跨域问题, 通常会使用Jsonp,但是jsonp只能是get请求. 或者使用CORS支持,设置Access-Control-Allow-Origin: * 0 前置技能 熟悉vue-loader 和 webpack 1 基本配置 编辑confix/index.js文件 dev s

从0构建webpack开发环境(二) 添加css,img的模块化支持

在一个简单的webpack.config.js中,构建了一个基础的webpack.config.js文件,但是只支持js模块的打包. 本篇中添加对css和img的模块化支持 首先需要安装三个个loader css-loader, style-loader,file-loader yarn add css-loader style-loader css-loader用于对css文件的解析,style-loader会将解析的css样式以style标签的形式插入到html文件中 安装好之后,需要修改w

webpack开发环境所需要的插件

1.webpack-dev-middleware 2.webpack-hot-middleware

搭建Vue项目开发环境(一)

1.初始化 Vue 项目: (1)彻底删除 cnpm (假如已安装过): npm uninstall cnpm -g (2)安装 cnpm 淘宝的包管理器(由于 npm 的插件都是从国外服务器下载,因网络不稳定,可能出现异常,所以需要更换为 cnpm): npm install cnpm -g --registry=https://registry.npm.taobao.org (3)查看包管理器是否安装成功: npm config get registry (4)全局安装 vue-cli2.x

Webpack编译速度优化实战

当你的应用的规模还很小时,你可能不会在乎Webpack的编译速度,无论使用3.X还是4.X版本,它都足够快,或者说至少没让你等得不耐烦.但随着业务的增多,嗖嗖嗖一下项目就有上百个组件了,也是件很简单的事情.这时候当你再独立编前端模块的生产包时,或者CI工具中编整个项目的包时,如果Webpackp配置没经过优化,那编译速度都会慢得一塌糊涂.编译耗时10多秒钟的和编译耗时一两分钟的体验是迥然不同的.出于开发时的心情的考虑,加上不能让我们前端的代码编译拖累整个CI的速度这两个出发点,迫使我们必须去加快

Wabpack系列:在webpack+vue开发环境中使用echarts导致编译文件过大怎么办?

现象,在一个webpack+vue的开发环境中,npm install echarts --save了echarts,然后在vue文件中直接使用 import echarts from 'echarts' 然后编译的时候加上了Uglify选项,发现vendor文件的大小已经达到了800多k,导致首次加载速度比较慢,然后我们这个是webapp,就更慢了. 所以考虑把echarts提取出来,改用cdn版本的echarts,具体操作步骤如下: (0)找到可用的echartscdn资源 在bootcdn

基于webpack和vue.js搭建开发环境

前言 在对着产品高举中指怒发心中之愤后,真正能够解决问题的是自身上的改变,有句话说的好:你虽然改变不了全世界,但是你有机会改变你自己.秉承着“不听老人言,吃亏在眼前”的优良作风,我还是决定玩火自焚. 问题所在 之前的项目总结为以下内容: 1.AMD模块规范开发,使用requirejs实现,使用rjs打包,最终导致的结果是,输出的项目臃肿,肿的就像一坨狗不理……不忍直视2.使用gulp进行打包,这一点貌似没有可吐槽的地方,毕竟都是被grunt折磨过来的……3.数据的渲染使用模板引擎,这就意味着你要

webpack开发与生产环境配置

前言 作者去年就开始使用webpack, 最早的接触就来自于vue-cli.那个时候工作重点主要也是 vue 的使用,对webpack的配置是知之甚少,期间有问题也是询问大牛 @吕大豹.顺便说一句,对于前端知识体系迷茫的童鞋可以关注豹哥的微信公众号,<大豹杂说>.豹哥对于刚开始小白的自己(虽然现在也白)知无不谈,而且回复超快超认真.这里真的很感谢豹哥.前段时间工作不忙,自己就啃了啃webpack的官方文档,毕竟知识还是在自己脑袋里踏实.然后根据vue-cli的配置文件丰富了一点新的东西,发布出