require未定义?Node.js

12 浏览
0 Comments

require未定义?Node.js

刚开始使用Node.js。在我的app/js文件中,我正在做类似以下的事情:\napp.js\n

var http = require('http');
http.createServer(function (request, response) {
  response.writeHead(200, {'Content-Type': 'text/plain'});
  response.end('我真的在运行一个服务器吗?!');
}).listen(8080, '127.0.0.1');
console.log('服务器正在运行!');

\n当我在终端中运行node app.js时,控制台会输出\'服务器正在运行!\',但在浏览器中我得到了Uncaught ReferenceError: require is not defined。\n有人能解释一下为什么在终端中它能正常工作,但在浏览器中却不能吗?\n我正在使用Node的http-server来提供我的页面。

0
0 Comments

从Node.js 14版本开始,ES模块默认不再支持require函数。如果想要使用require函数,可以在文件的顶部添加以下代码:

import { createRequire } from 'module';
const require = createRequire(import.meta.url);

以上代码通过引入module模块中的createRequire方法,并使用当前模块的URL作为参数,创建了一个require函数。

对于TypeScript,我们可以通过在tsconfig.json文件中的compilerOptions中添加"esModuleInterop": true来实现在编译后的JS代码中自动添加这段代码。

完整的tsconfig.json文件示例:

{

"compilerOptions": {

"esModuleInterop": true

}

}

这样配置后,在编译TypeScript代码时,TypeScript编译器将自动添加上述代码,使得在编译后的JS代码中可以使用require函数。

参考来源:https://nodejs.org/api/modules.html#modules_module_createrequire_filename

0
0 Comments

在终端中,您正在运行Node.js应用程序,并且它正在运行您的脚本。这是与直接在浏览器中运行脚本非常不同的执行环境。虽然JavaScript语言在很大程度上是相同的(如果您正在运行Chrome浏览器,则都是V8引擎),但其他执行环境,如可用的库,则不同。

Node.js是一个服务器端JavaScript执行环境,它将V8引擎与一组服务器端库相结合。 require()是Node.js添加到环境中的功能之一。因此,当您在终端中运行Node时,您正在运行包含require()的环境。

require()不是浏览器内置的功能。这是Node.js的特定功能,而不是浏览器的功能。因此,当您尝试让浏览器运行您的脚本时,它没有require()。

有一些方法可以在浏览器中运行一些形式的Node.js代码(但不是全部)。例如,您可以获取在浏览器中使用类似的require()语句的替代require()。

但是,您不会在浏览器中运行Web服务器,因为浏览器没有这样的能力。

您可能会对browserify感兴趣,它允许您在浏览器中使用require()语句使用Node.js样式的模块。

- 我不会把它当作一个严肃的问题。如果您想了解Node.js是什么以及人们如何使用它,那是一个完全不同的话题,您可以通过在网络上进行自己的搜索找到各种文章。 JavaScript是一种真正的面向对象的语言。也许不同于您认为您想要的,但这只是您的观点,有很多人出于各种原因不同意您的观点。这不是辩论或讨论的地方。

- 这个激动人心的陈述有什么意义?JS是一种非常真实的面向对象语言。语言中的每个东西都是具有方法的对象,都有类,都有扩展类或对象的能力。它是弱类型的,但这并不使它更少面向对象。

0
0 Comments

在 Node.js 的 14 版本中,也会出现(require is not defined? Node.js)这个问题。当你将package.json中的包类型声明为模块时,就会出现这个问题。如果这样做,就不能使用某些 CommonJS 变量,包括require

为了解决这个问题,需要从package.json中删除"type": "module",并确保没有以.mjs结尾的文件。

这个问题可能出现在项目文件夹中的任何文件上。所以,如果你有一个与CommonJS导入无关的构建脚本,但project.json中有"type": "module",那么构建脚本将会出错,即使它在package.json中没有被引用。

你仍然可以在模块中使用require,使用createRequire方法。

我正在使用 nvm,所以我从 node 14 切换到了 node 10,这样错误就被修复了。

你也可以将文件扩展名改为.cjs

在使用 Node 14 时,从 package.json 中删除"type": "module"会导致警告:(node:7396) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs。我没有任何 .mjs 文件,这样你就无法使用import

总结一下,当你在 Node.js 的 14 版本中将package.json中的包类型声明为模块时,会出现(require is not defined? Node.js)这个问题。解决方法是从package.json中删除"type": "module",并确保没有以.mjs结尾的文件。你仍然可以使用require,使用createRequire方法。另外,你还可以将文件扩展名改为.cjs

0