【发布时间】:2018-02-28 20:34:14
【问题描述】:
对于npm 模块的main 文件,由package.json 定义,我正在考虑这样的模式:
import Struct from './src/struct'
module.exports = Struct
module.exports.default = Struct
为了同时支持 CommonJS 和 ES6 导入:
const Struct = require('my-module')
// or
import Struct from 'my-module'
此约定是否有可能导致意外问题的缺点?
我试图解决的问题是不得不强迫包的消费者坚持使用 ES6 或 CommonJS,因为这两者似乎都令人讨厌:
const Struct = require('my-module').default
// or
import * as Struct from 'my-module'
在进一步考虑这一点后,像这样在/src/struct.js 中定义我的班级会更好吗?
export default class Struct {
static get default () {
return Struct
}
...
}
【问题讨论】:
-
这种情况下
Struct是什么类型?一般来说,我建议避免将属性添加到未在同一文件中定义的对象上,但您可以根据实际情况来避免这种情况。此外,由于编译器通常会添加逻辑来自动使 CommonJS 模块与import一起工作,所以您特别想避免什么问题? -
@loganfsmyth 好吧,
Struct只是一个具有我想打包为 npm 模块的功能的类,因此添加default静态属性似乎不是很有害。也许我应该使它不可枚举或避免意外枚举它? -
如果导入的模块是 CommonJS,Babel 将使用
module.exports作为默认导出,所以我看不出module.exports.default = Struct有什么帮助。其他捆绑商不这样做吗? -
@FelixKling 真的等吗?我以为 babel 在 v6 中停止这样做了
-
我以为这是别的东西……我可能错了。你是说在这种情况下 Babel 只会导入
undefined吗?我无法想象它确实如此。
标签: node.js import ecmascript-6 export commonjs