使用require.js在多个JS文件中拆分app的javascript

时间:2013-10-30 22:05:51

标签: javascript file split requirejs

我一直在寻找一种方法来分割我的单页应用程序的js文件。像这样:

plugins.js
open.js
closed.js
admin.js

因此,当用户加载第一页时,会加载plugins.js和open.js.另一个只在特定页面中加载(如关闭的部分或管理部分,这是关闭的,所以我会在其他页面之后加载它)。今天我所有的应用用户都加载了整个重量级的javascript文件。

我可以使用require.js吗?我找不到这种方法的任何参考。

感谢。

5 个答案:

答案 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 demomodule config option