如何将一个库发布到 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);
在您的源代码中,如果您可以使用 commonJS 语法进行导入和导出...
一种选择是将所有 import
和 export
替换为 require
和 module.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");
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);
在您的源代码中,如果您可以使用 commonJS 语法进行导入和导出...
一种选择是将所有 import
和 export
替换为 require
和 module.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");