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

AddScriptWithoutTransform not working correctly on Linux #1292

Open
hieucd04 opened this issue Apr 20, 2022 · 2 comments
Open

AddScriptWithoutTransform not working correctly on Linux #1292

hieucd04 opened this issue Apr 20, 2022 · 2 comments

Comments

@hieucd04
Copy link

I'm using these library versions:

  • ReactJS.NET: 5.2.12
  • JavaScriptEngineSwitcher: 3.17.4

Runtime environment:

  • OS: Linux (Ubuntu 20.04)
  • .NET Version: 6

Steps to reproduce


  1. Use this code
app.UseReact(configuration =>
{
    configuration
        .AddScriptWithoutTransform("/foo/bar/react.js");            
});
  1. Deploy to a machine running Linux OS

Actual

ReactScriptLoadException: Could not find a part of the path '<webroot>/foo/bar/react.js'

Expected

No exception thrown

More info

  • Works fine on Windows, only reproducible on Linux
  • Due to some technical limitations, I cannot place Webpack bundle in WebRoot directory

Workaround

Add \\ at the beginning of the path:

app.UseReact(configuration =>
{
    configuration
        .AddScriptWithoutTransform("\\/foo/bar/react.js");            
});

Root Cause

relativePath = relativePath.TrimStart('~').TrimStart('/').TrimStart('\\');

On Linux, TrimStart('/') is a destructive command

@Daniel15
Copy link
Member

  • Due to some technical limitations, I cannot place Webpack bundle in WebRoot directory

Not even via some build process that copies the file across?

AddScript and AddScriptWithoutTransform were only built to support files in the web root, and both ~ and / at the start (or both together like ~/blah.js) represent a file in the web root. They were never tested with absolute file paths as this is not a common case.

Maybe this could be added as a boolean argument, like AddScriptWithoutTransform("/foo/bar.js", isAbsolutePath: true). We can't change the behaviour of paths starting with a / as it'd break existing call sites.

@hieucd04
Copy link
Author

Not even via some build process that copies the file across?

Sadly, no :( In the project I'm working on, there are other libraries that control the web root. If I place files in the web root the other libraries will do something with them which we don't want.

AddScript and AddScriptWithoutTransform were only built to support files in the web root ...

Oh, I didn't know that! The first time I tested it with absolute path on Windows it worked. So, I thought they supported absolute path.

Maybe this could be added as a boolean argument, like AddScriptWithoutTransform("/foo/bar.js", isAbsolutePath: true) ...

I'm not sure. I think it will work but it feels a bit weird as I've never seen a method designed like that. Usually, the method can determine whether or not the provided path is absolute or not on its own. So, in my opinion, the Developer Experience will not be very good.


I'm gonna leave this issue to you guys. Feel free to close it.
Since this behavior cannot be changed, my workaround might live at least until the 6.0 😄

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants