ES6模块导入具有单独导出的文件组

时间:2016-08-03 20:20:17

标签: javascript node.js ecmascript-6 es6-module-loader

我想将一些模块组合成一个可以导入的文件。这些是本地文件,不属于npm模块。

模块小猫(kitten.js)

export function Feed() {}
export function Play() {}

在我的代码中,我可以访问' Feed'和'播放':

// This works but I would like to avoid this due to my paths
import { Feed, Play } from './some/long/path/kitten.js'

// Then use it
Feed()

因为我有许多宠物'我可以在主文件中填写它们 - 比如pets.js

export * as Kitten from './some/long/path/kitten.js'
export * as Puppies from './some/long/path/puppies.js'
...

在我的代码中,我可以这样做:

import { Kitten, Puppies } from './pets'

// Then use it as
Kitten.Feed()

是否可以同时拥有a)主宠物文件和b)在不Feed()的情况下致电Kitten.Feed()

以下不起作用,因为它不是有效路径。它可能会像宠物/小猫一样起作用。如果它是一个npm模块 - 我不确定。

import { Feed, Play } from './pets/Kitten'

我正在思考以下几点:

import * as Pets from from './pets'
import { Feed, Play } from Pets.Kitten // or 'Pets/Kitten'

但显然这不起作用。我想知道它是否可能。

我在Node with Babel 6和ES6模块加载中使用它。我看到了很多类似的问题,但它们都使用了我没有使用的默认导出。

2 个答案:

答案 0 :(得分:1)

  

但这并不允许我导入所选的功能。

确实如此。 relative-path导入与模块导入的工作方式相同。您可以对结果进行相同的结构化。

import { Play } from 'Pet/Puppy';
// is identical to
import { Play } from '../node_modules/Pet/Puppy';

如果您查看the import syntax (s15.2.2),可以看到from部分需要一个字符串。它并不关心字符串中的内容,而不是模块系统(浏览器,节点等)。

答案 1 :(得分:0)

啊..对象解构..忘了那个。

import { Kitten, Puppies } from './pets'
const {Feed, Play} = Kitten;

感谢https://stackoverflow.com/a/30132149/856498