🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more
Socket
Book a DemoInstallSign in
Socket

conditional-export

Package Overview
Dependencies
Maintainers
1
Versions
8
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

conditional-export

find node package entry or path in exports

1.1.0
latest
Source
npm
Version published
Weekly downloads
11
22.22%
Maintainers
1
Weekly downloads
 
Created
Source

conditional-export

NPM version

Find entry or path in package.json exports or imports.

https://nodejs.org/docs/latest-v12.x/api/packages.html#packages_exports

Usage

Apis usage description.

Debugging platform: https://imtaotao.github.io/conditional-export/

findEntryInExports

import { findEntryInExports } from 'conditional-export';

const exports = {
  '.': {
    require: './index.cjs',
    development: './index.development.js',
    default: './index.js',
  },
}

findEntryInExports(exports); // ./index.cjs
findEntryInExports(exports, ['development']); // ./index.development.js
findEntryInExports(exports, ['production']); // ./index.js

findPathInExports

import { findPathInExports } from 'conditional-export';

const exports = {
  './lib/*': {
    require: './src/*.cjs',
    development: './src/*.development.js',
    default: './src/*.js',
  },
}

findPathInExports('./lib/index', exports); // ./src/index.cjs
findPathInExports('./lib/index', exports, ['development']); // ./src/index.development.js
findPathInExports('./lib/index', exports, ['production']); // ./src/index.js

Multiple conditions, default conditions is ['require'].

You can specify multiple conditions.

import { findPathInExports } from 'conditional-export';

const exports = {
  './a': {
    node: {
      import: './feature-node.mjs',
      require: './feature-node.cjs',
    },
    default: './feature.default.mjs',
  }
};

findPathInExports('./a', exports); // './feature.default.mjs'
findPathInExports('./a', exports, ['node', 'require']); // './feature-node.cjs'

findPathInImports

import { findPathInImports } from 'conditional-export';

const imports = {
  '#timezones/': './data/timezones/',
  '#timezones/utc': './data/timezones/utc/index.mjs',
  '#external-feature': 'external-pkg/feature',
  '#moment/': './'
}

findPathInImports('#timezones/utc', imports); // ./data/timezones/utc/index.mjs
findPathInImports('#external-feature', imports); // external-pkg/feature
findPathInImports('#timezones/utc/index.mjs', imports); // ./data/timezones/utc/index.mjs
findPathInImports('#moment/data/timezones/utc/index.mjs', imports); // ./data/timezones/utc/index.mjs
findPathInImports('#timezones/utc/', imports); // ./data/timezones/utc/
findPathInImports('#unknown', imports); // null
findPathInImports('#moment', imports); // null

findPkgData

import { findPkgData } from 'conditional-export';

const exports = {
  './': './src/util/',
  './timezones/': './data/timezones/',
  './timezones/utc': './data/timezones/utc/index.mjs',
}

const data = findPkgData('@vue/core/timezones/pdt.mjs', exports);
// {
//   name: '@vue/core',
//   version: '',
//   path: './data/timezones/pdt.mjs',
//   resolve: '@vue/core/data/timezones/pdt.mjs',
//   raw: '@vue/core/timezones/pdt.mjs',
// }

parseModuleId

import { parseModuleId } from 'conditional-export';

parseModuleId('vue')
// {
//   name: 'vue',
//   path: '',
//   version: '',
//   raw: 'vue',
// }

parseModuleId('vue/');
// {
//   name: 'vue',
//   path: './',
//   version: '',
//   raw: 'vue/',
// }

parseModuleId('@vue/core@v1.0.0/a.js');
// {
//   name: '@vue/core',
//   path: './a.js',
//   version: 'v1.0.0',
//   raw: '@vue/core@v1.0.0/a.js',
// }

Extended usage

When you want to convert to absolute path, you can handle it like this.

import { findPkgData } from 'conditional-export';

const data = findPkgData('vue/src/index.js', exports, ['require', ...]);

if (data.path !== null) {
  const resolvePath = isNodeEnv
    ? path.resolve(pkgDir, data.path) // NodeJs
    : new URL(data.path, pkgDir).href; // Browser
} else {
  // If the module doesn't exist, you should throw an error.
  throw new Error(`Module '${data.raw}' Not Found`);
}

CDN

<!DOCTYPE html>
<html lang='en'>
<body>
  <script src='https://unpkg.com/conditional-export/dist/entry.umd.js'></script>
  <script>
    const {
      findPkgData,
      findPathInImports,
      findPathInExports,
      findEntryInExports,
      parseModuleId,
    } = NodePackageExports;
    
    // ...
  </script>
</body>
</html>

Keywords

conditional

FAQs

Package last updated on 29 Apr 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts