我遇到了同樣的問題,基本上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