当前位置: 首页 > 面试题库 >

浏览器内JavaScript是否需要节点样式?

阎元徽
2023-03-14
问题内容

浏览器内的JavaScript是否有提供与Node相同的灵活性/模块化/易用性的库require

提供更多细节:原因require如此好:

  1. 允许从其他位置动态加载代码(在我看来,这比在HTML中链接所有代码在样式上更好)
  2. 它为构建模块提供了一致的界面
  3. 模块很容易依赖其他模块(因此,我可以编写一个需要jQuery的API,以便我可以使用 jQuery.ajax()
  4. 加载的javascript是有 作用域的 ,这意味着我可以加载var dsp = require("dsp.js");并且可以访问dsp.FFT,而不会干扰本地var FFT

我还没有找到可以有效执行此操作的库。我倾向于使用的解决方法是:

  • coffeescript-concat-需要其他js很容易,但是您必须对其进行编译,这意味着它对于快速开发(例如,在测试中构建API)的功能不太好

  • RequireJS-它很流行,简单易用,可解决1-3,但缺乏作用域是一个真正的难题(我相信head.js与之类似,因为它缺乏作用域,尽管我从未有过使用它的机会。同样LABjs可以加载并缓解.wait()依赖关系问题,但仍然无法进行作用域设置)

据我所知,似乎有许多动态和/或异步加载javascript的解决方案,但它们往往具有与仅从HTML加载js相同的范围问题。最重要的是,我想要一种加载javascript的方法,它完全不会污染全局名称空间,但仍然允许我加载和使用库(就像节点的require一样)。

编辑(我的回答):
自编写此书以来,我已广泛使用RequireJS(现在有更清晰的文档)。在我看来,RequireJS确实是正确的选择。我想澄清一下该系统如何为像我一样困惑的人们工作:

您可以require在日常开发中使用。模块可以是函数(通常是对象或函数)返回的任何东西,并且范围可以作为参数。您还可以将项目编译到单个文件中以进行部署r.js(实际上,尽管require可以并行加载脚本,但这样做几乎总是更快)。

RequireJS和节点风格的require之间的主要区别在于,例如browserify(tjameson建议一个很酷的项目)使用的是模块的设计和需求方式:

  • RequireJS使用AMD(异步模块定义)。在AMD中,require获取要加载的模块(javascript文件)列表和回调函数。加载每个模块后,它将使用每个模块作为回调的参数来调用回调。因此,它确实是异步的,因此非常适合Web。
  • 节点使用CommonJS。在CommonJS中,require是一个阻塞调用,它将加载模块并将其作为对象返回。这对于Node来说效果很好,因为文件是从文件系统中读取的,速度足够快,但在Web上效果不佳,因为同步加载文件可能需要更长的时间。

实际上,许多开发人员在使用AMD之前就已经使用过Node(因此也使用了CommonJS)。此外,许多库/模块是为CommonJS(通过向exports对象添加内容)而不是为AMD(通过从define函数返回模块)而编写的。因此,许多由Node.com转变为Web的开发人员都希望在Web上使用CommonJS库。这是可能的,因为<script>标签的加载受到阻碍。诸如browserify之类的解决方案采用CommonJS(Node)模块并将其包装起来,以便可以将它们包含在脚本标签中。

因此,如果您正在开发自己的Web多文件项目,强烈建议使用RequireJS,因为它确实是Web的模块系统(尽管公平地公开,我发现AMD比CommonJS自然得多)。最近,区别变得不那么重要了,因为RequireJS现在允许您实质上使用CommonJS语法。另外,RequireJS可用于在Node中加载AMD模块(尽管我更喜欢node-
amd-loader)。


问题答案:

检出ender。它做了很多。

我不确定RequireJS。它与节点的不同。您可能会遇到从其他位置加载的问题,但是可能会起作用。只要有一个provide方法或可以调用的东西。

TL; DR- 我建议使用browserify或require-kiss。

更新:

require-kiss现在已死,作者已将其删除。从那以后,我一直在使用RequireJS而不出现问题。require-kiss的作者写了pakmanager和pakman。全面披露,我与开发商合作。

我个人更喜欢RequireJS。它易于调试(开发中可以有单独的文件,生产中可以有一个部署的文件),并且建立在可靠的“标准”上。



 类似资料:
  • 本文向大家介绍javascript 判断是否是微信浏览器的方法,包括了javascript 判断是否是微信浏览器的方法的使用技巧和注意事项,需要的朋友参考一下 用js判断当前环境是否是是微信内置浏览器有两个方法: 1.判断useragent 2.判断是否支持微信内置浏览器才支持的一些方法,比如WeixinJSBridge 本次先介绍第一中方法,第二种方法等哪天再更新! 判断代码如下: 就是如此简单

  • 问题内容: 为了澄清当我询问浏览器到浏览器的通信时,我的意思是在转发消息之间没有服务器。我想为游戏实现这样的功能。如果无法在websockets中使用p2p,是否有类似的选择?任何帮助表示赞赏。 问题答案: 否。浏览器只能启动WebSockets连接,不能接收它们。在W3C的浏览器API规范只定义了如何启动出站连接。 您可以创建一个既可以启动也可以接受WebSockets连接的应用程序,但是浏览器

  • 我下面的一些教程,以建立一个同构的应用程序与表达和反应。我与webpack开发服务器混淆。 webpack教程介绍了webpack开发服务器: 这将绑定localhost:8080上的一个小型express服务器,它为您的静态资产和捆绑包(自动编译)提供服务。 当包被重新编译(socket.io)时,它会自动更新浏览器页面。在浏览器中打开http://localhost:8080/webpack-

  • 问题内容: 是否有可靠的跨浏览器方式来检测选项卡是否具有焦点。 场景是,我们有一个应用程序会定期轮询股票价格,如果页面没有重点关注,我们可以停止轮询并为每个人节省交通噪音,尤其是当人们热衷于打开具有不同投资组合的多个标签时。 是并且为此选择吗? 问题答案: 是的,并且应该适合您的方案: http://www.thefutureoftheweb.com/blog/detect-browser-win

  • 我正在使用RemoteIE应用程序(https://developer.microsoft.com/en-us/microsoft-edge/tools/remote/)呈现一个包含CSS3 SVG动画的HTML页面。就像在IE11中一样,动画不起作用。在firefox&chrome的最后一个版本中,动画的效果和预期的一样。 另一方面,RemoteIE应用程序的信息称“此版本的Internet E

  • 问题内容: 我需要一些返回布尔值的函数来检查浏览器是否为Chrome。 如何创建此类功能? 问题答案: 更新:以获取更新的处理方式。以下答案可能仍然有效,但可能会在其他浏览器中引发误报。 但是,如前所述,用户代理可以被欺骗,因此在处理这些问题时总是最好使用功能检测,如其他答案所述。