对于 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
}
...
}
最佳答案
Lets look at what Babel does when you do import foo from 'bar';
:
'use strict';
var _bar = require('bar');
var _bar2 = _interopRequireDefault(_bar);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
你可以看到,根据导入模块的“类型”,Babel 将导入 default
导出,或者导入 module.exports
(因为require('bar')
返回 module.exports
。
这意味着,为了使您的模块可以导入为
const Struct = require('my-module')
// and
import Struct from 'my-module'
你所要做的就是
module.exports = Struct;
关于node.js - ES6 和 CommonJS 导出约定的缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46310911/