WedX - журнал о программировании и компьютерных науках

Как упаковать библиотеку с помощью модулей es2015

Скажем, я создал библиотеку, состоящую из набора файлов модулей es2015, используя оператор export, как я могу упаковать их вместе в один файл .js, чтобы доставить библиотеку? Модули es2015 должны быть сохранены, чтобы пользователь этой библиотеки по-прежнему мог использовать import-операторы для импорта экспортируемых вещей.

то есть представьте, что было два модуля:

foo.js:

export default class Foo {...}

бар.js:

export default class Bar{...}

Я хотел бы упаковать это вместе в ... скажем, magic-lib.js, а затем использовать это так:

использование-magic-lib.js:

import Foo from 'magic-lib'
...

Как это можно сделать?

Кстати: я пытался упаковать свою библиотеку с помощью rollup-js в один файл, но мне не удалось получить результат, в котором все еще используется exports. Кроме того, моим любимым решением будет какой-нибудь vanilla-js...


  • Помимо этого, моим любимым решением будет какой-нибудь vanilla-js... Язык JavaScript не позволяет объединять несколько файлов в один. Вам так или иначе придется использовать стороннее программное обеспечение. 02.01.2018
  • Я недостаточно хорошо знаком с современными сборщиками, чтобы чувствовать себя комфортно, отвечая на этот вопрос. С точки зрения импорта/экспорта вы должны создать новый модуль для группировки вещей: import Foo from './foo.js'; import Bar from './bar.js'; export { Foo, Bar }; а затем, если вы хотите получить только Foo из результата, это будет import { Foo } from './magic-lib.js'; Это полностью совместимо с встряхиванием деревьев (например, упаковщик или -- когда это родное -- среда могла бы избежать связывания/загрузки Bar, если бы она никогда не использовалась). Но что касается уровня упаковщика... 02.01.2018
  • Может быть, я просто не понимаю основную концепцию модулей в Javascript. В моем понимании модуль — это нечто большее, объединяющее что-то вместе, состоящее из нескольких меньших, но отдельных модулей. Эти меньшие единицы могут быть классами или прототипами - в моем понимании. И я хотел бы поместить каждый класс в свой собственный файл. Но тогда класс был бы модулем... это как-то не сочетается... 02.01.2018
  • Модули просто формализуют организацию кода в нескольких файлах. Это не было чем-то, что изначально было встроено в язык, и с годами появилось несколько разных подходов. Совершенно нормально иметь модуль, экспортирующий только один класс, если он работает в вашей библиотеке. В конце концов, то, как вы организуете свой код, зависит от вас. 02.01.2018
  • И если бы вы сделали класс для каждого файла (в этом нет ничего плохого, кроме множества отдельных файлов), вы могли бы сделать модули объединения связанных классов, и тогда окончательное объединение могло бы быть объединением объединений. (И здесь помогает синтаксис; чтобы экспортировать все именованные экспорты модуля из другого модуля, вы можете использовать export * from ....) 02.01.2018
  • на самом деле, свертывания сверток - это то, что я пытался сделать в своем проекте, но в этом конкретном случае я не смог собрать свертку вместе, не потеряв export-операторов. Я думал, что установка format в es в конфигурации свертки сделает это, но это не так (нет export-утверждений в сгенерированном пакете). И использование amd или cjs кажется скорее запасным вариантом для старых JS-версий без использования es6-модулей... 02.01.2018
  • @Felix Kling: я также понимаю, что модули — это то, что организует код в нескольких файлах. Но в JS один файл называется модулем, а не набором файлов... 02.01.2018
  • @treeno Rollup с options.format = es действительно должен работать. Пожалуйста, опубликуйте свою попытку (несколько небольших примеров файлов модулей, а также конфигурацию и вызов вашего сводного пакета). 04.01.2018
  • @Bergi: Да, после того, как я заметил, что плагин rollup-plugin-multi-entry не сохраняет export default в сгенерированном пакете, я смог запустить его, переключившись на экспорт не по умолчанию. 04.01.2018

Ответы:


1

Если кому-то интересно, теперь я могу объединять пакеты с помощью rollup.js с Options.format= 'es' и плагином rollup-plugin-multi-entry. Моя ошибка заключалась в том, что я использовал export default и ожидал, что это будет работать с более чем одним экспортом в одном пакетном файле. Rollup-plugin-mutliy-entry не сохраняет их в финальном пакете. Но использование экспорта не по умолчанию работает.

Итак, если смотреть с более высокого уровня, у меня теперь есть один js-файл для каждого модуля, созданного rollup.js. Этот модуль-js-файл состоит из нескольких классов. Экспортируются только те классы, которые предполагается использовать вне библиотеки (публичный интерфейс).

Кроме того, я объединяю все файлы js-модулей вместе в один большой файл приложения-js (набор накопительных пакетов), который связан с options.format = 'iife' и предназначен только для использования в качестве исполняемого пакета приложений для браузера.

-Module-A.js 
 |- class InternalTool
 |- export class A 

-Module-B.js
-Module-C.js

-App.js
|- Module A
|- Module B
|- Module C

Таким образом, я могу создавать сильно разделенные и многократно используемые модули, которые можно объединить в приложение.

04.01.2018
Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]