我有一个 css 构建任务,它合并了来自 bower 依赖项和我自己的 css 的资源。
构建任务是使用 git 源代码控制的项目的一部分。该项目已经正常运行了一年多。
直到昨天,当我重新安装运行构建任务的 npm 依赖项时,一切都在我的 Windows 笔记本电脑上正常工作。
下面是一个简化的例子
gulpfile.js
var gulp = require('gulp'),
$ = require('gulp-load-plugins')();
gulp.task('default', function () {
return $.merge (
gulp.src('./bower.json')
.pipe($.mainBowerFiles('**/*.css', {
includeDev: 'exclusive',
group: 'css'
})
),
gulp.src(['./source/css/styles.css'])
)
.pipe($.plumber())
.pipe($.concat('stylesheet.css'))
.pipe(gulp.dest('./build/css'))
});
包.json
{
"name": "merge",
"version": "1.0.0",
"description": "",
"main": "gulpfile.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"devDependencies": {
"gulp": "^3.9.1",
"gulp-concat": "^2.6.1",
"gulp-load-plugins": "^1.5.0",
"gulp-main-bower-files": "^1.6.2",
"gulp-merge": "^0.1.1",
"gulp-plumber": "^1.1.0",
}
}
和 bower.json
{
"name": "merge",
"description": "",
"main": "gulpfile.js",
"authors": [
""
],
"license": "ISC",
"homepage": "",
"private": true,
"ignore": [
"**/.*",
"node_modules",
"bower_components",
"test",
"tests"
],
"devDependencies": {
"normalize-css": "^7.0.0",
"reset-css": "^2.2.1"
},
"group": {
"css": [
"reset-css",
"normalize-css"
]
}
}
在昨天之前,该任务将合并在$.merge(...)
. 从昨天开始,npm install
我发现合并只会输出第一个声明源的结果。
经过一些测试,我发现如果我反转合并源的顺序,那么两个源都会合并到设置的输出目标。
var gulp = require('gulp'),
$ = require('gulp-load-plugins')();
// the order of the sources has been reversed
gulp.task('default', function () {
return $.merge (
gulp.src(['./source/css/styles.css']),
gulp.src('./bower.json')
.pipe($.mainBowerFiles('**/*.css', {
includeDev: 'exclusive',
group: 'css'
})
)
)
.pipe($.plumber())
.pipe($.concat('stylesheet.css'))
.pipe(gulp.dest('./build/css'))
});
此解决方案的问题在于输出内容反转,这可能会导致样式继承等问题。成功输出的这种更改使我认为.pipe($.mainBowerFiles(...)
声明的方式和位置可能存在问题。
我还尝试用 merge2 和 main-bower-files 分别替换 gulp-merge 和 gulp-main-bower-files 的已安装模块。使用其中一个或两个都解决了问题,但这不是一个理想的解决方法,因为它意味着更新 gulp 任务和安装的模块。
在我的项目中,突然无法输出任务合并 css(或 js)对于项目中的任何历史提交或分支都有实际问题。
有没有我可以诊断原始失败的$.merge(...)
方法,或者我可以在我的 git 项目和任何分支的所有提交中用 merge2 追溯替换 gulp-merge 的方法?