前言

现在很多前端项目在构建时,都是一个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引入,而不需要再次构建,达到跨项目的重用。

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

  1. Vue项目中利用pdf.js实现pdf内容滑选文字展示与搜索功能

    Vue项目中利用pdf.js实现pdf内容滑选文字展示与搜索功能 需求:在pdf中鼠标滑动选中一段文字,将选中文字展示到input框中(pdf在iframe中) 完成效果: 关于pdf的引用:我是直接 ...

  2. react本地储存_如何在React项目中利用本地存储

    react本地储存 以及为什么要这么做. 本地存储是现代Web浏览器固有的Web API. 它允许网站/应用程序在浏览器中存储数据(简单和有限),从而使数据在以后的浏览器会话中可用. 在开始学习本教程 ...

  3. react项目中使用three.js(解决纹理贴图路径问题)

    一,本文解决如下问题 1. 在react脚手架的项目中使用three.js 2. three.js在react中使用动态的纹理贴图遇到的路径问题 3. this.指向的丢失问题 二,在项目中使用thr ...

  4. VUE 项目中引入外部js文件(CND引入)

    以VUE项目中引入echarts文件为例: 第一步在VUE项目中找到index.html文件 引入 :<script src="https://cdnjs.cloudflare.com ...

  5. mysql每10万条数据分区_WebGIS项目中利用mysql控制点库进行千万条数据坐标转换时的分表分区优化方案...

    1. 背景 项目中有1000万条历史案卷,为某地方坐标系数据,我们的真实需求是将地方坐标系坐标反转成WGS84坐标,如果现在需要将其转换成百度坐标系数据.常规方案是先建立好整个该市的本地坐标和百度坐标 ...

  6. 实用有效!React项目中使用watermark.js添加水印效果

    为了避免公司的内部文档被截图外泄,有必要在系统页面上面增加水印. 第一步: 下载依赖包: npm install watermark-dom package.json中会添加一个依赖如下: " ...

  7. react项目中使用mocha结合chai断言库进行单元测试

    react项目中使用mocha结合chai断言库进行单元测试 git地址:https://github.com/yancekang/... 如果对你有所帮助,感谢start 项目搭建 create-r ...

  8. 中使用js修改变量值_谈一谈css-in-js在React项目中的使用

    一.什么是css-in-js 参考:[css in js 简介] 简单来说,传统的前端方案推崇"关注点分离"原则,HTML.CSS.JavaScript 应该各司其职,进行分离. ...

  9. 了解CSS in JS(JSS)以及在React项目中配置并使用JSS

    目录 认识JSS 什么是JSS JSS 的常见实现 JSS 的好处与坏处 好处 坏处 使用模块化CSS实现JSS 安装插件 在React项目中的tsconfig.json中添加配置 vscode项目中 ...

  10. 前端React项目中实现萤石云ezuikit摄像头的播放与控制

    最近要在react项目中使用萤石云提供的ezuikit库来接入萤石云摄像头,实现远程播放.控制移动.放大缩小等功能,首先百度搜类似的需求,搜不到,只能自己采坑,登萤石云官网,看对应文档. 一.登录萤石 ...

最新文章

  1. PHP中的MYSQL常用函数(php下操作数据库必备)
  2. 博士申请 | 纽约州立大学布法罗分校招收ML/AI方向全奖博士生
  3. 一个filter子查询测试
  4. 这位电子工程师,你不能错过。
  5. 二分查找和二叉查找树
  6. [delphi]极域学生端解除键盘鼠标锁定退出全屏广播-强制窗口化-源代码
  7. 程序员如何探索新技术
  8. 机器学习降维之主成分分析
  9. 如何调整计算机显卡,教你n卡发挥最大性能,电脑怎么设置独立显卡-
  10. php euc-cn,php配置中文解说
  11. 组合逻辑设计中的毛刺现象
  12. 泰山OFFICE技术讲座:英寸,厘米,磅,派卡,提,行,字行,像素的换算关系
  13. 配置局域网内电脑快速传输数据
  14. PTA数据库题目集第一章
  15. 书论57 陈绎曾《翰林要诀》
  16. JS原生:XMLHttpRequest发送GETPOST请求
  17. jQuery动画序列
  18. ###岁月静好###
  19. [WinCE] Win CE 屏幕截图
  20. c语言led灯汉字编码,单片机led灯板显示汉字程序

热门文章

  1. 性能测试--jmeter中的察看结果树【7】
  2. pb数据窗口显示图片_AkShare股票数据A股市净率
  3. python comprehensions_Python中的Comprehensions和Generations
  4. ubuntu安装maven_Linux操作系统下将项目发布到Maven中央仓库图文教程
  5. 帆软控件焦点事件设置可用性
  6. mysql5.5安装最后一步一直无反应_吉林电泳型材安装
  7. typecho图标_使你的Typecho支持Emoji表情
  8. 您与此网站建立的连接不安全_CDN加速网站SEO优化,这就是CDN
  9. DOM编程系列之Node对象个人分享
  10. Python学习之路28-符合Python风格的对象