如何在SPA中只加载模块相关的内容
How to load only module related content in SPA?
我正在研究一个大型骨干单页应用程序,我们在</body>
标记之前按顺序指定了所有JS文件。然后,在生产中,我们使用grunt-usemin
连接并制作单个最小化的app.min.js文件用于生产。此外,所有模板都使用grunt-contrib-handlebars
转换为JS,并连接到相同的app.min.js文件中。
随着代码的增长,app.min.js文件的大小已经上升到1.25MB,这个应用程序还有很长的路要走。还有许多主要部分有待开发。
同时,我不想在用户访问每个屏幕时加载5个或更多的JS文件和相同数量的模板。相反,我想要有模块和加载单个模块文件,用户可以浏览整个模块而不加载任何其他JS文件。
我还希望这些模块文件被最小化,优化和旋转(缓存破坏)生产
我正在查看require.js和它的优化器。我刚刚开始使用require.js实现我们的下一个模块之一,当我开始构建部署时,似乎rjs优化器创建了单个输出文件,这让我回到了原点。
是不可能做什么我正在寻找使用require.js,还是我错过了什么?或者有比require.js更好的解决方案吗?
注意:虽然使用loader有一个好处,即使一次加载一个大文件,当我只需要一个模块的代码时,我不想加载整个代码。
可以构建成多个文件。内部需求:compile:options:做如下
modules: [
{
name: '../build1',
include: [
// 3rd party libs
'backbone', //the reference to these files are present in paths: property
'underscore'
]
},
//build 2
{
name: '../build2',
include: ['build2ReqFile1','build2ReqFile2'],
// Excludes all nested dependencies and built dependencies from "common"
exclude: ['../build1','build2UnReqFile1']
},
//build 3
{
name: '../build3',
include: ['build3ReqFile1','build3ReqFile2'],
// Excludes all nested dependencies and built dependencies from "common"
exclude: ['../build1','../build2','build3UnReqFile1']
},
]
更新说明是的,这是单页应用程序。
这里有几件事要理解-每当你定义即define('app/test',['app/load1','app/load2'],function(load1Ref, load2Ref){})
,新的脚本标签被添加到dom和一个数据-xyz =模块的名称即<script data-xyz = 'app/test' src = '' type='text/javascript'>
被添加。我不记得xyz的名字了。
定义的返回值存储在上下文data-xyz中。所以当你需要(['app/test'])时,它会返回app/test脚本的data-xyz中存在的值。
现在,当你构建时,所有被引用的require和define都被构建到一个.js中。因此,通过上述操作,您可以拥有多个构建,在其中您可以提到每个构建应该包含或排除哪些定义。
所以这些构建不是所有的javascript文件缩小和编译成一个/多个文件。根据您需要的文件,您需要包含这些构建文件。
如果你需要'build2ReqFile1','build2ReqFile2',那么你可以只包括build2.js在你的代码,如果你想骨干和下划线随着'build2ReqFile1','build2ReqFile2',那么你需要包括build2.js和build1.js
清楚吗?
- 带有模块加载程序的Emscripten
- 使用Socket.io的异步模块加载(AMD)
- 角度模块加载错误
- NaCl中的模块加载进度事件,manifest_version=2,没有内联javascript
- 节点.js - 异步模块加载
- Angular2&SystemJS:在生成模块加载器时找不到模块
- 当作为 CommonJS 模块加载时,Angular 是否全局将自己分配给“window.angular”
- 杜兰达尔/要求:模块加载和执行
- 主干木偶:木偶.应用程序导致 Require.js 模块加载错误,“'错误:尚未为上下文加载模块名称'A
- 将库从节点模块加载到 nodeJS 中
- 道场模块加载一般
- 在JS模块加载的上下文中,什么是立即执行的工厂函数
- 如何将angularJS模块加载到应用程序中
- 角度模块加载失败
- require.js模块加载不正确
- 如何等待Angular模块加载
- SystemJS-ES6模块加载器-导入时层次结构过多
- 如何用oclazyload加载的外部模块加载Angular translate
- 运行从ecmascript 6模块加载的函数
- 了解 YUI 模块加载和附加