typescript - Kan geen modules importeren vanaf subpaden in een gedeeld pakket met gebruik van esbuild
Ik probeer mijn gedeelde pakket zo in te stellen dat het mogelijk is om modules te importeren vanaf specifieke subpaden (bijv. @shared/utils, @shared/hooks). Om dit te bereiken, heb ik mijn package.json als volgt geconfigureerd:
// package.json
{
// ..
"exports": {
".": {
"default": "./dist/index.js",
"types": "./dist/index.d.ts"
},
"./utils": {
"default": "./dist/utils/index.js",
"types": "./dist/utils/index.d.ts"
},
// ..
}
}
Ik gebruik esbuild als mijn modulebundelaar, met de volgende configuratie:
// build.mjs
const libBuildOptions = {
entryPoints: ['./src/**/*'],
outdir: 'dist',
tsconfig: './tsconfig.json',
target: 'es6',
plugins: [nodeExternalsPlugin()],
define,
format: 'esm',
outExtension: { '.js': '.js' },
sourcemap: true
}
const build = async () => {
await esbuild.build(libBuildOptions);
const execAsync = promisify(exec);
await execAsync('tsc --emitDeclarationOnly --outDir dist');
};
Mijn bronbestanden zijn als volgt gestructureerd:
// src/index.ts
export * from './utils';
// ..
// src/utils/index.ts
export * from './testSentry';
export * from './config';
export * from './theme';
Met deze setup, wanneer ik probeer modules uit dit gedeelde pakket te importeren in andere pakketten, kan ik alleen importeren vanaf het @shared-pad, niet vanaf subpaden zoals @shared/utils.
Is er een oplossing om importeren vanaf subpaden toe te staan zoals bedoeld?
Alle hulp of suggesties zouden zeer op prijs worden gesteld. Dank je!
- Geconfigureerd
package.jsonmetexports-veld om subpaden te specificeren:
{
"exports": {
".": {
"default": "./dist/index.js",
"types": "./dist/index.d.ts"
},
"./utils": {
"default": "./dist/utils/index.js",
"types": "./dist/utils/index.d.ts"
}
}
}
- Stel de esbuild-configuratie in in
build.mjs:
const libBuildOptions = {
entryPoints: ['./src/**/*'],
outdir: 'dist',
tsconfig: './tsconfig.json',
target: 'es6',
plugins: [nodeExternalsPlugin()],
format: 'esm',
outExtension: { '.js': '.js' },
sourcemap: true
}
const build = async () => {
await esbuild.build(libBuildOptions);
await execAsync('tsc --emitDeclarationOnly --outDir dist');
};
- De bronbestanden gestructureerd om te exporteren vanuit subpaden:
// src/index.ts
export * from './utils';
// src/utils/index.ts
export * from './testSentry';
export * from './config';
export * from './theme';
- Geprobeerd directe bestandsroutes op te geven in
exports:
{
"exports": {
"./utils/date.js": {
"default": "./dist/utils/date.js",
"types": "./dist/utils/date.d.ts"
}
}
}
Onderzochte TypeScript-configuratie:
- Gecontroleerd of
tsconfig.jsonmoduleResolutionhad ingesteld opnode16ofnodenext.
- Gecontroleerd of
- Overwogen om
moduleResolutionte wijzigen inbundler.
Ik verwachtte modules te kunnen importeren vanuit subpaden zoals @shared/utils of @shared/hooks, maar de imports werken alleen vanuit het hoofdpad @shared. Ik kan importeren vanuit @extension/shared/dist/utils, maar niet vanuit @extension/shared/utils zoals bedoeld.