【发布时间】:2015-06-13 09:27:49
【问题描述】:
我有一个带有多个插件的 git 存储库(一个主要插件和几个仅用于主要插件的插件)。我正在使用 this approach 进行分发,因为 bower 没有提供一种让每个 git repo 拥有多个插件的方法。
所以,我需要缩小每个插件,为每个插件创建一个源映射,并将每个插件放入与 git 子模块相对应的单独分发文件夹中,按照惯例,我将其命名为与插件相同以使其简单.我想出了以下 Gulp 脚本,它可以一步完成,这主要基于我找到的答案 here。
return gulp.src(['./jquery.dirtyforms.js', './helpers/*.js', './dialogs/*.js'], { base: './' })
.pipe(jshint())
.pipe(jshint.reporter(stylish))
.pipe(rename(function (path) {
var baseName = path.basename;
var dirName = path.dirname;
if (dirName == 'helpers' || dirName == 'dialogs') {
path.basename = 'jquery.dirtyforms.' + dirName + '.' + baseName;
console.log(path.basename);
}
path.dirname = path.basename;
}))
.pipe(gulp.dest(distributionFolder))
.pipe(sourcemaps.init())
.pipe(rename(function (path) {
var baseName = path.basename;
var dirName = path.dirname;
if (dirName == 'helpers' || dirName == 'dialogs') {
path.basename = 'jquery.dirtyforms.' + dirName + '.' + baseName;
console.log(path.basename);
}
path.dirname = path.basename;
path.extname = '.min.js';
}))
.pipe(uglify({
outSourceMap: true,
sourceRoot: '/'
}))
.pipe(gulp.dest(distributionFolder))
.pipe(sourcemaps.write('.', {
includeContent: true,
sourceRoot: '/'
}))
.pipe(gulp.dest(distributionFolder));
它完全符合我的要求,除了一件事。为每个插件生成的 sourcemap 文件包括路径中的子目录。由于插件的最终目的地不会包含此路径,因此这是无效的。
在jquery.dirtyforms.min.js.map 文件中:
{"version":3,"sources":["jquery.dirtyforms/jquery.dirtyforms.min.js"]...
应该是
{"version":3,"sources":["jquery.dirtyforms.min.js"]...
在jquery.dirtyforms.min.js 文件中:
//# sourceMappingURL=../jquery.dirtyforms/jquery.dirtyforms.min.js.map
应该是
//# sourceMappingURL=jquery.dirtyforms.min.js.map
我翻遍了 gulp-sourcemaps 的源代码,试图找到一个覆盖文件名的选项,但似乎没有。
为此我想出了两个可能的解决方案:
- 使用正则表达式替换每个文件
- 生成
distributionFolder中的文件,生成后移动到正确的子文件夹中
但这两种方法看起来都像是 hack。如果流首先正确地创建它们会更好。有没有办法做到这一点?
【问题讨论】:
标签: gulp gulp-uglify gulp-sourcemaps