如何将诺言和烟斗混合在一起?

时间:2019-05-24 14:37:29

标签: promise gulp rollupjs

在我的项目中,我使用汇总功能从嵌套目录中的源文件编译了多个捆绑软件。

我有一个带有以下代码的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上查阅汇总的docs,并根据我的情况修改了示例,因此现在看起来像这样:

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函数包装为可以与管道一起使用的方式?

1 个答案:

答案 0 :(得分:0)

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类型错误,这是因为它将导入的terser作为模块。

有些不同的汇总插件不能以相同的方式导入,这有点令人讨厌,但是。