Gulp 任务完成且没有错误,但没有文件保存到目标
Gulp Task completes with no error but no file is saved to destination
我被困在一个琐碎的问题中,无法掌握它。
场景如下:
我正在使用 Gulp 任务将我的 html
模板转换为 javascript
使用 gulp-html2js
我的环境是 Node v6.9.1, gulp 3.9.1, Windows 7
这里是gulpfile.js
var gulp = require('gulp');
var concat = require('gulp-concat');
var html2js = require('gulp-html2js');
var sourceDir = "D:\Programs_Insalled\nodejs\nodeapps\myApp"
gulp.task('templates', function() {
return gulp.src( 'D:\Programs_Insalled\nodejs\nodeapps\myApp\templates\*.html').
pipe(html2js({outputModuleName: 'templates'})).
pipe(concat('templates.js')).
pipe(gulp.dest('D:\Programs_Insalled\nodejs\nodeapps\myApp\bin'));
});
当我 运行 任务时,它会在几毫秒内完成,但 templates.js
不会在 bin
目录中生成
D:\Programs_Insalled\nodejs\nodeapps\myApp>gulp templates
[15:28:45] Using gulpfile D:\Programs_Insalled\nodejs\nodeapps\myApp\gulpfile.js
[15:28:45] Starting 'templates'...
[15:28:45] Finished 'templates' after 19 ms
我在 GitHub 和 Whosebug 上列出的类似项目中尝试了以下建议,但没有成功,
https://github.com/yeoman/generator-webapp/issues/182
https://github.com/yeoman/generator-webapp/issues/225
谁能帮我找出错误。
谢谢。
EDIT 所提供示例的输出:
D:\Programs_Insalled\nodejs\nodeapps\myApp>gulp models
[17:13:10] Using gulpfile D:\Programs_Insalled\nodejs\nodeapps\myApp\gulpfile.js
[17:13:10] Starting 'models'...
[17:13:10] Finished 'models' after 21 ms
D:\Programs_Insalled\nodejs\nodeapps\myApp>gulp templates
[17:13:13] Using gulpfile D:\Programs_Insalled\nodejs\nodeapps\myApp\gulpfile.js
[17:13:13] Starting 'templates'...
D:\Programs_Insalled\nodejs\nodeapps\myApp\node_modules\vinyl\index.js:120
if (!this.path) throw new Error('No path specified! Can not get relative.');
^
Error: No path specified! Can not get relative.
at File.get (D:\Programs_Insalled\nodejs\nodeapps\myApp\node_modules\vinyl\index.js:120:27)
at DestroyableTransform.bufferContents [as _transform] (D:\Programs_Insalled\nodejs\nodeapps\myA
pp\node_modules\gulp-concat\index.js:70:20)
at DestroyableTransform.Transform._read (D:\Programs_Insalled\nodejs\nodeapps\myApp\node_modules
\gulp-concat\node_modules\readable-stream\lib\_stream_transform.js:184:10)
at DestroyableTransform.Transform._write (D:\Programs_Insalled\nodejs\nodeapps\myApp\node_module
s\gulp-concat\node_modules\readable-stream\lib\_stream_transform.js:172:12)
at doWrite (D:\Programs_Insalled\nodejs\nodeapps\myApp\node_modules\gulp-concat\node_modules\rea
dable-stream\lib\_stream_writable.js:237:10)
at writeOrBuffer (D:\Programs_Insalled\nodejs\nodeapps\myApp\node_modules\gulp-concat\node_modul
es\readable-stream\lib\_stream_writable.js:227:5)
at DestroyableTransform.Writable.write (D:\Programs_Insalled\nodejs\nodeapps\myApp\node_modules\
gulp-concat\node_modules\readable-stream\lib\_stream_writable.js:194:11)
at DestroyableTransform.ondata (D:\Programs_Insalled\nodejs\nodeapps\myApp\node_modules\through2
\node_modules\readable-stream\lib\_stream_readable.js:531:20)
at emitOne (events.js:96:13)
at DestroyableTransform.emit (events.js:188:7)
D:\Programs_Insalled\nodejs\nodeapps\myApp>
。因为 pipe 比 pipe 更好,我给你一个我的 gulpile 的例子,你不需要把绝对机器路径放在 dest 你的 gulpfile 是任务的根路径 gulp 使用 js 使用 js 路径试试这个
从来没有使用过 html2js 我不知道你的语法是否正确但首先尝试使用此路径
我的例子
gulp.task('models', function(){
return gulp.src('models/*.*')
.pipe(gulp.dest('../dist/models'))
});
为你尝试一下
gulp.task('templates', function() {
return gulp.src( 'templates/*.html')
.pipe(html2js({outputModuleName: 'templates'}))
.pipe(concat('templates.js'))
.pipe(gulp.dest('bin'))
});
所以,我终于找到了解决方案,Alhamdolilah
问题不在于 gulp task
或 html2js
,真正的问题在于 gulp-concat
而且我意识到不需要它,因为输出已经由 html2js
连接
这里是改进的代码:
gulp.task('templates', function () {
gulp.src('templates/*.html')
.pipe(html2js('templates.js', {
outputModuleName: 'templates',
name: 'templates'
}))
.pipe(gulp.dest('bin/'));
});
我被困在一个琐碎的问题中,无法掌握它。
场景如下:
我正在使用 Gulp 任务将我的 html
模板转换为 javascript
使用 gulp-html2js
我的环境是 Node v6.9.1, gulp 3.9.1, Windows 7
这里是gulpfile.js
var gulp = require('gulp');
var concat = require('gulp-concat');
var html2js = require('gulp-html2js');
var sourceDir = "D:\Programs_Insalled\nodejs\nodeapps\myApp"
gulp.task('templates', function() {
return gulp.src( 'D:\Programs_Insalled\nodejs\nodeapps\myApp\templates\*.html').
pipe(html2js({outputModuleName: 'templates'})).
pipe(concat('templates.js')).
pipe(gulp.dest('D:\Programs_Insalled\nodejs\nodeapps\myApp\bin'));
});
当我 运行 任务时,它会在几毫秒内完成,但 templates.js
不会在 bin
目录中生成
D:\Programs_Insalled\nodejs\nodeapps\myApp>gulp templates
[15:28:45] Using gulpfile D:\Programs_Insalled\nodejs\nodeapps\myApp\gulpfile.js
[15:28:45] Starting 'templates'...
[15:28:45] Finished 'templates' after 19 ms
我在 GitHub 和 Whosebug 上列出的类似项目中尝试了以下建议,但没有成功,
https://github.com/yeoman/generator-webapp/issues/182
https://github.com/yeoman/generator-webapp/issues/225
谁能帮我找出错误。
谢谢。
EDIT 所提供示例的输出:
D:\Programs_Insalled\nodejs\nodeapps\myApp>gulp models
[17:13:10] Using gulpfile D:\Programs_Insalled\nodejs\nodeapps\myApp\gulpfile.js
[17:13:10] Starting 'models'...
[17:13:10] Finished 'models' after 21 ms
D:\Programs_Insalled\nodejs\nodeapps\myApp>gulp templates
[17:13:13] Using gulpfile D:\Programs_Insalled\nodejs\nodeapps\myApp\gulpfile.js
[17:13:13] Starting 'templates'...
D:\Programs_Insalled\nodejs\nodeapps\myApp\node_modules\vinyl\index.js:120
if (!this.path) throw new Error('No path specified! Can not get relative.');
^
Error: No path specified! Can not get relative.
at File.get (D:\Programs_Insalled\nodejs\nodeapps\myApp\node_modules\vinyl\index.js:120:27)
at DestroyableTransform.bufferContents [as _transform] (D:\Programs_Insalled\nodejs\nodeapps\myA
pp\node_modules\gulp-concat\index.js:70:20)
at DestroyableTransform.Transform._read (D:\Programs_Insalled\nodejs\nodeapps\myApp\node_modules
\gulp-concat\node_modules\readable-stream\lib\_stream_transform.js:184:10)
at DestroyableTransform.Transform._write (D:\Programs_Insalled\nodejs\nodeapps\myApp\node_module
s\gulp-concat\node_modules\readable-stream\lib\_stream_transform.js:172:12)
at doWrite (D:\Programs_Insalled\nodejs\nodeapps\myApp\node_modules\gulp-concat\node_modules\rea
dable-stream\lib\_stream_writable.js:237:10)
at writeOrBuffer (D:\Programs_Insalled\nodejs\nodeapps\myApp\node_modules\gulp-concat\node_modul
es\readable-stream\lib\_stream_writable.js:227:5)
at DestroyableTransform.Writable.write (D:\Programs_Insalled\nodejs\nodeapps\myApp\node_modules\
gulp-concat\node_modules\readable-stream\lib\_stream_writable.js:194:11)
at DestroyableTransform.ondata (D:\Programs_Insalled\nodejs\nodeapps\myApp\node_modules\through2
\node_modules\readable-stream\lib\_stream_readable.js:531:20)
at emitOne (events.js:96:13)
at DestroyableTransform.emit (events.js:188:7)
D:\Programs_Insalled\nodejs\nodeapps\myApp>
。因为 pipe 比 pipe 更好,我给你一个我的 gulpile 的例子,你不需要把绝对机器路径放在 dest 你的 gulpfile 是任务的根路径 gulp 使用 js 使用 js 路径试试这个 从来没有使用过 html2js 我不知道你的语法是否正确但首先尝试使用此路径
我的例子
gulp.task('models', function(){
return gulp.src('models/*.*')
.pipe(gulp.dest('../dist/models'))
});
为你尝试一下
gulp.task('templates', function() {
return gulp.src( 'templates/*.html')
.pipe(html2js({outputModuleName: 'templates'}))
.pipe(concat('templates.js'))
.pipe(gulp.dest('bin'))
});
所以,我终于找到了解决方案,Alhamdolilah
问题不在于 gulp task
或 html2js
,真正的问题在于 gulp-concat
而且我意识到不需要它,因为输出已经由 html2js
这里是改进的代码:
gulp.task('templates', function () {
gulp.src('templates/*.html')
.pipe(html2js('templates.js', {
outputModuleName: 'templates',
name: 'templates'
}))
.pipe(gulp.dest('bin/'));
});