Javascript 如何将一个库发布到npm,该库可以与导入和require一起使用?

Javascript 如何将一个库发布到npm,该库可以与导入和require一起使用?,javascript,node.js,npm,babeljs,es6-modules,Javascript,Node.js,Npm,Babeljs,Es6 Modules,是用es6编写的,在发布到npm之前使用Babel进行传输 当消费者这样做时: 从“tealium跟踪器”导入initTealiumTracker; 一切正常 但是,一些消费者希望使用require而不是导入,并且必须附加。默认值: const initTealiumTracker=require(“tealium跟踪器”)。默认值; 如何发布库以避免附加.default 我希望消费者能够做到: 从“tealium跟踪器”导入initTealiumTracker; 或 const init

是用es6编写的,在发布到npm之前使用Babel进行传输

当消费者这样做时:

从“tealium跟踪器”导入initTealiumTracker;
一切正常

但是,一些消费者希望使用
require
而不是
导入
,并且必须附加
。默认值

const initTealiumTracker=require(“tealium跟踪器”)。默认值;
如何发布库以避免附加
.default

我希望消费者能够做到:

从“tealium跟踪器”导入initTealiumTracker;

const initTealiumTracker=require(“tealium跟踪器”);

在源代码中,如果您同意使用commonJS语法进行导入和导出

一种选择是将所有
导入
导出
替换为
需要
模块。导出
。看起来webpack不允许混合语法(ES6和commonJS模块)

因此,您的
index.js
文件可以
要求依赖模块提供的函数

const { callUtag, flushUtagQueue } = require("./utagCaller");
并将默认函数导出为

module.exports = initTealiumTracker;
module.exports.default = initTealiumTracker;
同样,从属模块也可以将函数导出为

module.exports = { callUtag, flushUtagQueue };
这样,消费者应该能够使用

import initTealiumTracker2 from "tealium-tracker";

const initTealiumTracker1 = require("tealium-tracker");

使用现代的
import
/
export
语法编写代码,然后使用现代语法生成
/dist/yourlib.js
,并告诉人们如果使用旧版本的节点,他们应该需要README.md中的旧版本?