Skip to content

Unable to require/import files other than main export in Node #2078

Open
@tylersticka

Description

@tylersticka

Overview

We currently define an exports field in our package.json, with additional files (such as compiled tokens) available via other fields.

But according to the Node docs, this prevents other files from being imported:

When the "exports" field is defined, all subpaths of the package are encapsulated and no longer available to importers. For example, require('pkg/subpath.js') throws an ERR_PACKAGE_PATH_NOT_EXPORTED error.

I've experienced this in a project where I wanted to import our design tokens.

Steps to reproduce

You can follow these steps to create a barebone test case project:

  1. Create a directory: mkdir cloudfour-export-issue
  2. Enter that directory: cd cloudfour-export-issue
  3. Initialize a new npm project: npm init -y
  4. Install our patterns: npm i -D @cloudfour/patterns
  5. Create a script that attempts to require tokens:printf "const tokens = require(\"@cloudfour/patterns/src/compiled/tokens/json/tokens.json\");" > index.js
  6. Run script: node index

Here is an example of the error you will likely see:

node:internal/modules/cjs/loader:499
      throw e;
      ^

Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: Package subpath './src/compiled/tokens/json/tokens.json' is not defined by "exports" in /PATH/TO/cloudfour-export-issue/node_modules/@cloudfour/patterns/package.json
    at new NodeError (node:internal/errors:387:5)
    at throwExportsNotFound (node:internal/modules/esm/resolve:464:9)
    at packageExportsResolve (node:internal/modules/esm/resolve:748:3)
    at resolveExports (node:internal/modules/cjs/loader:493:36)
    at Function.Module._findPath (node:internal/modules/cjs/loader:533:31)
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:942:27)
    at Function.Module._load (node:internal/modules/cjs/loader:804:27)
    at Module.require (node:internal/modules/cjs/loader:1028:19)
    at require (node:internal/modules/cjs/helpers:102:18)
    at Object.<anonymous> (/Users/tylersticka/Repos/exports-test/index.js:1:16) {
  code: 'ERR_PACKAGE_PATH_NOT_EXPORTED'
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    👷 environmentSetup, build tools, configuration, etc.

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions