我遇到了同样的问题,基本上gulp不喜欢你在src中不同的文件夹路径,你将不得不使用2个不同的任务来处理你想要的东西。
唯一的简单的方法,我发现解决这个问题是使用这个工具:npm-gulp-rename
有了这样的一行:
var rename = require("gulp-rename");
.pipe(rename(function (path) { return path.dirname = "./"; }))
这将完成被删除流中的额外的文件夹信息在它有数据后,当它输出文件时,额外的文件夹信息将被删除。
我在您的示例代码:
gulp.src([
'bower_components/simple/simple.css',
//... more CSS files
'src/scss/app.scss'
],
{base: '.'})
.pipe(sourcemaps.init())
.pipe(sass())
.pipe(sourcemaps.write())
.pipe(rename(function (path) { return path.dirname = "./"; }))
.pipe(gulp.dest('dist/css'));
UPDATE(基于您的评论):
个人而言,我会去了解这个以不同的方式:
- 将文件复制你需要使用bower_components。
- 将文件放在名为vendor的新文件夹中(忽略GIT中的文件夹)。
- 然后我正常建立SCSS。
关闭我的头顶,它的工作是这样的:
gulp.task("copy", function() {
return gulp.src([
'bower_components/simple1/simple1.css'
'bower_components/simple2/simple2.css'
], {base: '.'})
.pipe(rename(function (path) { return path.dirname = './'; }))
.pipe(gulp.dest('vendor')
)};
gulp.task("scss", ["copy"], function() {
return gulp.src([ 'src/scss/app.scss' ], {base: '.'})
.pipe(sourcemaps.init())
.pipe(sass())
.pipe(sourcemaps.write())
.pipe(gulp.dest('dist/css')
)};
我们,你可以没有我的个人建议做的重要组成部分。
您需要使用@import直接支持CSS files添加到您的app.scss其他CSS文件:
@import "../../vendor/simple1.css";
您也可以直接从bower_components使用@import夹从而跳过我的副本任务:
@import "../../bower_components/simple1/simple1.css";
第二个任务将是你运行的一个将创建你的所有CSS文件连接在一起的任务。
如果您不想在您的app.scss中使用@import,那么您可以在gulp-concat中添加另一个常见的gulp广告。如果您希望我扩展如何使用这个,请发表评论。
有几件事情要考虑:
- 级联可能使你的源地图不正确。
- 将文件从bower_components文件夹复制到供应商文件夹将使您的Web服务器上的文件可用,以便您的源映射更有意义。
gulp-flatten也将工作。 – Mark
感谢您的回复。 Gulp重命名运行,但似乎也复制库文件(在我的例子中simple.css)。所以我最终在我的dist/css目录中添加了app.css和simple.css。我希望所有的CSS都被编译到单个app.css文件中。 – Martyn
根据您的评论更新了答案,并提供了更多信息和说明。 – fjoe