热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

运用bundleloader异步加载reactrouter

重要手艺栈React,React-redux,React-router,Typescript,antd,Immutable,…需求由于项目是一个SPA页面,跟着项目的不停迭代,进口

重要手艺栈

React,
React-redux,
React-router,
Typescript,
antd,
Immutable,
…

需求

由于项目是一个SPA页面,跟着项目的不停迭代,进口文件逐步增大(app.js),所以想削减进口文件的体积。

计划

计划一:

  • webpack(require.ensure)+ react-router

由于运用require.ensure须要充足深的文件层级而且在对应文件须要定义index.ts文件作为require.ensure进口,誊写起来比较贫苦,而且相对于工作量来讲也是大有增添(详细的完成计划网上也比较多),故没有挑选。

计划二:

  • webpack(bundle-loader)+ react-router(lazyLoadComponent)

上风:
1、不必过量的文件层级,坚持文件的prue。
2、不必本身定义require.ensure

装置bundle-loader

npm install bundle-loader --save-dev

webpack中加载loader(这里运用的是webpack2)

export default {
entry: entries,
output: {
path: __dirname,
filename: `${dist}/js/[name].js`, // 这里的dist是我定义的变量
publicPath: 'https://127.0.0.1/', // 这里很症结=>零丁拿出来诠释
},
resolve: {
extensions: [
'.js',
'.jsx',
'.ts',
'.tsx',
'.css',
'.less',
'.json',
'.gif',
'.html',
'.png',
'.webp',
'.jpg',
],
},
module: {
rules: [
{
test: /\.jsx?$/,
loader: 'babel-loader',
},
{
test: /\.(tsx|ts)/,
exclude: [
path.resolve(__dirname, "src/pages/")
],
loader: 'ts-loader',
},
{
test: /src\\pages(\\.*).(tsx|ts)/,
use: [
'bundle-loader?lazy',
'ts-loader',
],
},
{
test: /\.(less)?$/,
use: [
'style-loader',
'css-loader',
'less-loader',
],
// loader: 'style!css!less'
},
{
test: /.css$/,
loader: extractCSS.extract({
fallbackLoader: 'style-loader',
loader: 'css-loader',
}),
},
{
test: /\.(jpg|png|gif|jpeg)?$/,
loader: `url-loader?limit=20480&name=${dist}/images/[name].[hash:8].[ext]`,
},
{
test: /\.(eot|woff(2)?|ttf|svg)?(@.+)*$/,
loader: `url-loader?limit=20480&name=${dist}/other/[name].[hash:8].[ext]`,
}
],
},
plugins: [

/**
* DllReferencePlugin
*/
new DllReferencePlugin({
context: __dirname,
manifest,
}),
/**
* CommonsChunkPlugin
*/
new CommonsChunkPlugin({
name: 'common',
filename: `${dist}/common.js`,
minChunks: 2,
chunks: entriesKey
}),
],
devtool: 'cheap-module-source-map',
devServer: {
port,
https,
contentBase: ROOTPATH,
compress: true,
inline: true,
quiet: false,
stats: { colors: true },
watchOptions: {
aggregateTimeout: 300,
poll: true,
},
headers: {
'Access-Control-Allow-Origin': '*',
},
}
};

设置详解

{
test: /src\\pages(\\.*).(tsx|ts)/,
use: [
'bundle-loader?lazy',
'ts-loader',
],
},

test:是我写的正则用来婚配我须要异步加载的文件,而且运用use中的bundle-loader->ts-loader。
(ps:在ts-loader编译全局文件时,须要exclude[须要异步加载的途径])

route设置

// router.tsx

import * as EffectiveCustomer from './pages/wuyoubao/customerManagement/effectiveCustomer';
function lazyLoadComponent(lazyModule) {
return (location, cb) => {
lazyModule(module => cb(null, module.default));
}
}






注意事项

由于router.tsx中援用的tsx全部是被bundle-loader编译的,而bundle-loader对ES6特征支撑不是很好,比方:

  • ES6能够剖析

import { OrderInfoMessage } from './fundConfirmCom/fundConfirmInfoOrder';
console.log(OrderInfoMessage)
// 能够剖析

然则这类体式格局bundle-loader剖析不了,它所能剖析的体式格局:

  • bundle-loader剖析module

import { OrderInfoMessage } from './fundConfirmCom/fundConfirmInfoOrder';
console.log(OrderInfoMessage) // undefined
// bundle-loader能够辨认的体式格局:
import * as OrderInfoMessage from './fundConfirmCom/fundConfirmInfoOrder';
console.log(OrderInfoMessage) // 能够剖析

推荐阅读
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • RN即ReactNative基于React框架针对移动端的跨平台框架,在学习RN前建议最好熟悉下html,css,js,当然如果比较急,那就直接上手吧,毕竟用学习前面基础的时间,R ... [详细]
  • 本文介绍了如何使用vue-awesome-swiper组件,包括在main.js中引入和使用swiper和swiperSlide组件,以及设置options和ref属性。同时还介绍了如何在模板中使用swiper和swiperSlide组件,并展示了如何通过循环渲染swipes数组中的数据,并使用picUrl属性显示图片。最后还介绍了如何添加分页器。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
  • React 小白初入门
    推荐学习:React官方文档:https:react.docschina.orgReact菜鸟教程:https:www.runoob.c ... [详细]
  • 由于同源策略的限制,满足同源的脚本才可以获取资源。虽然这样有助于保障网络安全,但另一方面也限制了资源的使用。那么如何实现跨域呢,以下是实现跨域的一些方法。 ... [详细]
  • 1223  drf引入以及restful规范
    [toc]前后台的数据交互前台安装axios插件,进行与后台的数据交互安装axios,并在main.js中设置params传递拼接参数data携带数据包参数headers中发送头部 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • 必须先赞下国人npm库作品:node-images(https:github.comzhangyuanweinode-images),封装了跨平台的C++逻辑,形成nodejsAP ... [详细]
author-avatar
暴君1566
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有