无法在Nodejs Typescript应用程序中导入URL类

16

我正在尝试从Node.js API中导入URL类,以便可以解析URL并检索其源、主机名和路径。

我尝试通过输入以下命令来实现:

import * as URL from "url";

我也尝试了以下命令:

import { URL } from "url";

但我似乎无法让它为我工作。任何帮助都将不胜感激。

我尝试使用以下方式:

var site = new URL("http://www.website.com");

但它会抛出一个错误,因为它声明URL不是一个构造函数。

3个回答

46

URL构造函数是node v7.0的一部分。如果您使用的是node >= v7.0,则import { URL } from "url";是正确的导入方式。确保您也更新了最新版本的node类型定义:

npm install --save-dev @types/node

如果您的 Node 版本低于 7.0,则可以使用 parse 方法:

import * as url from "url";

var site = url.parse("http://www.website.com");

如果你要使用 Node.js ,请不要使用那个引入语法。应该使用 import m = require("m"); - Aluan Haddad
@AluanHaddad 有什么原因吗? - Saravana
有很多原因。其中一个非常重要的原因是 https://github.com/nodejs/node-eps/blob/master/002-es-modules.md#46-es-consuming-commonjs - Aluan Haddad
非常感谢,这完全是版本错误,我在谷歌上搜索了URL解析器,并被引导到最新的文档,这导致了混淆。不幸的是,6.x.x节点URL模块不包含origin属性,但我可以轻松地将协议与主机名连接起来。 - BossmanT
1
另外,感谢@AluanHaddad提供的有关导入模块的链接。我一直在使用TypeScript编写我的快速Node脚本,现在知道为什么应该遵循Node标准了。 - BossmanT
显示剩余4条评论

3
import * as url from 'Url';

{ parse: [Function: urlParse],
  resolve: [Function: urlResolve],
  resolveObject: [Function: urlResolveObject],
  format: [Function: urlFormat],
  Url: [Function: Url] 
}

这不是一个构造函数。您需要使用其中一个公开的方法:

import * as url from 'url';

console.log(url.parse('https://www.google.com'))

// Output:
Url {
  protocol: 'https:',
  slashes: true,
  auth: null,
  host: 'www.google.com',
  port: null,
  hostname: 'www.google.com',
  hash: null,
  search: null,
  query: null,
  pathname: '/',
  path: '/',
  href: 'https://www.google.com/' }
undefined
>

如果你的目标是Node.js,请不要使用那种导入语法。请使用import m = require("m"); - Aluan Haddad

3
如果有人想知道如何使用URL使代码在Node.js和浏览器环境之间可移植,那么我提供了以下解决方案:
import * as nodeUrl from "url";

const URL = typeof window !== "undefined" ? window.URL : nodeUrl.URL;


必须添加 declare var window; 才能使其按照此处的回答正常工作 https://stackoverflow.com/a/61871419/1997873 - YoniXw

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