如果我仍然把所有文件集中在构建上,我为什么要使用require.js ?
Why should I use require.js if I still concenate all files on build?
编写模块化的、独立的可测试代码确实很有意义——特别是对于大项目。
但是使用require.js
/amd
在一个我仍然需要集中的大项目中有什么不同?在构建时缩小我的项目?
我想先说一下,我确实认为Require.JS是一个完全无用的框架。它使一个相当简单的概念过于复杂。
也就是说,在编写与平台无关的代码时,依赖加载非常有用。
例如,假设你想开发一个web应用程序,你也可以移植到移动应用程序的Apache Cordova和桌面应用程序的AppJS。您不希望重写所有的业务逻辑,因此构建一个能够动态加载依赖项以使软件适应多种体系结构的引导程序是有意义的。这样你就只拥有一款能够在各种平台上运行的产品。在服务器端脚本中添加NodeJS的使用,您不仅可以编写前端软件,还可以使用完全相同的代码编写后端。
模块化对跨平台项目有很大帮助,但正如我所说:Require.JS真的没有那么有用。我发现它太复杂了。相反,我只是使用一个围绕jQuery的getScript函数构建的对象,该函数包含所有已加载包的注册表,以便开发人员不会尝试加载已经加载的包(更大的项目)。require.js有很多优点,例如:
- 条件加载
- 异步加载
- <
- 逻辑模块/gh>
- 嵌套依赖的抽象 <
- 多版本支持/gh>自动缩小
Require.js确实建议使用一个(或多个,如果这是适合你的项目)JS文件在生产中为你的JavaScript,所以你所做的是常见的小项目。我认为在小项目中使用它有两个主要原因(@Wolfgang Stengel列出了所有的好处)。
如果你在JS文件中结合jQuery或其他库,这可能不是正确的事情。如果你可以使用CDN复制,很可能用户已经在他们的机器上下载了该文件,这将花费更少的时间来加载JavaScript。
另一个好处是异步加载。这将使你的JavaScript加载不会阻碍网页的呈现。对于最终用户来说,一个显示速度更快的网页通常被认为是一个更快的网站。
相关文章:
- 为什么我不能在 node.js(浏览器化)的 require() 函数中使用变量作为参数
- 为什么require.js似乎在初始页面加载时加载了我的所有模块
- 为什么“require”在Duktape中会导致错误
- 为什么nodejs's require在此闭包中无法使用调试器控制台访问?可能的v8优化
- 为什么可以't我在require.js中使用jquery
- 困惑为什么我在 Node.js (require.js) 中收到此错误
- 为什么require(“Angular”)返回一个空对象
- 为什么@require jQuery 会在具有 @run-at 文档启动的脚本中抛出错误
- 为什么我不能在require.js中两次使2个路径指向同一个文件
- 为什么这个图表d3.js不适用于require.js
- Angular + Webpack:为什么用template:require(file.html)比用templateU
- RequireJS似乎忽略了我的路径定义(我没有在html中调用require()).为什么
- 为什么不使用webeextension (FireFox的Chrome扩展)定义Require
- 为什么错误信息&;SyntaxError: let是一个保留标识符require.js:52:2&;在开发firefox
- 为什么可以'我是否使用require()导入的javascript文件中的函数
- 为什么Dojo 1.6不能在IE8中使用Dojo .require正确加载javascript文件?
- 为什么browserfy在调用require之前加载每个模块
- 为什么节点上的requirejs在继续之前没有加载指定的require
- 为什么在javascript中使用var{VariableName}=require('')
- 为什么require.js进入head标签