如何将一个库发布到 npm,它可以与 import 和 require 一起使用?

How to publish a library to npm that can be used both with import and require?

tealium-tracker 是用 es6 编写的,在发布到 npm 之前使用 Babel 转译。

当消费者这样做时:

import initTealiumTracker from "tealium-tracker";

一切如预期。

但是,一些消费者想要使用 require 而不是 import,并且必须附加 .default:

const initTealiumTracker = require("tealium-tracker).default;

如何发布库以避免附加 .default

我希望消费者能够执行以下任一操作:

import initTealiumTracker from "tealium-tracker";

const initTealiumTracker = require("tealium-tracker);

Source code

在您的源代码中,如果您可以使用 commonJS 语法进行导入和导出...

一种选择是将所有 importexport 替换为 requiremodule.exports。看起来 webpack 不允许混合语法(ES6 和 commonJS 模块)。

因此您的 index.js 文件可以 require 来自依赖模块的函数

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");