Thanks to visit codestin.com
Credit goes to github.com

Skip to content

path resolution fails on Windows #249

@arthertz

Description

@arthertz

Compiled scripts produce ERR_MODULE_NOT_FOUND exceptions on all of my Windows machines. This seems to have something to do with the paths generated by the compiler and some unexpected behavior from racket/path.

Racks is able to successfully compile the program, but when I try to run the module with Node, it errors out trying to import a file called 'untimecore.js'. I took a look through the compiled version of my racket code, and found this at the top of the file:

import * as $rjs_core from '..\runtime\core.js';
import * as M0 from "..\runtime\kernel.rkt.js";
import * as M1 from "..\collects\racket\private\modbeg.rkt.js";

These aren't the intended paths, because the single back-slashes escape characters in the file names. This is why '..\runtime\core.js' becomes something like ' untimecore.js'.
I have a working theory for why the paths are being generated this way, although I am new to the codebase, so it could easily be something else.

I suspected this was a windows-specific problem, so I went looking for how these import statements are built. I found that the function simple-module-path in util.rkt can call simple-form-path, which in turn calls simplify-path.

According to the documentation, simplify-path will replace / with \ on Windows, so it certainly seems like this might be the culprit. However, this isn't a bug with simplify-path but the intended behavior. It might be necessary to go through the code and differentiate between when a path is going to be used with the file system and when the path string is to be used in compiled javascript code.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions