Skip to content

vp doesn't resolve vite.config.ts with --conditions flag #2576

Description

@ryansuhartanto

Describe the bug

I am doing

A package whose exports map has a dev condition pointing at TypeScript sources, and whose vite.config.ts imports the package by its own name (@scope/thing/rules). Running vp lint with the condition passed via NODE_OPTIONS=--conditions=dev, since vp has no --conditions flag of its own.

What I expect

vp resolves @scope/thing/rules through the dev condition to ./src/rules.ts, so the config loads from sources. Node resolves it that way with --conditions=dev, and tsc does with customConditions: ["dev"].

What is actually happening

The condition is ignored. Resolution falls through to default, ./dist/rules.js. With no dist/ built, that file doesn't exist, so the import is reported unresolved and marked external. Being external, it is then imported at runtime from node_modules/.vite-temp/, where Node's package scope lookup stops at the node_modules segment and the self-reference cannot resolve, so config loading fails outright.

It emits the following error
$ NODE_OPTIONS=--conditions=dev vp lint
vite.config.ts (1:361) [UNRESOLVED_IMPORT] Could not resolve '@scope/thing/rules' in vite.config.ts
   ╭─[ vite.config.ts:1:362 ]
   │
 1 │ const __vite_injected_original_dirname = "$PWD/vite-plus-dev-config";const __vite_injected_original_filename = "$PWD/vite-plus-dev-config/vite.config.ts";const __vite_injected_original_import_meta_url = "file://$PWD/vite-plus-dev-config/vite.config.ts";import rules from "@scope/thing/rules";
   │                                                                                                                                                                                                                                                                                                                                                                          ──────────┬─────────  
   │                                                                                                                                                                                                                                                                                                                                                                                    ╰─────────── Module not found, treating it as an external dependency
───╯

failed to load config from $PWD/vite-plus-dev-config/vite.config.ts
[Vite+] resolve universal vite config error: Error [ERR_MODULE_NOT_FOUND]: Cannot find package '@scope/thing' imported from $PWD/vite-plus-dev-config/node_modules/.vite-temp/vite.config.ts.timestamp-1787978765772-966599996ab688.mjs
    at Object.getPackageJSONURL (node:internal/modules/package_json_reader:301:9)
    at packageResolve (node:internal/modules/esm/resolve:784:25)
    at moduleResolve (node:internal/modules/esm/resolve:873:18)
    at defaultResolve (node:internal/modules/esm/resolve:1006:11)
    at #cachedDefaultResolve (node:internal/modules/esm/loader:708:20)
    at #resolveAndMaybeBlockOnLoaderThread (node:internal/modules/esm/loader:728:38)
    at ModuleLoader.resolveSync (node:internal/modules/esm/loader:766:56)
    at #resolve (node:internal/modules/esm/loader:690:17)
    at ModuleLoader.getOrCreateModuleJob (node:internal/modules/esm/loader:610:35)
    at ModuleJob.syncLink (node:internal/modules/esm/module_job:277:33) {
  code: 'ERR_MODULE_NOT_FOUND'
}
error: Failed to resolve vite config: GenericFailure, Cannot find package '@scope/thing' imported from $PWD/vite-plus-dev-config/node_modules/.vite-temp/vite.config.ts.timestamp-1787978765772-966599996ab688.mjs
error: script "lint" exited with code 1

Running bun run build first makes dist/rules.js exist and vp lint passes, which shows resolution itself works and only the condition is missing.

Reproduction

https://github.com/ryansuhartanto/vite-plus-dev-config

Steps to reproduce

$ bun install
$ bun run lint # Fail
$ bun run build
$ bun run lint # Now succeed

System Info

Local vite-plus:
  vite-plus  v0.3.0

Tools:
  vite             v8.2.2
  rolldown         v1.2.5
  vitest           v4.1.11
  oxfmt            v0.64.0
  oxlint           v1.79.0
  oxlint-tsgolint  v7.0.2001
  tsdown           v0.22.14

Used Package Manager

bun

Logs

Validations

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    Fields

    Priority

    None yet

    Effort

    None yet

    Target date

    None yet

    Start date

    None yet

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions