【问题标题】:Properly export/import parts of a JS project正确导出/导入 JS 项目的部分
【发布时间】:2018-02-17 11:07:57
【问题描述】:

我是第一次构建一个 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 - 解决方案:

根据下面 cmets 中的说明,我已将 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.

【问题讨论】:

  • 您是从主文件中导出 SubClassA 和 B 吗?
  • @maioman 你是对的,像我一样只将它们导入主文件是不够的。将它们导出,重建并工作,但这次有了新的转折。我会在一分钟内更新我的答案。
  • 你应该将它与import {SubClassA, SubClassB} from 'my-package'一起使用
  • 是的,工作!谢谢

标签: javascript npm ecmascript-6 package.json


【解决方案1】:

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

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

那么你可以使用命名导入:

{SubClassA, SubClassB} from 'my-package'

【讨论】:

  • 我也在写自述文件(使用说明)。像这样导出,还能用require('...')语法导入吗?
  • require/module.exports 最初用于模块,因此在节点环境中是不可能的
猜你喜欢
  • 2021-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-26
  • 2020-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多