conditional-export

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);
findEntryInExports(exports, ['development']);
findEntryInExports(exports, ['production']);
findPathInExports
import { findPathInExports } from 'conditional-export';
const exports = {
'./lib/*': {
require: './src/*.cjs',
development: './src/*.development.js',
default: './src/*.js',
},
}
findPathInExports('./lib/index', exports);
findPathInExports('./lib/index', exports, ['development']);
findPathInExports('./lib/index', exports, ['production']);
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);
findPathInExports('./a', exports, ['node', 'require']);
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);
findPathInImports('#external-feature', imports);
findPathInImports('#timezones/utc/index.mjs', imports);
findPathInImports('#moment/data/timezones/utc/index.mjs', imports);
findPathInImports('#timezones/utc/', imports);
findPathInImports('#unknown', imports);
findPathInImports('#moment', imports);
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);
parseModuleId
import { parseModuleId } from 'conditional-export';
parseModuleId('vue')
parseModuleId('vue/');
parseModuleId('@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)
: new URL(data.path, pkgDir).href;
} else {
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>