使用 ES6 语法解析已编译的默认导出
Resolving compiled default exports with ES6 syntax
我有一个模块,说如下:
const awesomeFn = () => ...
export default awesomeFn;
它是使用 babel 内置到 ES5 中的,当我创建另一个 ES6 模块时,我想要以下语法:
npm i awesomeFn
// ./index.js
import awesomeFn from 'awesomeFn';
awesomeFn();
但这抛出。记录 awesomeFn
给我 { default: _default [Function()] }
(或类似的东西),暗示我需要做类似
的事情
import awesomeFnPackage from 'awesomeFn';
const { default: awesomeFn } = awesomeFnPackage;
我怎样才能形成我的出口,这样我就不必做默认的解构?由于这个原因,我应该完全避免默认导出吗?
有点奇怪,这在以下情况下有效:
- 我使用
esm
,就像这样 node -r esm index.js
但如果我使用 mjs
作为文件扩展名(设置 "type": "module"
),则不会,只有 js
- 它不适用于
--experimental-modules
、--experimental-specifier-resolution=node
和 package.json
、 中的 "type": "module"
- 在每个非工作情况下,导入值都是
{ default: [Function: awesomeFn] }
,只有esm
是值[Function: awesomeFn]
所以我想这就是现在的解决方案;依赖外部包实现预期行为,或使用命名导出,它们按预期工作。这是怎么回事?
嘿,看来你的设置有问题。默认函数在导出时被命名为“default”(ES5)。
你可以像这样直接在 import 语句中解构:
import { default as awesomeFn } from 'awesomeFn';
awesomeFn()
提供的解决方案here, which is to destructure the default
property as stated in the question, or add yet another dependency 直观地使用 es6 导入。
为了简洁起见,我将省略 Babel 做出此选择的原因 reader 以进行研究。我的结论是用ES5还是不用默认导出。在撰写本文时,ES6 语法在 import/exports 的上下文中一团糟,不仅在这个问题的上下文中,而且在 npm
包装、文件扩展名、标志、package.json
属性的上下文中等
我有一个模块,说如下:
const awesomeFn = () => ...
export default awesomeFn;
它是使用 babel 内置到 ES5 中的,当我创建另一个 ES6 模块时,我想要以下语法:
npm i awesomeFn
// ./index.js
import awesomeFn from 'awesomeFn';
awesomeFn();
但这抛出。记录 awesomeFn
给我 { default: _default [Function()] }
(或类似的东西),暗示我需要做类似
import awesomeFnPackage from 'awesomeFn';
const { default: awesomeFn } = awesomeFnPackage;
我怎样才能形成我的出口,这样我就不必做默认的解构?由于这个原因,我应该完全避免默认导出吗?
有点奇怪,这在以下情况下有效:
- 我使用
esm
,就像这样node -r esm index.js
但如果我使用mjs
作为文件扩展名(设置"type": "module"
),则不会,只有js
- 它不适用于
--experimental-modules
、--experimental-specifier-resolution=node
和package.json
、 中的 - 在每个非工作情况下,导入值都是
{ default: [Function: awesomeFn] }
,只有esm
是值[Function: awesomeFn]
"type": "module"
所以我想这就是现在的解决方案;依赖外部包实现预期行为,或使用命名导出,它们按预期工作。这是怎么回事?
嘿,看来你的设置有问题。默认函数在导出时被命名为“default”(ES5)。 你可以像这样直接在 import 语句中解构:
import { default as awesomeFn } from 'awesomeFn';
awesomeFn()
提供的解决方案here, which is to destructure the default
property as stated in the question, or add yet another dependency 直观地使用 es6 导入。
为了简洁起见,我将省略 Babel 做出此选择的原因 reader 以进行研究。我的结论是用ES5还是不用默认导出。在撰写本文时,ES6 语法在 import/exports 的上下文中一团糟,不仅在这个问题的上下文中,而且在 npm
包装、文件扩展名、标志、package.json
属性的上下文中等