当前位置: 首页 > 知识库问答 >
问题:

Gulp-Rev替换不替换我的文件路径与Gulp-rev哈希

邵骁
2023-03-14

类似于这里的问题:如何将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

非常感谢您的帮助!

共有2个答案

朱通
2023-03-14

感谢更新您的问题!我昨天尝试了你的大口设置,发现,如果你的资产路径不正确,useref和rev插件就不能工作。在您的示例中,*. cshtml文件都在文件夹view中,但指向位于上面一层的资源。从view内的文件(如view/index.cshtml,路径css/组件/style1.css无法解析,因为它实际上应该是.../css/组件/style1.css.因此useref得到一个空的结果集,不创建任何文件,并且rev无法更新,因为它没有引用点。

获取您的cshtml中的路径,使它们相对于真正的资源,这样就可以正常工作。我希望你可以,因为这个设置看起来有点Dotnetty,我不确定你是否有改变事情的自由;-)

乐正瑞
2023-03-14

您需要向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