pkgdown icon indicating copy to clipboard operation
pkgdown copied to clipboard

Can't use Bootstrap 5 behind proxy

Open AlbertRapp opened this issue 1 year ago • 6 comments

Hi there 👋

Unfortunately, setting

template:
  bootstrap: 5

in my _pkgdown.yml file doesn't work for me and I get the following error:

Copying <pkgdown>/BS5/assets/pkgdown.js to pkgdown.js
Error in utils::download.file(file$url, cache_path, quiet = TRUE, mode = "wb") : 
  cannot open URL 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/headroom.min.js'
In addition: Warning message:
In utils::download.file(file$url, cache_path, quiet = TRUE, mode = "wb") :
  URL 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/headroom.min.js': status was 'Couldn't resolve host name'

I'm assuming this happens because I am behind a proxy and pkgdown seems to not be able to fetch the files for headroom.js. The interesting thing is that copying the files before that like <pkgdown>/BS5/assets/lightswitch.js works and for Bootstrap 3 I also don't get any issue (even though in the resulting docs headroom.js is still included via a <script> tag). Also it's worth noting that I've already tried setting options(pkgdown.internet = FALSE) but this didn't have any effect.

AlbertRapp avatar Aug 14 '24 08:08 AlbertRapp

Yes, the BS5 configuration will require an outside line to download external dependencies.

Some of the JS / CSS is included in the package (lightswitch.js) and is just copied from disk.

BS3 doesn't use the new dependency resolution approach, so you also won't need a connection.

I guess this might be an argument to keep the BS3 approach around.

jayhesselberth avatar Aug 14 '24 14:08 jayhesselberth

We might also throw a more informative error early a package is using BS5 but there is no internet connection.

jayhesselberth avatar Aug 14 '24 14:08 jayhesselberth

Yes, the BS5 configuration will require an outside line to download external dependencies.

Why though? The Bootstrap 3 version can (at least for headroom.min.js) also use the JS scripts by including them via a <script> tag and linking to the JS file on a CDN. That's why Bootstrap 3 can be used to build the pkgdown website. Of course, this requires an internet connection to properly load the pkgdown page in the browser. But for building the page, that's not necessary. Is it possible to make that possible for BS5 as well?

AlbertRapp avatar Aug 14 '24 14:08 AlbertRapp

:wave: @AlbertRapp here's the change that was made: now external assets are downloaded at build time https://github.com/r-lib/pkgdown/pull/2249

maelle avatar Aug 14 '24 14:08 maelle

Hi @maelle 👋 Thanks for the tip. This part explains the reasoning perfectly for me:

Direct asset inclusion might be relevant to people trying to strictly adhere to privacy regulations like GDPR, since otherwise IP addresses of site visitors are sent to the asset CDN operators (based in the US) on page load.

Now, I'm kind of at a conundrum though. I can set a proxy to download external assets but then the git commands that are part of the building processes don't work anymore. I'm guessing that happens due to pushes to an internal repo. Any chance it's possible to provide the external assets via the pkgdown/ directory? 🤔

AlbertRapp avatar Aug 14 '24 14:08 AlbertRapp

Hi, i do not know if that is relevant to your issue, but since https://github.com/r-lib/pkgdown/pull/2249 I have a similar error message when trying to build a site without an internet connection, even though options(pkgdown.internet = FALSE) was set.

Would there be an option to cache the external dependencies beforehand if options(pkgdown.internet = FALSE) is set? Thank you!

camillemndn avatar Oct 16 '24 10:10 camillemndn

I have the same issue. Building the site with BS 3 works fine, but I would like to use BS 5. It would be great if all templates would work without an internet connection (especially since there is this explicit option).

matthiasgomolka avatar Jan 16 '25 10:01 matthiasgomolka

Pleasee see https://github.com/r-lib/pkgdown/issues/2829#issuecomment-2518007230. You only need an internet connection once to init_site() and cache dependencies. After that, the site should build offline.

We should address the pkgdown.internet option, I don't remember why we had it and seems like it's either not working as intended or we need to clarify why / when you should use it.

jayhesselberth avatar Jan 16 '25 15:01 jayhesselberth

@jayhesselberth, thanks for the information. Unfortunately, this does not help because I never have an internet connection from my R Session at work.

The only thing helping me would be a completely self-contained package, which I would be able to install from a local repository after a security scan.

matthiasgomolka avatar Jan 16 '25 19:01 matthiasgomolka

@camillemndn @matthiasgomolka @AlbertRapp there is now the https://cran.r-project.org/web/packages/pkgdown.offline/index.html package which provides the offline capabilities.

@jayhesselberth thanks for all the effort put into pkgdown. This issue is hitting users behind proxies or corporate firewalls not being able to even run the init_site(). So the above mentioned package will give a good estimate how many users that actually concerns.

vedoa avatar May 14 '25 12:05 vedoa

@vedoa, just gave pkgdown.offline a try and it works like a charm. Many thanks for the hint!

matthiasgomolka avatar May 16 '25 11:05 matthiasgomolka