无法让 gulp-rev-replace 与 gulp-useref 一起使用
Can't get gulp-rev-replace working with gulp-useref
继续我之前的 - 但这次是下一步:让文件修订生效。
我正在使用 Gulp 学习 johnpapa 的自动化课程,但似乎又碰壁了(这就是当您尝试将简洁的课程改编为不同的文件结构时得到的结果 :P )。
基本上,问题是我确实得到了以修订命名的文件,但这些名称没有进入最终结果 test.jsp
,我不明白为什么...
这是任务(为简洁起见省略了缩小,但它可以很好地处理文件修订):
gulp.task('build-dev', ['inject'], function () {
var assets = $.useref.assets({searchPath: ''});
return gulp
.src(config.indexFile)
.pipe($.rename('test.jsp'))
.pipe($.plumber())
.pipe(assets)
.pipe($.rev())
.pipe(assets.restore())
.pipe($.useref())
.pipe($.revReplace({modifyUnreved: replaceDirectory, modifyReved: replaceDirectory}))
.pipe(gulp.dest(config.indexLocation))
.pipe($.rev.manifest())
.pipe(gulp.dest(config.indexLocation))
;
});
inject
是将 css 和 js 引用注入索引文件的任务(正常工作),$
是 require('gulp-load-plugins')({lazy: true})
,config.indexFile
是index.jsp
.
replaceDirectory
函数是(因为 rev-manifest 生成完整路径名而使用):
function replaceDirectory(path) {
var strToReplace = '../..';
var strToReplaceWith = process.cwd().replace(/\/g, '/') + '/WebContent';
if (path) {
return path.replace(strToReplace, strToReplaceWith);
} else {
return path;
}
}
我的文件结构(与课程中的不同)是:
- ModuleDir
- dist
- css
- lib.css
- app.css
- fonts
- images
- js
- lib.js
- app.js
- css
- js
- web-app
- InnerDir
- index.jsp
- test.jsp
- package.json, bower.json, etc. (all the required files)
基本上,index.jsp 是为 CSS 和 JS 库和应用程序资产处理的,它们被缩小并连接成 lib.css、lib.js、app.css和 app.js。后来所有这些都被注入到 index.jsp 的副本中,称为 test.jsp.
磁盘上的资产收集、串联、注入工作和文件修改工作非常出色。 test.jsp
中的文件名更新- 没那么多...
任何想法或指示将不胜感激。
与此同时(除非我找到问题的根源或你们中的任何人可以提供帮助),我选择了不同的缓存清除方案:
gulp.task('build-dev', ['inject'], function () {
var assets = $.useref.assets({searchPath: ''});
var cb = Math.random();
return gulp
.src(config.indexFile)
.pipe($.rename('test.jsp'))
.pipe($.plumber())
.pipe(assets)
.pipe(assets.restore())
.pipe($.useref())
.pipe($.replace('dist/css/lib.css', 'dist/css/lib.css?cb=' + cb))
.pipe($.replace('dist/css/app.css', 'dist/css/app.css?cb=' + cb))
.pipe($.replace('dist/js/lib.js', 'dist/js/lib.css?cb=' + cb))
.pipe($.replace('dist/js/app.js', 'dist/js/app.js?cb=' + cb))
.pipe(gulp.dest(config.indexLocation))
;
});
这不是我想要的答案,但却是我需要的答案。 :)
您必须将 replaceInExtensions: '.jsp'
添加到 revReplace()
的选项中。
这个问题纠结了一天半,看了插件代码才搞定。我正在使用 .php 文件。文档确实说你需要这样做,但很容易错过。
希望对您有所帮助。
继续我之前的
我正在使用 Gulp 学习 johnpapa 的自动化课程,但似乎又碰壁了(这就是当您尝试将简洁的课程改编为不同的文件结构时得到的结果 :P )。
基本上,问题是我确实得到了以修订命名的文件,但这些名称没有进入最终结果 test.jsp
,我不明白为什么...
这是任务(为简洁起见省略了缩小,但它可以很好地处理文件修订):
gulp.task('build-dev', ['inject'], function () {
var assets = $.useref.assets({searchPath: ''});
return gulp
.src(config.indexFile)
.pipe($.rename('test.jsp'))
.pipe($.plumber())
.pipe(assets)
.pipe($.rev())
.pipe(assets.restore())
.pipe($.useref())
.pipe($.revReplace({modifyUnreved: replaceDirectory, modifyReved: replaceDirectory}))
.pipe(gulp.dest(config.indexLocation))
.pipe($.rev.manifest())
.pipe(gulp.dest(config.indexLocation))
;
});
inject
是将 css 和 js 引用注入索引文件的任务(正常工作),$
是 require('gulp-load-plugins')({lazy: true})
,config.indexFile
是index.jsp
.
replaceDirectory
函数是(因为 rev-manifest 生成完整路径名而使用):
function replaceDirectory(path) {
var strToReplace = '../..';
var strToReplaceWith = process.cwd().replace(/\/g, '/') + '/WebContent';
if (path) {
return path.replace(strToReplace, strToReplaceWith);
} else {
return path;
}
}
我的文件结构(与课程中的不同)是:
- ModuleDir
- dist
- css
- lib.css
- app.css
- fonts
- images
- js
- lib.js
- app.js
- css
- js
- web-app
- InnerDir
- index.jsp
- test.jsp
- package.json, bower.json, etc. (all the required files)
基本上,index.jsp 是为 CSS 和 JS 库和应用程序资产处理的,它们被缩小并连接成 lib.css、lib.js、app.css和 app.js。后来所有这些都被注入到 index.jsp 的副本中,称为 test.jsp.
磁盘上的资产收集、串联、注入工作和文件修改工作非常出色。 test.jsp
中的文件名更新- 没那么多...
任何想法或指示将不胜感激。
与此同时(除非我找到问题的根源或你们中的任何人可以提供帮助),我选择了不同的缓存清除方案:
gulp.task('build-dev', ['inject'], function () {
var assets = $.useref.assets({searchPath: ''});
var cb = Math.random();
return gulp
.src(config.indexFile)
.pipe($.rename('test.jsp'))
.pipe($.plumber())
.pipe(assets)
.pipe(assets.restore())
.pipe($.useref())
.pipe($.replace('dist/css/lib.css', 'dist/css/lib.css?cb=' + cb))
.pipe($.replace('dist/css/app.css', 'dist/css/app.css?cb=' + cb))
.pipe($.replace('dist/js/lib.js', 'dist/js/lib.css?cb=' + cb))
.pipe($.replace('dist/js/app.js', 'dist/js/app.js?cb=' + cb))
.pipe(gulp.dest(config.indexLocation))
;
});
这不是我想要的答案,但却是我需要的答案。 :)
您必须将 replaceInExtensions: '.jsp'
添加到 revReplace()
的选项中。
这个问题纠结了一天半,看了插件代码才搞定。我正在使用 .php 文件。文档确实说你需要这样做,但很容易错过。
希望对您有所帮助。