node.js - 关于 reactJS、nodeJS 和 NPM 的一般问题
问题描述
首先,我知道的“事实”:
- reactJS 是前端框架,编译后会生成一堆现代浏览器可以识别的 html/js/css 文件,所以浏览器直接向 web 主机服务器请求这些静态 html 文件;
- nodeJS 是一个服务器端环境,或者有时人们称它为后端框架,浏览器不理解 nodeJS 但必须请求 Web 主机服务器对其进行解释并发送回 html 响应。
- 根据 wiki,npm 是 JavaScript 编程语言的包管理器。它是 JavaScript 运行时环境 Node.js 的默认包管理器。
我的问题是:
- 我的理解正确吗
- 为什么reactJS也使用npm并包含node_module,它与nodeJS有关吗
解决方案
Javascript 是 Node.js 和浏览器中使用的编程语言,但就其相似之处而言,仅此而已。Node使用V8引擎,运行在chrome浏览器中是一样的。
即使它们使用相同的引擎,它们也完全不同。它们都有大量的 API - 最值得注意的是,浏览器有 DOM(它允许您将内容呈现到屏幕上)。在 Node.js 中,您没有 DOM,但还有其他 API,例如用于访问文件系统。
由于两者都运行 JavaScript,您可以尝试在节点和浏览器中运行相同的程序,但有时会失败。React 是一个使用 DOM 的前端框架,所以如果你尝试在 node 中运行 React,它会崩溃,因为在 Node 中没有 DOM(Node 没有要渲染的屏幕)。如果您尝试在浏览器中运行适合 Node.js 的程序,如果它使用某些特定于 Node 的 API,它将崩溃。
令人困惑的是,npm 是 JavaScript 的包管理器,不一定是 node(即使 node 在名称中......)。因此,我们也可以将 npm 用于 Web 应用程序。(如果我们这样做,我们需要使用像 webpack 这样的捆绑器)。
一些 npm 模块可能在浏览器和节点中都可以工作,但有些只能在其中一个上工作。如果 npm 模块需要一些特定于平台的 API(例如浏览器的 DOM),那么它将不适用于其他平台。
希望能解决问题!我明白这有点乱..
推荐阅读
- security - 使您的 hasura 数据库配置开源/公开是不好的做法吗?
- c++ - 推力如何确定要传递给函子的参数
- react-native - 当互联网连接不好时,在本机反应中显示错误
- android - 如何在布局中从底部修复按钮?
- java - 如何使用 java 代码而不是 xml 代码将按钮添加到 android studio 中的另一个活动
- python - 使用 GradientTape 时,Tensorflow 渐变总是给出 None
- r - 如何将函数应用于 R 中小标题列表的每一行?
- python - 使用代理抓取循环一切
- javascript - Javascript 集:变得毫无意义?
- web - 将每个玩家请求路由到不同的服务器/IP 地址