类似于这里的问题:如何将index.html中列出的文件名替换为Gulp-rev的输出?
我使用gulp useref组合我的构建块中列出的文件。我想使用gulp rev在连接文件的末尾添加一个散列,并用新文件名更新我的标记。
根据古普-转速-替换文档,我几乎完全使用了这个小调整:
var gulp = require('gulp');
var rev = require('gulp-rev');
var revReplace = require('gulp-rev-replace');
var useref = require('gulp-useref');
var filter = require('gulp-filter');
var uglify = require('gulp-uglify');
var csso = require('gulp-csso');
var RevAll = require('gulp-rev-all');
gulp.task("index", function () {
var jsFilter = filter("js/**/*.js");
var cssFilter = filter("css/**/*.css");
var revAll = new RevAll();
var userefAssets = useref.assets();
return gulp.src("Views/**/*.cshtml")
.pipe(userefAssets) // Concatenate with gulp-useref
.pipe(jsFilter)
.pipe(uglify()) // Minify any javascript sources
.pipe(jsFilter.restore())
.pipe(cssFilter)
.pipe(csso()) // Minify any CSS sources
.pipe(cssFilter.restore())
.pipe(rev()) // Rename the concatenated files
.pipe(userefAssets.restore())
.pipe(useref())
.pipe(revReplace()) // Substitute in new filenames
.pipe(gulp.dest('public'));
});
我的html看起来是这样的:
<!-- build:css css/combined.css -->
<link href="css/components/style1.css" rel="stylesheet">
<link href="css/components/style2.css" rel="stylesheet">
<link href="css/pages/style3.css" rel="stylesheet">
<!-- endbuild -->
<!-- build:js js/lib.js -->
<script type="text/javascript" src="js/global/js1.js"></script>
<script type="text/javascript" src="js/vendor/moment.js"></script>
<script type="text/javascript" src="js/components/component.calendar.js"></script>
<script type="text/javascript" src="js/pages/jaunt-hotels/matrix.js"></script>
<!-- endbuild -->
我得到的输出是:
<link rel="stylesheet" href="css/combined.css">
<script src="js/lib.js">
the </script>
但我要找的是:
<link rel="stylesheet" href="css/combined-ABC234.css">
<script src="js/lib-TYU765.js"></script>
目录结构:
root
|-css
|-style1.css
|-style2.css
|-style3.css
|-js
|-*js files here
|-views
|-*Many folders with .cshtml files
|-gulp
|-tasks
|-bundle-assets.js <- task that contains code above
非常感谢您的帮助!
感谢更新您的问题!我昨天尝试了你的大口设置,发现,如果你的资产路径不正确,useref和rev插件就不能工作。在您的示例中,*. cshtml
文件都在文件夹view
中,但指向位于上面一层的资源。从view
内的文件(如view/index.cshtml
,路径css/组件/style1.css
无法解析,因为它实际上应该是.../css/组件/style1.css
.因此useref
得到一个空的结果集,不创建任何文件,并且rev
无法更新,因为它没有引用点。
获取您的cshtml
中的路径,使它们相对于真正的资源,这样就可以正常工作。我希望你可以,因为这个设置看起来有点Dotnetty,我不确定你是否有改变事情的自由;-)
您需要向RevReplace()
传递一个选项,如下所示:
.pipe(revReplace({replace:['.cshtml']}))
默认情况下,
gulp rev replace
将仅对['.js'、'.css'、'.html'、'.hbs']
执行更改。
更多有关https://www.npmjs.com/package/gulp-rev-replace#options-缓和紧张局势。
我在使用
.ejs
时遇到了类似的问题。希望这有帮助。。
我用的是Rails 4.2 Ruby 2.2 我生成了一个新的应用程序使用:rails的新应用程序-Skip-链轮 我所有的Gulp任务都成功运行(其中很多任务:从Gulp changed和Gulp livereload到Gulp minify css、Gulp uncss和其他)。 使用gulp rev all,我能够生成具有MD5指纹命名约定的所有资产。 它们被正确保存到rev-manifes
然后我试着这样称呼它。 不幸的是,修改URL编码路径替换后,我最终请求而不是。是否有任何方法可以禁用路径替换的URL编码或跨多个路径段进行替换?不幸的是,我甚至不知道有多少路径段,它都是由API控制的。
命名 git-rev-parse - Pick out and massage parameters 概要 git rev-parse [ --option ] <args>… 描述 许多Git瓷器命令会混合使用标志(即以短划线开头的参数-)以及参数,这些参数用于git rev-list它们在内部使用的基础命令,以及标志和参数用于其下游使用的其他命令git rev-list。该命令用于区分它们。
Name git-rev-list - 按反向时间顺序列出提交对象 概要 git rev-list [ --max-count=<number> ] [ --skip=<number> ] [ --max-age=<timestamp> ] [ --min-age=<timestamp> ] [ --s
名称 git-name-rev - 查找给定转速的符号名称 概要 git name-rev [--tags] [--refs=<pattern>] ( --all | --stdin | <commit-ish>… ) 描述 查找适用于人类消化的符号名称,以可解析的任何格式给出修订git rev-parse。 选项 --tags 不要使用分支名称,而只使用标签来命名提交
我试图执行但它给出了以下错误: 文件替换中的 C:\Users\Marina\桌面\heliosFrontEnd_admin\src\环境\环境.dev.ts 路径不存在。错误:文件替换中的 C:\用户\码头\桌面\heliosFrontEnd_admin\src\环境\环境.dev.ts 路径不存在。at Object.normalizeFileReplacements (C:\Users\Ma