Как опубликовать библиотеку в npm, которую можно использовать как с import, так и require? - PullRequest
2 голосов
/ 11 октября 2019

tealium-tracker написан на es6 и передан с использованием Babel перед публикацией на npm.

Когда потребители делают:

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

Исходный код

1 Ответ

2 голосов
/ 11 октября 2019

В исходном коде, если вы в порядке с использованием синтаксиса commonJS для импорта и экспорта ...

Один из вариантов - заменить все import и export на require и module.exports. Похоже, веб-пакет не позволяет смешивать синтаксисы (модули 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");
...