【问题标题】:Do I need node.js to use Angularjs?我需要 node.js 才能使用 Angularjs 吗?
【发布时间】:2014-12-11 11:22:27
【问题描述】:

我想在我的网站中使用angular.js 作为我的图像编辑工具。我还需要node.js 吗?

我不明白这个场景。如果我不需要,那我们什么时候同时使用nodejs和angularjs呢?

【问题讨论】:

  • 不同的东西。 (唯一常见的是 JavaScript)
  • 一个是客户端,一个是服务器。客户端中的 JavaScript 不依赖于服务器上的相同语言。这里有什么困惑?
  • 简单来说答案是否定的
  • 在知道什么是 angular 和 node js 之后,这个问题对我来说似乎很愚蠢.. :-P
  • 我觉得Angular官网上的教程让大家一头雾水。它使用 NodeJS 作为后端服务器。事实上,除非您使用 AJAX 或类似的东西,否则您可以只在您的计算机上运行 Angular 而没有任何问题。

标签: javascript node.js angularjs


【解决方案1】:

没有。 Angular 用于客户端,Node 用于服务器端。

他们过去常常以MEAN Stack 的身份一起去,但这不是必须的。

【讨论】:

    【解决方案2】:

    AngularJS 的工作不需要 Node.JS。 NodeJS 是服务器端,AngularJS 是客户端。

    如果您是 AngularJS 新手,我建议您阅读本教程 AngularJS tutorial。 在本教程中,您将使用 NodeJS,您将了解为什么两者可以一起工作,但这不是必需的。

    【讨论】:

      【解决方案3】:

      您不需要 NodeJS 来创建客户端图像编辑工具。

      AngularJS 是一个 Web 应用程序框架,由 Google 和社区维护,可帮助创建单页应用程序,该应用程序由一个 HTML 页面组成,客户端带有 CSS 和 JavaScript。

      但是,如果有一天您希望将这些图像上传并存储在服务器上,并让多个客户端可以访问它们 - 那么是的,您还需要一台服务器。这个服务器可以用 NodeJS 制作。

      【讨论】:

      • 谢谢@Catalin Munteanu。现在我明白它的意思了。
      • 另外,当您需要一台服务器时,我建议您从头开始创建一个。在使用像 MEANSailsJS 这样的复杂框架之前,您需要了解它是如何工作的。
      • ,我正在通过 php 处理服务器上的图像
      • 如果我有一个后端应用程序启动并运行,而我想要构建的只是前端怎么办?仅角度是否足够好?
      • @Arun,如果你想用 AngularJS 构建前端,你不需要 NodeJS。
      【解决方案4】:

      node.js 用于在服务器端编写 Javascript。 angular.js 是一个客户端框架。

      您不需要 node.js 来使用 angular.js,但是,您可以安装 npm(节点包管理器)来使用一些很棒的工具,这将使您作为 Angular 开发人员的生活更加轻松。 例如:yoeman 这是一个很棒的脚手架工具。 npm 上还有许多其他可用的工具,这里是 link to their site 在 Angular 官方网站或 angular youtube channel 了解更多关于 Angular 的信息

      【讨论】:

      • 这个答案是我对 Angular 和 NodeJS 感到困惑的地方:在客户端上,有很多工具 需要 NodeJS——基本上任何使用节点包安装的工具管理器 (npm) 实用程序。我仍然不明白的是,当需要在客户端上托管使用 NodeJS 和 npm 安装包的站点时——您是否还需要在服务器上安装 NodeJS 才能使这些安装的包正常工作?如果答案是“可能”,那么知道 NodeJS 是否也需要在 Web 服务器上涉及哪些因素?
      • 回答您的问题,是和否。 npm 是包管理器。使用npm 安装包与将包及其依赖项复制到本地目录相同。因此,如果您想要 npm 附带的不错的功能,那么您应该安装 npm 并且您需要节点来执行此操作。如果您不需要npm 的功能,那么您不必安装它,您可以自己复制软件包。假设您的网站需要使用此date picker,如果您运行安装注释,它将复制它和 angularjs,或者您可以手动执行此操作。
      • 谢谢——我可能会发布一个新问题以进一步跟进。但我理解你的例子。我是一名 .NET 程序员,将在运行 IIS 的 Windows 服务器上托管。大多数托管公司似乎不支持服务器上的 NodeJS;话又说回来,我在使用 Node 的客户端上所做的大部分工作都是使用它的 npm(包管理器)实用程序来“安装”附加组件/依赖项。在那之后,我确实希望我可以将配置的文件复制到 Web 服务器,并且它们可以在没有节点的情况下运行良好。我不明白为什么我想要服务器上的节点,除非我有控制台访问权限并且可以根据需要在其上运行 npm
      【解决方案5】:

      如果不知道您的图像编辑工具是如何工作的,就很难回答。但是要回答你的问题,不,你不需要 Node.js 来使用 AngularJS。

      Angular 是一个在客户端网络浏览器中运行的前端 javascript 框架。

      Node 是一种可以执行 javascript 的服务,通常在服务器上使用,可能会替代 PHP (like in MEAN stack)。 此外,由于 Node 是一种可以执行 javascript 的服务,因此它可以在您的本地计算机上用于开发 Angular 应用程序以执行后台任务,例如缩小 css 和 javascript 以及执行测试。

      因此,如果您的图像编辑工具是用 javascript 开发的,并且您的应用程序使用 Angular 和 Node(作为 Web 服务器),则代码可以在客户端或服务器端执行。

      阅读 MEAN 堆栈以了解 Node 和 Angular 适合的位置。您甚至根本不需要 Node,但使用同一种语言进行开发非常好。

      【讨论】:

      • 现在我刚刚决定我可以使用angularjs来处理,用户可以上传图像并使用(旋转,裁剪)等选项。我需要管理这些图像这一切都在我的图像编辑工具功能中。
      • 对于像旋转和裁剪这样的用户图像操作,在前端具有该功能是有意义的。对于像调整图像大小这样的常规功能,您可以将其放在节点服务器上以释放客户端资源。如今,客户端硬件非常强大,可能不需要。
      【解决方案6】:

      我感觉到你的痛苦。

      对于刚接触 Angular 2 开发的人来说,我可以感受到必须学习 服务器端技术 以了解本质上是 客户端技术 的东西的痛苦。据我了解:

      1. node.js 仅用于管理 Angular 2 应用程序的依赖关系。如果您可以在不使用node.jsnpmjspm 的情况下设法获得这些依赖项,那么您可以离线运行和开发您的应用程序。但是,手动执行将花费大量时间,因为您必须手动下载文件,这些文件可能具有其他依赖项,需要再次下载其他文件(是的,我去过那里)。 node.jsnpmjspm 就此自动执行此过程并采取配置文件 (jspm) 的所有必要步骤,以便每当您在应用程序中使用特定依赖项时,该特定依赖项的另一个依赖项也将存在于您的系统中。
      2. 出于安全考虑,某些浏览器,尤其是 Google Chrome 会限制本地加载的文件,因此 Angular 2 使用的某些 HTML 5 技术在使用 file: 协议加载时会产生错误。因此,您需要一个服务器来为您的应用程序提供服务,以便所有可用的 HTML 5 技术都可供 Angular 2 运行。
      3. node.js 也需要hot-module-reload 功能来快速应用程序开发,因为它提供了file watcher api 来检测源代码的更改。

      但是有一种方法可以在没有 node.js 的情况下离线开发 Angular 2 应用程序。

      1. 还记得我说过如果你能设法获得所有必需的依赖项,你就可以离线运行和开发你的应用程序吗?如果您能以某种方式找到或创建一个包,其中包含您的应用程序所需的所有依赖项,那么您不需要 npm 或 jspm 来为您管理依赖项。
      2. 对于file-access-restriction 问题,您可以将项目加载为扩展。扩展能够使用所有可用的 HTML 5 技术以及一些强大的 api(甚至对服务器上提供的应用程序也不可用),同时在您的开发环境中是本地的。因此,如果您将应用程序用作扩展程序,则无需启动 Web 服务器来访问 HTML 5 技术。
      3. 对于hot-module-reload 功能,您可以从其他方式接近它。您可以从应用程序本身执行此操作,而不是在 Web 服务器中使用文件监视器来监视本地系统中文件的更改。由于应用程序可以fetchxmlhttprequest 应用程序需要的资源,您可以定期fetchxmlhttprequest 应用程序需要的资源并将其与一些缓存进行比较。但是你怎么知道要检查哪些文件?您可以在页面中查找linksscriptimg. 如果您使用 SystemJS 作为模块加载器,那么您可以使用它的注册表来查找您的应用程序需要但未加载到页面中的文件,因为它已经被转译了。虽然执行所有这些操作可能会消耗系统的性能,并且会增加转译或预处理非本地代码的开销,但这项工作可以外包给web worker,这将为您的应用程序释放系统中的主执行线程代码。

      不相信我?这是证据。

      1. github 上的 Angular in Chrome 项目包含一个 zipped package,其中包含开发最小 Angular 2 应用程序所需的依赖项(最小,我指的是快速入门页面上提到的英雄之旅教程)。因此,如果您使用的是 node.js 不支持的系统(是的,例如 ChromeOS),或者只是在 node.js 不可用的受限系统上,所有必需的依赖项都可用,而您不需要 npm 或 jspm 为您管理所需的依赖项。
      2. 有一个 proof of concept extension 作为 Chrome 扩展在本地提供英雄之旅教程(开发文件、打字稿和所有内容)。
      3. 该扩展还通过挂钩到由 alexis vincent 为 SystemJS 开发的 hmr-primitives 来实现 hot-module-reload 功能。 hot-module-reload 功能由单个 javascript 文件启用,因此如果不需要此功能或占用过多资源,则只需删除有问题的代码行。

      但请注意。

      1. 如果您正在使用这个系统,那么您需要一种方法来更新您的开发包,因为技术向前发展并且速度很快(当 Angular 2 刚刚发布时谈论 Angular 3)或技术您用于开发应用程序的应用程序可能会过时,或者某个地方的 api 更改可能会阻止您的应用程序在未来正常运行。由于这些类型的包是手动维护的,因此也不保证您拥有最新的依赖项存储库。
      2. 将您的应用程序捆绑为 Chrome 扩展程序(如 Chrome 中的 Angular)会引入性能瓶颈。由于代码被转译并且模块被延迟加载,因此您失去了 JIT 编译的进步和现代 javascript 引擎用于优化在浏览器上运行的代码的其他性能增强。然而,你在性能上失去了什么,你获得了使用你喜欢开发的技术的灵活性。总有一个权衡。此外,性能影响只是在代码加载的开始。一旦它被应用程序加载,系统就会知道如何实现性能增强。当您分发应用程序时,您确实需要编译所需的资源以利用现代 javascript 引擎的性能增强。
      3. hot-module-reload 功能目前是实现文件监视器的一种骇人听闻的方式,它使用项目的通用约定(temp1.ts、temp1.css、temp1.htm),因为没有办法(我可能在这方面错了) 以获取应用程序所需但未加载到主页上的所有资源的最终列表(已转译或预处理的资源)。

      【讨论】:

      • 这应该是公认的答案。我刚刚有这个问题,你清除了我什至没有的困惑。太棒了...
      • 我不同意,nodejs 不是唯一的服务器端技术。我认为问题更多的是关于使用需要安装 nodejs 的 grunt、yeoman 等。
      【解决方案7】:

      安装 NodeJs 的原因 由于 Chrome、Firefox 等 Web 浏览器仅支持 JavaScript,因此我们必须将 Typescript 转换为 JavaScript。因此,Typescript 转译器需要 Node.js 来将 Typescript 代码生成为 JavaScript。

      【讨论】:

        猜你喜欢
        • 2011-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多