正确导出/导入JS项目的部分内容

时间:2017-09-08 13:41:26

标签: javascript npm ecmascript-6 package.json

我第一次建立了一个npm包(ES6 + Babel),但我无法将它们全部连接起来,所以最终用户可以导入它。

我的构建(输出)文件夹结构与src:

相同
build
    - index.js
    - BaseClass.js
    sublclasses
        - SubClassA.js
        - SubClassB.js

SubClassASubClassB导入并延长BaseClass,并使用module.exports导出。入口点index.js只有两行:

import SubClassA from './subclasses/SubClassA'
import SubClassB from './subclasses/SubClassB'

package.jsonmain字段设置为./build/index.js

将项目(或npm链接)安装到测试项目中时,我写道:

import SubClassA, SubClassB from 'my-package'

导入有效,但导入的类未定义。我尝试了很多方法,但它没有用。

我该怎么做呢?

编辑:将index.js更改为:

import SubClassA from './subclasses/SubClassA'
import SubClassB from './subclasses/SubClassB'

module.exports = SubClassA
module.exports = SubClassB
它有点工作。 '有点'意味着如果我在测试项目中导入这两个类,如下所示:

import SubClassA, SubClassB from 'my-package'

然后执行:

let sca = new SubClassA()

原来是SubClassB。如果我从导入中省略SubClassB,它会正常工作。

编辑2 - 解决方案:

根据以下评论中的说明,我已经更改了index.js文件:

export { default as SubClassA } from './subclasses/SubClassA'
export { default as SubClassB } from './subclasses/SubClassB'

我将它导入测试项目中,如下所示:

import { SubClassA, SubClassB } from 'my-project' and it worked.

1 个答案:

答案 0 :(得分:1)

问题是您没有从主文件中导出任何内容,
使用es6导入/导出语法,您可以直接导出它:

export {default as SubclassA} from './subclasses/SubClassA'
export {default as SubclassB} from './subclasses/SubClassB'

然后你可以使用命名导入:

{SubClassA, SubClassB} from 'my-package'