webpack, react项目中利用外部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引入,而不需要再次构建,达到跨项目的重用。
时间: 2024-08-22 15:01:43

webpack, react项目中利用外部JS库提升效率的相关文章

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

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 项目中有1000万条历史案卷,为某地方坐标系数据,我们的真实需求是将地方坐标系坐标反转成WGS84坐标,如果现在需要将其转换成百度坐标系数据.常规方案是先建立好整个该市的本地坐标和百度坐标之间的控制点库后再进行转换.但是在具体实施中发现转换特别慢,由于控制点库也有200多万条记录,大概一个点需要一秒钟才能转换完. 2.将Update变成Insert关键字段值

spring mvc-SpringMVC web项目中如何引入js,css等文件

问题描述 SpringMVC web项目中如何引入js,css等文件 在springmvc的web项目中,如何在html文件中引入本地的jscss等文件,试了很多种方法,发现路经都不对,都报404 Notfound的错.项目的目录结构:同时在springmvc-servlet.xml中添加了配置:在index.html中如此引用js: 然后每次都说找不到这个js文件. 解决方案 web项目js css静态文件缓存解决引入外部css ,js文件 解决方案二: 貌似要放在WebRoot底下新建一个文

在html中引入外部js文件,并调用带参函数的方法_javascript技巧

在html中引入外部js文件,并调用js文件中的带参函数 1 项目结构 2 编写a.js.test.html //a.js function abc(str){ alert(str); } //test.html <html> <head> <script type="text/javascript" src="a.js"></script> <script type="text/javascript&

在数据库访问项目中使用微软企业库Enterprise Library,实现多种数据库的支持

在我们开发很多项目中,数据访问都是必不可少的,有的需要访问Oracle.SQLServer.Mysql这些常规的数据库,也有可能访问SQLite.Access,或者一些我们可能不常用的PostgreSQL.IBM DB2.或者国产达梦数据库等等,这些数据库的共同特点是关系型数据库,基本上开发的模型都差不多,不过如果我们基于ADO.NET的基础上进行开发的话,那么各种数据库都有自己不同的数据库操作对象,微软企业库Enterprise Library是基于这些不同数据库的操作做的抽象模型,适合多数据

java web-在java项目中打开外部文件

问题描述 在java项目中打开外部文件 在项目开发中,界面有一个字段用于填写外部文件夹的地址类似"xmcode"这样,然后需要通过点击这个地址打开相应的文件夹, <a href="//xm/code"> 在IE可以使用,但在ff和chrome不行,打开的时候会自动带上项目的域名,另外使用 file:前缀也不行 解决方案 这就是兼容问题,所以最好要写成全称 解决方案二: 解决方案三: <a href="//xm/code">

在项目中利用TX Text Control进行WORD文档的编辑显示处理

在很多文档管理的功能模块里面,我们往往需要对WORD稳定进行展示.编辑等处理,而如果使用微软word控件进行处理,需要安装WORD组件,而且接口使用也不见得简单易用,因此如果有第三方且不用安装Office的能够展示WORD及进行编辑,那是比较不错的选择,TX Text Control就是这样的控件,本文就是基于这个控件的使用,实现在文档管理项目中的应用. 1.TX Text Control的介绍及使用 TX Text Control是一款功能类似于 MS Word 的文字处理控件,包括文档创建.

在Word文档中利用“一键粘贴”提高工作效率

剪贴键是Ctrl+X,复制键是Ctrl+C,粘贴键是Ctrl+V,从开始借助电脑开始 ,很多用户就先学会了这些.而这三个快捷键也是大家用的最多的.但在Office Word软件中,实际通过设置,可开启键盘"一键粘贴"功能,无需再 使用组合键,同样可粘贴文字内容. 设置方法非常简单,用户点击Office图标菜单,选择"Word"选 项,进入到"高级"选项卡中,此时在右侧找到并勾选"使用 Insert粘贴".点击确定.此时即可开启

“.NET研究”在VS2010项目中引用Lib静态库(以Openssl为例)

Openssl是个为网络通信提供安全及数据完整性的一种安全协议,囊括了主要的密码算法.常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用. 首先下载Openssl包:(http://www.openssl.org/),这是一个C语言类库包,在Windows下可以通过Perl对该类库包进行MakeBuild,产生libeay32.ssleay32的Lib以及Dll文件,上海企业网站制作具体操作详见:http://blogger.org.cn/blog/more.

一起谈.NET技术,在VS2010项目中引用Lib静态库(以Openssl为例)

Openssl是个为网络通信提供安全及数据完整性的一种安全协议,囊括了主要的密码算法.常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用. 首先下载Openssl包:(http://www.openssl.org/),这是一个C语言类库包,在Windows下可以通过Perl对该类库包进行MakeBuild,产生libeay32.ssleay32的Lib以及Dll文件,具体操作详见:http://blogger.org.cn/blog/more.asp?name