Я написал библиотеку javascript как модуль ES6, в первую очередь предназначенную для использования в браузере. Теперь я хочу упаковать его для узла. Я согласен с ограничением до версии 14+. Я не хочу транспилировать.
Я не знаю, как обрабатывать зависимости. Один, в частности, момент- js, доставляет мне неприятности.
В браузере (пробовал последнюю версию FF + Chrome) я ссылаюсь на библиотеку моментов в теге <script>
, а затем в своем коде я могу просто использовать переменную moment
, не имея чтобы сначала импортировать его.
my-module.js
:
function testFn() {
return moment.duration(300).asSeconds();
}
export { testFn }
browser code
:
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.26.0/moment.min.js"></script>
<script type="module" src="my-module.js"></script>
<script>
import { testFn } from 'my-module.js';
let val = testFn();
console.log(val);
</script>
Однако в узле мне нужно, чтобы модуль включал import
, чтобы он работал:
my-module.js
:
import moment from 'moment';
function testFn() {
return moment.duration(300).asSeconds();
}
export { testFn }
Тогда я могу использовать my-module
в узле:
import { testFn } from 'my-module.js';
let val = testFn();
console.log(val);
Но теперь код браузера не работает: TypeError: Error resolving module specifier: moment
Я пробовал разные import
s (import * as ...
, import { moment } from ...
), но не повезло - браузер все равно жалуется.
Moment- js - это просто пример - я бы хотел общее c решение, так как у меня есть и другие зависимости.
Это должна быть проблема, которую другие люди решали, не прибегая к ужасным обходным путям, например обнаружение среды и условный импорт. У кого-нибудь есть хорошее решение или ссылка? Спасибо!!