Skip to content

workspace dependencies do not work with import aliases #53

@andykais

Description

@andykais

I have set up a workspace with three packages:

{
  "workspace": [
    "./packages/core",
    "./packages/cli",
    "./packages/web",
  ],

  "imports": {
    "@std/fs": "jsr:@std/fs@^1.0.1",
    "@std/path": "jsr:@std/path@^1.0.2",
    "@andykais/ts-rpc": "jsr:@andykais/ts-rpc@^0.1.1",
    "@std/media-types": "jsr:@std/media-types@0.224.0",
    "forager-test": "./lib/test/lib/util.ts"
  },

  "nodeModulesDir": "auto"
}

I am working on setting up the web package that will be a sveltekit project. My vite.config.ts looks like this:

import tailwindcss from "@tailwindcss/vite";
import deno from "@deno/vite-plugin";
import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vite';

export default defineConfig({
	plugins: [deno(), sveltekit(), tailwindcss()],
  server: {
    fs: {
      allow: ['../../node_modules']
    }
  }
});

I have not touched the defaults from deno run npm:sv create web (with the options typesscript, tailwind). I noticed that when I attempt to import the @forager/core (mapped to ./packages/core dependency, it fails because of an import alias I have set up in that workspace. Full deno.json here:

{
  "name": "@forager/core",
  "version": "0.6.0",

  "tasks": {
    "lint": "deno lint",
    "test": "deno test --allow-run=ffprobe,ffmpeg --unstable-ffi --check --allow-read --allow-write --allow-ffi --allow-env=HOME,DENO_DIR,XDG_CACHE_HOME --allow-net=github.com,objects.githubusercontent.com --trace-leaks test",
    "test:watch": "deno test --allow-run=ffprobe,ffmpeg --unstable-ffi --check --allow-read --allow-write --allow-ffi --allow-env=HOME,DENO_DIR,XDG_CACHE_HOME --allow-net=github.com,objects.githubusercontent.com --trace-leaks --watch"
  },

  "imports": {
    "@std/fmt": "jsr:@std/fmt@0.225.6",
    "@std/fs": "jsr:@std/fs@0.229.3",
    "@std/log": "jsr:@std/log@^0.224.6",
    "@std/media-types": "jsr:@std/media-types@0.224.0",
    "@std/path": "jsr:@std/path@1.0.0",
    "@torm/sqlite": "jsr:@torm/sqlite@^1.6.0",
    "forager": "./src/mod.ts",
    "ts-pattern": "npm:ts-pattern@5.2.0",
    "zod": "npm:zod@^3.24.2",
    "~/": "./src/"
  },

  "exports": {
    ".": "./src/mod.ts",
    "./logger": "./src/lib/logger.ts"
  },

  "lint": {
    "include": [
      "./src/",
      "./test/"
    ],
    "rules": {
      "tags": [],
      "include": [
        "no-unused-vars"
      ]
    }
  }
}

I believe the key piece that is breaking here is "~/": "./src/". I feel this is true because vite is breaking on the very first import that uses the alias, though it resolves relative imports.

4:26:06 PM [vite] (ssr) Error when evaluating SSR module /Users/andrew.kaiser/Code/andykais/forager/monorepo/packages/web/src/routes/test/+server.ts: Cannot find module '~/lib/logger.ts' imported from '/Users/andrew.kaiser/Code/andykais/forager/monorepo/packages/core/src/context.ts'
      at fetchModule (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/chunks/dep-ByPKlqZ5.js:52036:19)
      at RunnableDevEnvironment.fetchModule (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/chunks/dep-ByPKlqZ5.js:53130:12)
      at fetchModule (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/chunks/dep-ByPKlqZ5.js:53088:21)
      at handleInvoke (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/chunks/dep-ByPKlqZ5.js:44492:28)
      at EventEmitter.listenerForInvokeHandler (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/chunks/dep-ByPKlqZ5.js:44565:25)
      at EventEmitter.emit (ext:deno_node/_events.mjs:393:28)
      at Object.send (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/chunks/dep-ByPKlqZ5.js:30829:40)
      at Object.invoke (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/module-runner.js:610:34)
      at Object.invoke (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/module-runner.js:671:34)
      at SSRCompatModuleRunner.getModuleInformation (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/module-runner.js:1192:94)
Error: Cannot find module '~/lib/logger.ts' imported from '/Users/andrew.kaiser/Code/andykais/forager/monorepo/packages/core/src/context.ts'
    at fetchModule (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/chunks/dep-ByPKlqZ5.js:52036:19)
    at RunnableDevEnvironment.fetchModule (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/chunks/dep-ByPKlqZ5.js:53130:12)
    at fetchModule (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/chunks/dep-ByPKlqZ5.js:53088:21)
    at handleInvoke (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/chunks/dep-ByPKlqZ5.js:44492:28)
    at EventEmitter.listenerForInvokeHandler (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/chunks/dep-ByPKlqZ5.js:44565:25)
    at EventEmitter.emit (ext:deno_node/_events.mjs:393:28)
    at Object.send (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/chunks/dep-ByPKlqZ5.js:30829:40)
    at Object.invoke (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/module-runner.js:610:34)
    at Object.invoke (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/module-runner.js:671:34)
    at SSRCompatModuleRunner.getModuleInformation (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/module-runner.js:1192:94) {
  stack: "Error: Cannot find module '~/lib/logger.ts' imported from '/Users/andrew.kaiser/Code/andykais/forager/monorepo/packages/core/src/context.ts'\n" +
    "    at fetchModule (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/chunks/dep-ByPKlqZ5.js:52036:19)\n" +
    "    at RunnableDevEnvironment.fetchModule (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/chunks/dep-ByPKlqZ5.js:53130:12)\n" +
    "    at fetchModule (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/chunks/dep-ByPKlqZ5.js:53088:21)\n" +
    "    at handleInvoke (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/chunks/dep-ByPKlqZ5.js:44492:28)\n" +
    "    at EventEmitter.listenerForInvokeHandler (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/chunks/dep-ByPKlqZ5.js:44565:25)\n" +
    "    at EventEmitter.emit (ext:deno_node/_events.mjs:393:28)\n" +
    "    at Object.send (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/chunks/dep-ByPKlqZ5.js:30829:40)\n" +
    "    at Object.invoke (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/module-runner.js:610:34)\n" +
    "    at Object.invoke (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/module-runner.js:671:34)\n" +
    "    at SSRCompatModuleRunner.getModuleInformation (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/module-runner.js:1192:94)",
  name: "Error",
  code: "ERR_MODULE_NOT_FOUND",
  runnerError: Error: RunnerError
    at reviveInvokeError (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/module-runner.js:541:18)
    at Object.invoke (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/module-runner.js:624:15)
    at async SSRCompatModuleRunner.getModuleInformation (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/module-runner.js:1192:73)
    at async request (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/module-runner.js:1214:88)
    at async eval (/Users/andrew.kaiser/Code/andykais/forager/monorepo/packages/core/src/context.ts, <anonymous>:3:44)
    at async ESModulesEvaluator.runInlinedModule (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/module-runner.js:1049:5)
    at async SSRCompatModuleRunner.directRequest (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/module-runner.js:1271:61)
    at async SSRCompatModuleRunner.directRequest (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/chunks/dep-ByPKlqZ5.js:30913:23)
    at async SSRCompatModuleRunner.cachedRequest (file:///Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/vite@6.2.0/node_modules/vite/dist/node/module-runner.js:1167:76)
    at async eval (deno::TypeScript::@forager/core::/Users/andrew.kaiser/Code/andykais/forager/monorepo/packages/core/src/mod.ts, <anonymous>:3:44)
}
Error: Not found: /favicon.ico
    at resolve (/Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/@sveltejs+kit@2.17.3/node_modules/@sveltejs/kit/src/runtime/server/respond.js, <anonymous>:438:18)
    at resolve (/Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/@sveltejs+kit@2.17.3/node_modules/@sveltejs/kit/src/runtime/server/respond.js, <anonymous>:273:34)
    at Object.eval [as handle] (/Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/@sveltejs+kit@2.17.3/node_modules/@sveltejs/kit/src/runtime/server/index.js, <anonymous>:78:56)
    at respond (/Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/@sveltejs+kit@2.17.3/node_modules/@sveltejs/kit/src/runtime/server/respond.js, <anonymous>:271:42)
    at Object.runMicrotasks (ext:core/01_core.js:686:26)
    at processTicksAndRejections (ext:deno_node/_next_tick.ts:59:10)
    at runNextTicks (ext:deno_node/_next_tick.ts:76:3)
    at eventLoopTick (ext:core/01_core.js:184:21) {
  stack: "Error: Not found: /favicon.ico\n" +
    "    at resolve (/Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/@sveltejs+kit@2.17.3/node_modules/@sveltejs/kit/src/runtime/server/respond.js, <anonymous>:438:18)\n" +
    "    at resolve (/Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/@sveltejs+kit@2.17.3/node_modules/@sveltejs/kit/src/runtime/server/respond.js, <anonymous>:273:34)\n" +
    "    at Object.eval [as handle] (/Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/@sveltejs+kit@2.17.3/node_modules/@sveltejs/kit/src/runtime/server/index.js, <anonymous>:78:56)\n" +
    "    at respond (/Users/andrew.kaiser/Code/andykais/forager/monorepo/node_modules/.deno/@sveltejs+kit@2.17.3/node_modules/@sveltejs/kit/src/runtime/server/respond.js, <anonymous>:271:42)\n" +
    "    at Object.runMicrotasks (ext:core/01_core.js:686:26)\n" +
    "    at processTicksAndRejections (ext:deno_node/_next_tick.ts:59:10)\n" +
    "    at runNextTicks (ext:deno_node/_next_tick.ts:76:3)\n" +
    "    at eventLoopTick (ext:core/01_core.js:184:21)",
  status: 404,
  text: "Not Found"

is this expected behavior? I am wondering if I should refactor my repo to only use relative imports, or if this is just something that has yet to be implemented in this plugin.

Let me know if a full repro repo is necessary to help out here. I can add one if its useful, but if this is just a known thing that is not implemented in this plugin, I want to hold off on that

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