Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Leading slash added to filenames under gulp 4 #164

Open
dmellstrom opened this issue Oct 28, 2018 · 18 comments
Open

Leading slash added to filenames under gulp 4 #164

dmellstrom opened this issue Oct 28, 2018 · 18 comments

Comments

@dmellstrom
Copy link
Contributor

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

@dmellstrom
Copy link
Contributor Author

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.

@simonua
Copy link
Collaborator

simonua commented Nov 7, 2018

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.

@adamreisnz
Copy link

adamreisnz commented Nov 14, 2018

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

@simonua
Copy link
Collaborator

simonua commented Nov 14, 2018

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

@adamreisnz
Copy link

adamreisnz commented Nov 14, 2018

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.

@simonua
Copy link
Collaborator

simonua commented Nov 15, 2018

Ugh! I'm sorry for the wasted time.

@adamreisnz
Copy link

No worries, these things happen 👍

@Towerism
Copy link

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.

@andzejsw
Copy link

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

@j-fulbright
Copy link

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?

@simonua
Copy link
Collaborator

simonua commented Jul 29, 2019

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.

@roman-rr
Copy link

roman-rr commented Aug 22, 2019

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);
});

@sblandin2018
Copy link

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.

@binarykitchen
Copy link

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?

@AshokKumarSharma
Copy link

@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

@AshokKumarSharma
Copy link

@roman-rr that solution doesn't work

@opolo
Copy link

opolo commented Apr 14, 2021

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

@jhlee8804
Copy link

@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
Projects
None yet
Development

No branches or pull requests