nrwl/nx

@nx/js:tsc fails to declare proper export on 'index' file in 'additionalEntryPoints'

shlomiassaf opened this issue · 0 comments

Current Behavior

Declaring barrel additional export does not declare a barrel reference in exports:

{
    "package": {
      "executor": "@nx/js:tsc",
      "outputs": ["{options.outputPath}"],
      "options": {
        "outputPath": "dist/libs/my-lib",
        "tsConfig": "libs/my-lib/tsconfig.lib.json",
        "main": "libs/my-lib/src/index.ts",
        "assets": ["libs/my-lib/*.md"],
        "srcRootForCompilationRoot": "libs/my-lib",
        "additionalEntryPoints": [
          "libs/my-lib/tasks/index.ts"
        ],
        "generateExportsField": true
      }
    }
}

Yields the following exports, in package.json:

{
  "exports": {
    "./package.json": "./package.json",
    ".": "./src/index.js",
    "./tasks/index": "./tasks/index.js"
  }
}

The additional export was libs/my-lib/tasks/index.ts and the exported reference was "./tasks/index": "./tasks/index.js"

This will work with import { something } from 'my-lib/tasks/index'
It will not work with import { something } from 'my-lib/tasks'

Expected Behavior

When index is exported, also export a barrel reference.

{
  "exports": {
    "./package.json": "./package.json",
    ".": "./src/index.js",
    "./tasks/index": "./tasks/index.js",
    "./tasks": "./tasks/index.js"
  }
}

Around here:

const isJsFile = jsRegex.test(fileExt);

GitHub Repo

No response

Steps to Reproduce

Nx Report

Node   : 18.18.2
OS     : darwin-arm64
yarn   : 1.22.18

nx (global)        : 19.0.2
nx                 : 19.0.2
@nx/js             : 19.0.2
@nx/jest           : 19.0.2
@nx/linter         : 19.0.2
@nx/eslint         : 19.0.2
@nx/workspace      : 19.0.2
@nx/devkit         : 19.0.2
@nx/eslint-plugin  : 19.0.2
@nx/node           : 19.0.2
@nx/plugin         : 19.0.2
@nx/react          : 19.0.2
@nrwl/tao          : 19.0.2
@nx/web            : 19.0.2
@nx/webpack        : 19.0.2
typescript         : 5.4.5
---------------------------------------
Local workspace plugins:
         @pebula/nx-api-extractor
         @pebula/nx-build-pipe

Failure Logs

When running code that use the packaged & published library I get the following error:

Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: Package subpath './tasks' is not defined by "exports" in /Users/XXXX/project/test/node_modules/my-lib/package.json
    at new NodeError (node:internal/errors:405:5)
    at exportsNotFound (node:internal/modules/esm/resolve:362:10)
    at packageExportsResolve (node:internal/modules/esm/resolve:698:9)
    at resolveExports (node:internal/modules/cjs/loader:567:36)
    at Function.Module._findPath (node:internal/modules/cjs/loader:636:31)
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:1063:27)
    at Function.Module._resolveFilename.sharedData.moduleResolveFilenameHook.installedValue (/Users/XXXX/project/test/node_modules/@cspotcode/source-map-support/source-map-support.js:811:30)
    at Function.Module._resolveFilename (/Users/XXXX/project/test/node_modules/tsconfig-paths/lib/register.js:75:40)
    at Function.Module._load (node:internal/modules/cjs/loader:922:27)
    at Module.require (node:internal/modules/cjs/loader:1143:19) {
  code: 'ERR_PACKAGE_PATH_NOT_EXPORTED'
}

I assume its related to my setup, maybe the sourcemap pipeline, but this should be exported as a barrel regardless.

Package Manager Version

No response

Operating System

  • macOS
  • Linux
  • Windows
  • Other (Please specify)

Additional Information

No response