首页 > 解决方案 > 为什么 Chrome 开发者工具中没有显示 node.js?

问题描述

我只是在学习 node.js,所以请原谅我的幼稚。所以我创建了一个 JavaScript 文件来放入我所有的节点方法,然后将它链接到一个 html 文件。我运行 html 文件并在 JavaScript 控制台中查看,只是得到“未捕获的 ReferenceError”。我的代码在 windows powershell 上执行得很好,但在 chrome 开发者工具中却不行。为什么是这样?

标签: node.js

解决方案


Chrome 是一个浏览器。它在浏览器上下文中运行 Javascript。

Node.js 是一个独立的 Javascript 环境,用于在服务器环境中运行 Javascript 或用于独立工具开发。

node.js 不像浏览器那样进行 HTML 显示,也不支持浏览器对主机对象(例如windowdocument. 类似地,node.js 将浏览器中不存在的各种模块添加到运行时环境中,例如fs用于访问文件的process模块或用于访问系统的模块。

node.js 和 Chrome 都在内部使用相同的 V8 Javascript 引擎来解析和运行纯 Javascript,但每个都在该引擎周围放置了自己的环境,从而赋予它们不同的用途和功能。

o 我创建了一个 JavaScript 文件来放入我所有的节点方法,然后将它链接到一个 html 文件。我运行 html 文件并在 JavaScript 控制台中查看,只是得到“未捕获的 ReferenceError”。

如果您有一个包含 Javascript<script>标记的 HTML 文件,则必须在浏览器(例如 Chrome)中使用它,而不是在 node.js 中。

如果你只有一个普通的 Javascript 文件,它的工作是启动一个服务器并监听传入的连接,你会在 node.js 中使用它,而不是在 Chrome 中。

我的代码在 windows powershell 上执行得很好,但在 chrome 开发者工具中却不行。为什么是这样?

如果您显示您的实际代码,我们可以提供更完整的建议,但您似乎已经编写了 Javascript 来使用一些仅存在于 node.js 中且不存在于浏览器环境中的 node.js 库。因此,这是一个 node.js 程序(用 Javascript 编写),而不是可以在浏览器环境中运行的脚本。


打个比方,假设您有两个工具,每个工具都内置了 C 语言。其中一个包括我们许多人使用过的标准库。另一个没有包含那个库,而是包含了一个非常不同的库。虽然它们都以 C 语言为核心,但它们附带的头文件和库是完全不同的,因此使用其库在一个工具中编写的代码不会在具有不同库的另一个工具中运行。

这类似于 Chrome 与 node.js。每个都是 Javascript 语言的核心,但每个都带有一组不同的库。

如果您编写一些不使用任何外部库的纯 Javascript,例如:

 function square(x) {
     return x * x;
 }

该代码将在 Javascript 环境(Chrome 或 node.js)中运行,因为它只是纯 Javascript,并且不依赖于标准 Javascript 实现之外的任何库。

但是,如果您编写一些使用该fs库的代码,例如:

 const fs = require('fs');

 function countLines(filename) {
     let data = fs.readFileSync(filename, 'utf8');
     return data.split('/n').length;
 }

该代码需要fs库。该库存在于 node.js 中,而不是 Chrome(或任何浏览器)中,因此只能在 node.js 中使用。

或者,如果您编写一些使用特定于浏览器的对象的代码,例如document

 function getHeadline() {
     let obj = document.getElementById("headline");
     return obj.textContent;
 }

此代码将在浏览器中运行,但不能在 node.js 中运行,因为它依赖于document仅由浏览器实现提供的外部对象,而不是由 node.js 提供。


如果您真正想做的是获取访问权限(在网页内)以便 node.js 程序可以提供数据(例如从数据库中获取数据),那么您通常会做的是让您的节点.js 程序到 Web 服务器中(通常使用 Express 工具包)。然后,您可以从网页中的 Javascript 向远程服务器发出 Ajax 请求,以获取数据并将其带回网页。


推荐阅读