如何将库发布到npm,可以同时用于导入和需求?
[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语法进行导入和导出...
一种选择是将所有import
和export
替换为require
和module.exports
。看起来webpack不允许混合语法(ES6和commonJS模块)。
因此您的索引文件可以将依赖模块的功能导入为
const { callUtag, flushUtagQueue } = require("./utagCaller");
并将默认函数导出为
module.exports = initTealiumTracker;
module.exports.default = initTealiumTracker;
同样,您的从属模块可以将功能导出为
module.exports = { callUtag, flushUtagQueue };
这样,消费者应该可以使用其中任何一个
import initTealiumTracker2 from "tealium-tracker";
OR
const initTealiumTracker1 = require("tealium-tracker");
如何将库发布到npm,可以同时用于导入和需求?
[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语法进行导入和导出...
一种选择是将所有import
和export
替换为require
和module.exports
。看起来webpack不允许混合语法(ES6和commonJS模块)。
因此您的索引文件可以将依赖模块的功能导入为
const { callUtag, flushUtagQueue } = require("./utagCaller");
并将默认函数导出为
module.exports = initTealiumTracker;
module.exports.default = initTealiumTracker;
同样,您的从属模块可以将功能导出为
module.exports = { callUtag, flushUtagQueue };
这样,消费者应该可以使用其中任何一个
import initTealiumTracker2 from "tealium-tracker";
OR
const initTealiumTracker1 = require("tealium-tracker");