在我的项目中,我使用汇总功能从嵌套目录中的源文件编译了多个捆绑软件。
我有一个带有以下代码的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函数包装为可以与管道一起使用的方式?
答案 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作为模块。
有些不同的汇总插件不能以相同的方式导入,这有点令人讨厌,但是。