我有一個類似的問題here已合併到我的一個更多的研究和一個新的方式,這可以工作。Gulp過濾器與SourceMaps
基本上我試圖讓我所有的.js
和.coffee
文件在一個gulp.src()
對象和擴展名的基礎上做相關的任務。
從gulp-if開始的事情已經變成了我使用gulp-filter,我真的很喜歡。我現在遇到的問題是讓這一切與gulp-sourcemaps一起工作。目前的任務似乎覆蓋了另一個 - 但我最終希望將所有內容連接在一個文件中,在另一個文件中進行源映射,並讓每個文件擴展名執行其各自的任務。你會看到uglify任務已被註釋掉;因爲這是一直在咆哮着我;沒有一大堆人走了。當我得到過濾器工作,我有一個CoffeeScript錯誤,我注意到coffeescriptlint()
將完成它的工作,但然後我的手錶命令;雖然仍在運行,但對任何事情都沒有反應。
看起來好像我可能會沿着使用類似gulp-extract-sourcemap這樣的東西來提取每個源圖的路徑,但我不確定這是否是正確的路要走。
通常我會分離出JS和Coffeescript任務,但我有很多事情在兩者之間混合在一起,將它們與簡單的過濾器結合在一起似乎是合乎邏輯的 - 尤其是當我試圖找出兩者的源地圖。
我覺得這個是非常接近的,所以任何在正確的方向推動將不勝感激。包括當前的gulpfile.js和package.json,如果你想旋轉它。謝謝!
Gulpfile.js
// Load plugins
var gulp = require('gulp'),
jshint = require('gulp-jshint'),
coffee = require('gulp-coffee'),
changed = require('gulp-changed'),
coffeelint = require('gulp-coffeelint'),
uglify = require('gulp-uglify'),
sourcemaps = require('gulp-sourcemaps'),
notify = require('gulp-notify'),
concat = require('gulp-concat'),
filesize = require('gulp-size'),
livereload = require('gulp-livereload'),
duration = require('gulp-duration'),
gutil = require('gulp-util'),
gFilter = require('gulp-filter');
gulp.task('scripts', function() {
var jsBuildDir = 'assets/js/build/',
jsFilter = gFilter('**/*.js'),
coffeeFilter = gFilter('**/*.coffee');
return gulp.src([
'assets/js/src/_init.coffee',
'assets/js/src/_init.js'
])
.pipe(coffeeFilter)
.pipe(coffeelint().on('error', gutil.log))
.pipe(coffeelint.reporter())
.pipe(sourcemaps.init())
.pipe(coffee({bare: true}).on('error', gutil.log))
.pipe(sourcemaps.write('../../maps'))
.pipe(coffeeFilter.restore())
.pipe(jsFilter)
.pipe(jshint({
'boss': true,
'sub': true,
'evil': true,
'browser': true,
'globals': {
'module': false,
'require': true
}
}),
jshint.reporter('jshint-stylish'))
.pipe(jsFilter.restore())
.pipe(concat('scripts.min.js'))
//.pipe(uglify())
.pipe(filesize({
title: 'Scripts:'
}))
.pipe(gulp.dest(jsBuildDir))
.pipe(duration('building script files'))
.pipe(notify({ message: 'Coffeescript task complete' }));
});
// Default task
gulp.task('default', ['scripts']);
// Watch
gulp.task('watch', function() {
gulp.watch(['assets/js/src/**/*.js', 'assets/js/src/**/*.coffee'], ['scripts']);
// Create LiveReload server
var server = livereload();
// Watch files in patterns below, reload on change
gulp.watch(['assets/js/build/*']).on('change', function(file) {
server.changed(file.path);
});
});
的package.json
{
"devDependencies": {
"gulp": "^3.8.8",
"gulp-changed": "^1.0.0",
"gulp-coffee": "^2.2.0",
"gulp-coffeelint": "^0.4.0",
"gulp-concat": "^2.4.0",
"gulp-duration": "0.0.0",
"gulp-filter": "^1.0.2",
"gulp-jshint": "^1.8.4",
"gulp-livereload": "^2.1.1",
"gulp-notify": "^1.6.0",
"gulp-size": "^1.1.0",
"gulp-sourcemaps": "^1.2.2",
"gulp-uglify": "^1.0.1",
"gulp-util": "^3.0.1",
"jshint-stylish": "^0.4.0"
}
}
我做了一個NPM模塊很容易做這種事,你寫yaml文件,而不是希望它可以幫助:https://github.com/Stnaire/gulp-yaml-packages。在npm上:https://www.npmjs.com/package/gulp-yaml-packages。 – Stnaire 2016-06-26 07:57:44