我一直在寻找一种方法来分割我的单页应用程序的js文件。像这样:
plugins.js
open.js
closed.js
admin.js
因此,当用户加载第一页时,会加载plugins.js和open.js.另一个只在特定页面中加载(如关闭的部分或管理部分,这是关闭的,所以我会在其他页面之后加载它)。今天我所有的应用用户都加载了整个重量级的javascript文件。
我可以使用require.js吗?我找不到这种方法的任何参考。
感谢。
答案 0 :(得分:3)
请查看require-lazy。它是功能性的,但文档目前有点缺乏,所以最好的办法是看看这些例子。
简而言之,它的作用是在优化器(r.js)之上创建一个层,以便感知应用程序分割点并生成适当的包。可以使用lazy!
AMD插件明确声明应用程序拆分点:
define(["module1","lazy!module2"], function(m1,m2) {...});
在上面的情况中,未加载module2
;注入具有get()
方法的对象。仅在调用module2
时才会加载m2.get()
(它返回一个promise)。构建过程将为上述案例创建2个包:一个包含主文件module1.js
,另一个包含module2.js
。
我还实现了“发现”模块的机制,请参阅module-discovery
示例。
相关项目:require-lazy-grunt(即将起飞)和angular-require-lazy。
答案 1 :(得分:1)
您可能需要查看Grunt.js并将其与其contrib-uglify
插件结合使用。我已经制作了一个简单的样板包来帮助我开始新项目,包括Grunt
和简单的contrib-uglify
实施here。
您必须指定哪些文件应该连接到哪些文件中,然后您可以根据应用中的位置动态加载每个文件。
您还可以使用Modernizr对/和/进行功能检测,或者将相应的类分配给页面上的html标记,然后使用Yepnope有条件地异步加载资源并仅提供您的文件用户需要 - 根据可用的功能或仅基于您定义的类,例如contact-page
。
答案 2 :(得分:1)
您可以将JS代码分成几个较小的文件。然后在每个页面的<head>
部分仅包含相关的JS文件。
<head>
...
<script type="text/javascript" src="plugins.js"></script>
<script type="text/javascript" src="open.js"></script>
</head>
如果您确实需要决定是否动态加载脚本文件,那么RequireJS将完成这项工作。它在他们的网站上有很好的文档记录如何使用它。但是,根据我的理解,这对你的案子来说太过分了。
答案 3 :(得分:0)
为了这个目的,我建议使用Webpack而不是requireJS。 Webpack是为了将前端代码编译在一起而明确设计的 - 即将依赖关系从多个模块中生成单个js文件 - 然后根据每个页面的需要将其拆分为多个文件。这不是一个完整的180度更改 - 您可以保留大部分的requireJS语法,因为它支持开箱即用的AMD模块(以及UMD和CommonJS)。 The process of switching isn't too complicated
它还可以用于监视您的文件,并在其中一个更改时自动重新编译 - 因此可以持续保持代码的正确分割。
它还在RequireJS之外做了许多非常酷的事情,比如处理CSS和JS文件之间的交叉依赖关系,将请求的填充程序注入所有文件等等。
另外,我发现在integrated into a Gulp autocompile workflow时,Webpack特别强大。你不必 - 我刚刚发现这种组合效果特别好。
答案 4 :(得分:0)
当然!
Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
objNamespace.Logon "Default Outlook Profile", , False, True
Set objFolder = objNamespace.GetDefaultFolder(olFolderInbox)
objFolder.Display
End Sub
和dir
的优化配置选项是您的需要。
你应该写这样的东西,一个优化器配置文件和多个缩小的javascript文件:
modules
}
请务必查看requirejs官方multipage demo 和module config option