Surprising (or incorrect) priorities with package.json exports fields? · Issue #46334 · microsoft/TypeScript (original) (raw)

I'm trying a scenario of module: nodenext with Vue.js. I hit a few issues with resolution of declaration files.

Here's the current Vue.js declarations package.json:

{ "name": "vue", "version": "3.2.20", "description": "The progressive JavaScript framework for buiding modern web UI.", "main": "index.js", "module": "dist/vue.runtime.esm-bundler.js", "types": "dist/vue.d.ts", // ... "exports": { ".": { "import": { "node": "./index.mjs", "default": "./dist/vue.runtime.esm-bundler.js" }, "require": "./index.js" }, // ... "./package.json": "./package.json" } // ... }

However, referencing this in a project results in the following error:

import * as Vue from "vue"; // ~~~~~ // error // Could not find a declaration file for module 'vue'. 'USER_DIR/hackathon/vue-proj/node_modules/vue/index.js' implicitly has an 'any' type. // Try npm i --save-dev @types/vue if it exists or add a new declaration (.d.ts) file containing declare module 'vue';

This kind of makes sense - I think you could argue that this isn't configured right for moduleResolution: node12 or later.

I was able to get this working by adding

"exports": { ".": { "import": { "node": "./index.mjs", "default": "./dist/vue.runtime.esm-bundler.js" }, "require": "./index.js",

But the following DID NOT work.

"exports": { ".": { "import": { "node": "./index.mjs", "default": "./dist/vue.runtime.esm-bundler.js"

That part seems like a bug, right?