Skip to content

Leading slash added to filenames under gulp 4 #164

Open

Description

@dmellstrom

Calling this package with gulp 4 erroneously results in template filenames with leading separators.

This seems to be due to the breaking change in vinyl, where internal path records such as file.base are now normalized: gulpjs/vinyl@9ae7cd1#diff-c49ce3c4dfcfa830e06789881dd4d5d4
That change breaks the following code:
url = path.join(root, file.path.replace(base || file.base, ''));

It is the root cause of #153

I posted a workaround in the other issue, but I'll see if I can cook something up that's compatible with all vinyl versions instead

Activity

  1. dmellstrom commented on Oct 28, 2018

    @dmellstrom
    ContributorAuthor

    To add some confusion, the tests for this package use vinyl 2. As a result, they have been written to accommodate the regression. I really don't think they should expect URLs with leading slashes for the template filenames, as that doesn't match the behavior observed when running this plugin with gulp 3.

  2. reopened this on Nov 7, 2018
  3. simonua commented on Nov 7, 2018

    @simonua
    Collaborator

    Reopening due to breaking change with Gulp 3 after fixing this for Gulp 4 in 2.2.4. The code has since been reverted and 2.2.5 was published to reestablish status quo prior to this fix.

  4. adamreisnz commented on Nov 14, 2018

    @adamreisnz

    This is a problem, it's breaking all our builds now >.<
    Fixed by using 2.2.4

  5. simonua commented on Nov 14, 2018

    @simonua
    Collaborator

    @adamreisnz, but works when you continue to use transformUrl, correct?

  6. adamreisnz commented on Nov 14, 2018

    @adamreisnz

    Yes that's right. We had 2 repositories actually with a similar build process, and one of them didn't have the transformUrl logic, hence the failure. Took us 2 hours to figure out what's happening 😢

    Once we put the transformUrl in place it was working again.

  7. simonua commented on Nov 15, 2018

    @simonua
    Collaborator

    Ugh! I'm sorry for the wasted time.

  8. adamreisnz commented on Nov 15, 2018

    @adamreisnz

    No worries, these things happen 👍

  9. Towerism commented on Dec 10, 2018

    @Towerism

    This is exactly what I'm dealing with right now. I'm upgrading dependencies of a legacy project, and upgrading gulp3->gulp4 mysteriously broke the site.

  10. andzejsw commented on Apr 17, 2019

    @andzejsw

    Same happened to me. Fixed by using 2.2.4 (i had v2.2.6).

  11. j-fulbright commented on Jul 29, 2019

    @j-fulbright

    I see that 3.0.0 still is exhibiting this issue.. So I'm assuming that till whenever, that going back to 2.2.4 is still recommended?

  12. simonua commented on Jul 29, 2019

    @simonua
    Collaborator

    Can you use the transformUrl approach with 3.0.0? I haven't dug into this much lately, admittedly, and I don't know that I am going to have the time for this, but if anyone were to put up a PR for a community review, that'd be a good step.

  13. roman-rr commented on Aug 22, 2019

    @roman-rr

    Hope it helps (gulp v4)

    gulpfile.js

    var replace = require('gulp-replace');
    ...
    ...
    ...
    gulp.task('templatecache', function(done) {
      gulp.src(./www/js/**/**/*.html)
        .pipe(templateCache())
        .pipe(replace('put(\'/', 'put(\''))
        .pipe(gulp.dest('./www/js'))
        .on('end', done);
    });
    
  14. sblandin2018 commented on Apr 10, 2020

    @sblandin2018

    I incurred in this problem today migrating from gulp 3.9.1 to gulp 4.0.2

    The transformUrl approach works with 3.0.0 but for some reason I don't understand the url passed to transformUrl function does not contain slashes but backslashes.

    ie instead of:

    /session/auto-planning/AutoPlanning.html

    you get:

    \session\auto-planning\AutoPlanning.html

    To make transformUrl approach remove the leading slash you need to write:

    transformUrl: function (url) {
        return url.replace(/^\\/, '');
    }
    

    Can you use the transformUrl approach with 3.0.0? I haven't dug into this much lately, admittedly, and I don't know that I am going to have the time for this, but if anyone were to put up a PR for a community review, that'd be a good step.

  15. binarykitchen commented on Jun 11, 2020

    @binarykitchen

    Ugh, this bug did cost me hours and was a pain until I found the above temporary solution. But really, this should be fixed eh?

  16. AshokKumarSharma commented on Oct 8, 2020

    @AshokKumarSharma

    @binarykitchen what was solution you take to remove the slash.
    required output
    $templateCache.put("directives/sy-dob-selector-directive.html","html");
    but getting
    $templateCache.put("/directives/sy-dob-selector-directive.html","html");

    i just need to remove the slash .
    i was migrating the gulp 3 to 4 version

  17. AshokKumarSharma commented on Oct 8, 2020

    @AshokKumarSharma

    @roman-rr that solution doesn't work

  18. opolo commented on Apr 14, 2021

    @opolo

    Thx, transformUrl fix worked just fine for our legacy solution I just upgraded to Gulp v4.

  19. jhlee8804 commented on Oct 13, 2022

    @jhlee8804

    @sblandin2018 Not working on osx.

    use this:

    transformUrl: function (url) {
        return url.replace(/^\//, '');
    }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions