Как мне смешать обещания и трубу глотком? - PullRequest
1 голос
/ 24 мая 2019

В моем проекте я собираю несколько пакетов из исходных файлов во вложенных каталогах, используя накопительный пакет.

У меня был gulpfile со следующим кодом, который работал нормально:

function build_app_js(file, name) {
  return gulp.src(file)
    .pipe(sourcemaps.init())
    .pipe(rollup({format:'iife'}))
    .pipe(terser())
    .pipe(rename(name + '.js'))
    .pipe(rename({suffix: '.min'}))
    .pipe(sourcemaps.write())
    .pipe(gulp.dest(js_apps_dir))
}
// call the above for multiple sets of file+app_name

Но потом яизменил одну из зависимостей в моем коде ES6, к которой я получил доступ по относительному пути, в пакет npm, так что теперь он находится в node_modules.Для решения этой проблемы необходим плагин, поэтому я изменил вышеупомянутое на это:

   .pipe(rollup({plugins: [resolveNodeModules()], format:'iife'}))

Однако это просто не работает.

Я обращался к документам свертки на gulpи адаптировал пример к моему случаю, так что теперь он выглядит следующим образом:

function build_app_js(file, name) {
  return rollup.rollup({
    input: file,
    plugins: [
      resolveNodeModules()
    ]
  }).then(bundle => {
    return bundle.write({
      file: js_apps_dir + '/' + name + '.js',
      format: 'iife',
      sourcemap: true
    });
  });
}

Это работает, но не имеет шага минимизации, и я не знаю, как его добавить.

В целом, это совершенно другая парадигма, чем использование pipe (), и я не знаю, как заставить оба работать вместе.

Пытаюсь ли добавить минификацию в синтаксисе Promise или обернуть функцию Promise таким образом, чтобы я мог использовать ее с pipe?

1 Ответ

0 голосов
/ 01 июня 2019

Ответ на собственный вопрос через 8 дней.

Минимизация может быть достигнута с помощью плагинов-накопителей, таких как rollup-plugin-terser .

Вам просто нужно быть осторожнымс тем, как вы их импортируете:

var rollup = require('rollup');
var resolveNodeModules = require('rollup-plugin-node-resolve');
//var terser = require('rollup-plugin-terser'); // WRONG
var {terser} = require('rollup-plugin-terser'); // CORRECT

function build_app_js(file, name) {
  return rollup.rollup({
    input: file,
    plugins: [
      resolveNodeModules(),
      terser()
    ]
  }).then(bundle => {
    return bundle.write({
      file: js_apps_dir + '/' + name + '.js',
      format: 'iife',
      sourcemap: true
    });
  });
}

Если вы импортируете это неправильно, вы получите ошибку типа terser() is not a function, потому что она импортирует терсер как модуль.

Немного раздражает, что разные накопительные плагины не могут быть импортированы одинаково, но эй.

...