如何在Javascript中为默认导入设置别名?

sfl*_*che 307 javascript ecmascript-6 es6-modules

使用ES6模块,我知道我可以为命名导入添加别名

import { foo as bar } from 'my-module';
Run Code Online (Sandbox Code Playgroud)

而且我知道我可以导入默认导入

import defaultMember from 'my-module';
Run Code Online (Sandbox Code Playgroud)

我想为默认导入添加别名,我认为以下内容可行

import defaultMember as alias from 'my-module';
Run Code Online (Sandbox Code Playgroud)

但这会导致解析(语法)错误.

我怎么能(或者我可以?)别名默认导入?

Ber*_*rgi 583

defaultMember已经别名 - 它不需要是导出的函数/东西的名称.做就是了

import alias from 'my-module';
Run Code Online (Sandbox Code Playgroud)

或者你可以做

import {default as alias} from 'my-module';
Run Code Online (Sandbox Code Playgroud)

但这相当深奥.

  • 别名本身就是深奥的!在测试redux组件时,导入命名导出_and_默认是很方便的:`import WrappedComponent,{Component}来自'my-module';` (11认同)
  • 一些非常严格的 tslinting 规则不同意,实际上希望您保留默认输入的名称作为文件名 (6认同)
  • MDN 文档应反映这些文档更新:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import (4认同)
  • @Blauhirn 是否适用于无法遵循引用并需要对其重构工具使用全局搜索和替换的旧 IDE?荒谬的。 (2认同)
  • @Bergi 不,这是 tslint 规则“import-name”,例如由 airbnb tslint 规则集使用,因此相当普遍。这些规则的存在是为了鼓励一致、无错误和可读的代码 (2认同)
  • @Bergi我的意思是`import foo from 'my-module';`而不是`import { TheExportedName as foo } from 'my-module';`。恕我直言,后者更好。 (2认同)

Sta*_*kin 46

起源、解决方案和答案:

背景:

模块可以自身导出功能或对象以供其他模块使用

模块用于:

  • 代码复用
  • 功能分离
  • 模块化

什么是导入别名?

导入别名是您进行标准导入的地方,但您不使用导出模块预定义的名称,而是使用导入模块中定义的名称。

为什么这很重要?

您可能会导入多个导出的模块,但导出的名称(来自不同的模块)是相同的,这会让 JS 感到困惑。别名可以解决这个问题。

多个别名编译失败的示例:

Failed to compile.
/somepath/index.js
SyntaxError: /somepath/index.js: Identifier 'Card' has already been declared (6:9)
Run Code Online (Sandbox Code Playgroud)

导入别名将允许您将类似名称的导出导入到您的模块中。

import { Button } from '../components/button'
import { Card } from '../components/card'
import { Card } from 'react-native-elements'
Run Code Online (Sandbox Code Playgroud)

导入命名导出时(非默认):

// my-module.js

function functionName(){
  console.log('Do magic!');
}

export { functionName );
Run Code Online (Sandbox Code Playgroud)

导入模块:

import { functionName as AliasFunction} from "my-module.js"
Run Code Online (Sandbox Code Playgroud)

什么是默认导出

默认导出允许我们导出单个值或为您的模块提供后备值。

对于导入默认导出:

// my-module.js
function functionName(){
  console.log('Do magic!');
}

export default functionName;
Run Code Online (Sandbox Code Playgroud)

解决方案

问题中提到的defaultMember已经是别名,您可以将名称更改为您喜欢的任何名称。

现在导入导出的函数 ( functionName());

import AliasFunction from "my-module.js"
Run Code Online (Sandbox Code Playgroud)

或者像这样(正如@Bergi提到的):

import {default as AliasFunction} from 'my-module.js';
Run Code Online (Sandbox Code Playgroud)