webpack, react项目中利用外部JS库提升效率

简介: 前言 现在很多前端项目在构建时,都是一个vendor 公共JS文件和和一个app.js的文件,会造成一些弊端。 在项目的开发过程中,修改任何一个地方,都会触发JS的全局构建,需要等待非常久,长久下来大大的降低了开发效率。

前言

现在很多前端项目在构建时,都是一个vendor 公共JS文件和和一个app.js的文件,会造成一些弊端。

  1. 在项目的开发过程中,修改任何一个地方,都会触发JS的全局构建,需要等待非常久,长久下来大大的降低了开发效率。
  2. 另外一个弊端就是每次构建上线,vendor和app每次都会改变,任何一个小的更改都会使2个文件都改变,再次发布上线,用户的第一次加载速度都会很慢。

问题分析

实际在项目的过程中,依赖的外部库一般都会不改变的,所以可以把这一部分代码作为一个外部库,发布上线后通过CDN引入,无论再次构建和再次上线,这一部分代码都不会改变。
这样就可以解决问题的疼点。

解决方法

webpack对于公共库有几种解决方法,

  1. dll-plugin: 例子: https://github.com/webpack/webpack/tree/master/examples/dll , 但在实际的操作中,dllPlugin的操作还是相对比较麻烦,不能达到一个完全的解耦状态,webpack为了做版本隔离,做了比较复杂的方案,但在项目实践中除了更麻烦意外实用性并不强。
  2. 自己构建commonJS模块,然后通过require.js做加载器,这样项目代码,外部库都是作为common.js库,然后另外在页面写代码初始化。这样的方案也比较麻烦
  3. 自己构架全局变量模块,这是相对来说,比较简单,也是本文中讨论的方案。以下就这种方法做详细讨论:
如何构建外部库
  1. 新建一个项目,然后新建index.js
    然后里边引入我们需要构建的公共库;

示例代码如下:

exports.react = require('react');
exports.reactDom = require('react-dom');
exports.reactRedux = require('react-redux');
exports.reactRouter = require('react-router');
exports.reactRouterRedux = require('react-router-redux');
exports.redux = require('redux');
exports.reduxThunk = require('redux-thunk');
exports.reactAddonsTransitionGroup = require('react-addons-transition-group');
  1. 配置webpack.config.js
    entry: {
        "index": srcPath
    },
    output: {
        path: outputPath,
        filename: '[name].js',
        library: 'MY_LIB',  //这个是全局的变量名
        libraryTarget: 'umd'  //这里写umd,也为了后期兼容其他模式
    },

3.构建和发布

把构建好的js发布上线,

如何在项目中引入这个库

  1. 在项目的html页面头部引入这个js。
    比如
 <script src="http://g.alicdn.com/my.js"></script>
  1. 配置webpack.config.js

主要是增加一个externals的配置,这样配置,构建出来的代码将不会包含相关的模块

    externals: [{
        'react': 'window.MY_LIB.react',
        'react-dom': 'window.MY_LIB.reactDom',
        'redux': 'window.MY_LIB.redux',
        'react-redux': 'window.MY_LIB.reactRedux',
        'redux-thunk': 'window.MY_LIB.reduxThunk',
        'react-router': 'window.MY_LIB.reactRouter',
        'react-router-redux': 'window.MY_LIB.reactRouterRedux',
        'react-addons-transition-group': 'window.MY_LIB.reactAddonsTransitionGroup'
    }],
  1. 大功告成。

再重新构建一次,就会发现速度飞快了。

总结

经过几步简单的修改,对项目的速度提升非常明显。

  1. 经测试, 在用这种方式构建以后,项目构建速度提高50%以上,依据项目中的外部库而定。
  2. 用户在第二次升级的加载中,加载速度也提升了30%以上。
    3.如果用的库和这个项目的一样,那么可以直接从CDN引入,而不需要再次构建,达到跨项目的重用。
目录
相关文章
|
2月前
|
前端开发 JavaScript UED
React 图标库使用指南
本文详细介绍如何在 React 项目中使用 `react-icons` 等图标库,涵盖环境搭建、基础使用、常见问题与易错点、高级用法等内容,并通过代码案例进行说明。适合初学者和进阶开发者参考。
109 8
|
3月前
|
前端开发 JavaScript API
React开发需要了解的10个库
本文首发于微信公众号“前端徐徐”,介绍了React及其常用库。React是由Meta开发的JavaScript库,用于构建动态用户界面,广泛应用于Facebook、Instagram等知名网站。文章详细讲解了Axios、Formik、React Helmet、React-Redux、React Router DOM、Dotenv、ESLint、Storybook、Framer Motion和React Bootstrap等库的使用方法和应用场景,帮助开发者提升开发效率和代码质量。
153 4
React开发需要了解的10个库
|
2月前
|
前端开发 JavaScript 测试技术
React 中集成 Chart.js 图表库
本文介绍了如何在 React 项目中集成 Chart.js 创建动态图表,涵盖基础概念、安装步骤、代码示例及常见问题解决方法,帮助开发者轻松实现数据可视化。
51 11
|
2月前
|
监控 前端开发 JavaScript
React 静态网站生成工具 Next.js 入门指南
【10月更文挑战第20天】Next.js 是一个基于 React 的服务器端渲染框架,由 Vercel 开发。本文从基础概念出发,逐步探讨 Next.js 的常见问题、易错点及解决方法,并通过具体代码示例进行说明,帮助开发者快速构建高性能的 Web 应用。
113 10
|
3月前
|
JavaScript
webpack学习五:webpack的配置文件webpack.config.js分离,分离成开发环境配置文件和生产环境配置文件
这篇文章介绍了如何将webpack的配置文件分离成开发环境和生产环境的配置文件,以提高打包效率。
60 1
webpack学习五:webpack的配置文件webpack.config.js分离,分离成开发环境配置文件和生产环境配置文件
|
2月前
|
资源调度 前端开发 数据可视化
构建高效的数据可视化仪表板:D3.js与React的融合之道
【10月更文挑战第25天】在数据驱动的时代,将复杂的数据集转换为直观、互动式的可视化表示已成为一项至关重要的技能。本文深入探讨了如何结合D3.js的强大可视化功能和React框架的响应式特性来构建高效、动态的数据可视化仪表板。文章首先介绍了D3.js和React的基础知识,然后通过一个实际的项目案例,详细阐述了如何将两者结合使用,并提供了实用的代码示例。无论你是数据科学家、前端开发者还是可视化爱好者,这篇文章都将为你提供宝贵的洞见和实用技能。
76 5
|
2月前
|
前端开发 JavaScript
手敲Webpack 5:React + TypeScript项目脚手架搭建实践
手敲Webpack 5:React + TypeScript项目脚手架搭建实践
|
2月前
|
JavaScript 前端开发 开发者
JavaScript框架React vs. Vue:一场性能与易用性的较量
JavaScript框架React vs. Vue:一场性能与易用性的较量
42 0
|
3月前
|
资源调度 前端开发 JavaScript
React中classnames库使用
【10月更文挑战第7天】
|
2月前
|
资源调度 前端开发 JavaScript
React 测试库 React Testing Library
【10月更文挑战第22天】本文介绍了 React Testing Library 的基本概念和使用方法,包括安装、基本用法、常见问题及解决方法。通过代码案例详细解释了如何测试 React 组件,帮助开发者提高应用质量和稳定性。
87 0