Как использовать пакет npm с модулем es6 через Webpack и 6to5?
Скажем, я хочу использовать Immutable в моем проекте (или в любом пакете npm). У меня есть npm install
ed it, поэтому он находится в node_modules
. Конечно, там есть CommonJS. Однако я хочу использовать модули es6 в своем проекте.
Я использую Webpack для компиляции всего этого вместе с 6to5-загрузчиком для работы с синтаксисом модуля es6.
В моем исходном файле я говорю import Immutable from 'immutable';
--- но это вызывает проблему, потому что es6 import
ищет экспортированный es6 default
, что не так (для Immutable или вероятно, почти любой другой пакет npm). Скомпилированный код выглядит следующим образом: var Immutable = require('immutable')["default"];
--- который, конечно, выдает ошибку, так как нет свойства default
для поиска.
Можно ли использовать пакеты npm с модулями es6?
Ответы
Ответ 1
Babel.js. Вы ищете следующее:
import * as Immutable from 'immutable';
// compiles to:
var Immutable = require('immutable');
Интерактивная демонстрация
Примечание. Это вариант с опцией common
или commonInterop
. Для других см. https://babeljs.io/docs/usage/modules/
Ответ 2
Просто понял это. (Решение специфично для конкретного инструмента, но только модули es6 существуют только в том случае, если они включены в инструмент, поэтому я думаю, что достаточно "ответа".)
6to5 default transpilation использует параметр common
, что приводит к самой проблеме, которую я схватил выше. Но есть еще один вариант: commonInterop
--- который должен был быть построен, чтобы справиться с той ситуацией, с которой я имею дело. См. https://6to5.github.io/modules.html#common-interop
Итак, три ура для 6to5.