将 CommonJS 模块导入 ESM 语法

Xen*_*mar 5 javascript node.js ecmascript-5 ecmascript-6

我正在努力了解如何将 CommonJS 模块导入 ESM 语法。我目前正在尝试与图书馆合作url-metadataurl-metadata将顶级导出公开为可调用(据我所知,这并不真正符合 CommonJS):

const urlMetadata = require('url-metadata')
urlMetadata(URL, ...)
Run Code Online (Sandbox Code Playgroud)

不可能写成:

import urlMetadata from 'urlMetadata'
Run Code Online (Sandbox Code Playgroud)

因为没有定义默认导出。

相反,我必须写:

import * as urlMetadata from 'url-metadata'
Run Code Online (Sandbox Code Playgroud)

或者:

import urlMetadata = require("url-metadata")
Run Code Online (Sandbox Code Playgroud)

我尝试阅读 Node 中的模块加载,但我仍然有些困惑,不知道执行此操作的正确方法是什么以及为什么。

Mik*_*keM 11

import urlMetadata from 'url-metadata';
Run Code Online (Sandbox Code Playgroud)

是语法糖

import { default as urlMetadata } from 'url-metadata';
Run Code Online (Sandbox Code Playgroud)

两者都可以正常工作。

module.exportsCommonJS 模块中分配的值是默认导出。

请参阅Node.js文档。