Объединение файлов CommonJS для Node.js

У меня есть приложение Node.js со всеми модулями, написанными на CommonJS, а некоторые используют функции es6, такие как генераторы, let, const и т. Д. И все это отлично работает как есть.

Я хочу объединить все эти файлы в один файл, а затем уточнить его. Мое лучшее предположение о необходимых шагах: 1) Преобразование всех модулей в модули es6 - с помощью Babel 2) Использование накопительного пакета для создания пакета и вывода его в виде файла CJS. 3) Исключите этот файл CJS.

Я играл с rollup & babel и читал такие статьи, как https://duske.me/easy-es2015-compilation-with-rollup-js-and-gulp-js/, который отлично работает, если модули ввода уже являются модулями es6. И я посмотрел на https://github.com/rollup/rollup-plugin-babel но я запутался, так как у меня нет большого опыта работы с babel, rollup и т. д.


person nevf    schedule 28.04.2016    source источник


Ответы (2)


Я бы не стал преобразовывать модули CommonJS в ES6. Это можно сделать (esnext, вероятно, ваш лучший выбор - я не верю, что у Babel есть плагин для от CommonJS до ES6), но вы можете столкнуться с некоторыми шероховатостями, когда семантика CommonJS не совсем соответствует семантике модулей ES6.

Почему бы просто не написать модули ES6? Таким образом, ваше приложение будет более ориентированным на будущее, а объединение будет вести себя более предсказуемо.

Если это не вариант и ваши исходные файлы должны быть CommonJS, вам, вероятно, лучше использовать сборщик CommonJS, такой как Webpack или Browserify.

person Rich Harris    schedule 28.04.2016
comment
Спасибо, Рич. В настоящее время у меня есть 31 файл в формате CJS, и я не хочу тратить время и силы на рефакторинг в модули es6 (но, возможно, придется). Для нового кода я пишу модули es6, и в браузере я начал использовать JSPM / System.js несколько месяцев назад после перехода с Require.js и мне он понравился. Я посмотрю на esnext, который на данный момент может быть достаточно хорошим решением. Я также посмотрю на Webpack. Надеюсь, однажды мы получим встроенную поддержку модуля es6 в node.js - person nevf; 29.04.2016

Это было возможно с babel 5, но начиная с babel 6 вам нужен плагин для использования обычных require('module') для модулей CommonJS вместо "новых" require('module').default

Вот плагин babel для этого: https://www.npmjs.com/package/babel-plugin-add-module-exports

person Roman K    schedule 28.04.2016
comment
Спасибо, но я не понимаю, как это помогает мне конвертировать cjs в модули es6. - person nevf; 29.04.2016
comment
вам не нужно ничего конвертировать, чтобы он работал - person Roman K; 29.04.2016