Node.js的url模块与JavaScript的URL有何区别?

3
我在寻找`URL`模块的时候,发现了JavaScript和Node.js中都有`URL`模块。
我有几个问题:
  1. JavaScript的`URL`和Node.js的`URL`有什么不同?
  2. `URL`模块在Node.js中和JavaScript中的特性有什么区别?
  3. 文档中写道,`URL`被称为全局对象。因此,不再需要使用`url`模块进行引用,这是真的吗?

实现了WHATWG URL规范的兼容浏览器的URL类。可以在规范本身中找到解析后的URL示例。URL类也可以在全局对象上使用

在平台的全局对象中,还有`http`、`path`、`os`等模块。
我想使用`os`和`path`模块而无需引用(因为它们已经在全局对象中),但我的文件执行失败了:

> node test.js
console.log(path); // ReferenceError: path is not defined

我也写了下面的代码,但输出中打印了未定义的值:
console.log(global.path); // undefined
  • 是什么原因?

但是当我在REPL中使用它们时,会返回以下输出:

<ref *1> {
  resolve: [Function: resolve],
  normalize: [Function: normalize],
  isAbsolute: [Function: isAbsolute],
  join: [Function: join],
  relative: [Function: relative],
  toNamespacedPath: [Function: toNamespacedPath],
  dirname: [Function: dirname],
  basename: [Function: basename],
  extname: [Function: extname],
  format: [Function: bound _format],
  parse: [Function: parse],
  sep: '\\',
  ...
  ...
  • REPL(交互式解释器)和脚本文件之间的区别是什么原因?

感谢您的关注。期待您的回复。

1个回答

2
  1. Node.js中的URL对象设计与浏览器中的URL对象兼容。
  2. 任何可见的差异都应在URL类的文档中提到。目前似乎没有任何差异。
  3. 没错 - 如果您只想要URL类或URLSearchParams,那么就不需要require('url')

您提到了一些全局对象中的模块:

http、path、os等。

然而,文档中并没有说明这一点。相反,这些都是您需要自行require()的模块。 URL被记录为是全局对象的一部分,这是正确的 - 它是一个类,在任何地方都可以使用,就像String、Number、Buffer和其他一些类一样。这是为了与Web平台兼容。

REPL是特殊的 - 它包括一个易用性功能,如果它看到对核心模块的引用,它会加载它们。更多详情请参见:https://nodejs.org/api/repl.html#accessing-core-nodejs-modules
这意味着有些代码实际上在REPL中和直接通过node运行时可能会有所不同。


非常感谢,这正是我想要的。@Robert Kawecki - Mohsen Movahed
我不理解你的这句话:“Node.js中的URL对象旨在与浏览器中获取的URL对象兼容。” - Mohsen Movahed
1
意味着“URL”构造函数和构造的对象在Node.js或Chrome、Firefox等浏览器中使用时应该表现相同。 - Robert Kawecki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接