It is a fork of ts-node package.
You can use a glob pattern for imports, like '../../modules/*.ts' or '../../meta/**/*.ts'.
Such import returns default value, which is an object, where key is a resolved path and value is a loaded module.
For example, let us take such src folder structure:
- index.ts
- commands
- user
- firstUserCommand.ts
- secondUserCommand.ts
- admin
- firstAdminCommand.ts
- secondAdminCommand.ts
- user
// commands/user/firstUserCommand.ts
export const action = 'first'
export const limit = 10// commands/user/secondUserCommand.ts
export const action = 'second'
export const limit = 25// commands/admin/firstAdminCommand.ts
export const action = 'first'
export default 'some default value'// commands/admin/secondAdminCommand.ts
export const action = 'second'
export default 'another default value'Then, usage:
// index.ts
// @ts-expect-error Glob Import
import commands from './commands/**/*.ts'commands would be this:
{
'./commands/admin/firstAdminCommand.ts': {
action: 'first',
default: 'some default value'
},
'./commands/admin/secondAdminCommand.ts': {
action: 'second',
default: 'another default value'
},
'./commands/user/firstUserCommand.ts': {
action: 'first',
limit: 10
},
'./commands/user/secondUserCommand.ts': {
action: 'second',
limit: 25
}
}You can also use dynamic imports, you might want to do something like this:
// index.ts
const load = async () => {
// @ts-expect-error Glob Import
const commands = (await import('./commands/**/*.ts')).default as ...
return commands
}Note
To resolve imports, there's a folder named .ts_node_temp will be created everytime you run ts-node. Add this folder to your .gitignore.
Important
Do not forget that JavaScript does not support glob imports by itself. Thus, you need to implement a plugin for your build stage that does the same mapping for glob imports as this fork of ts-node does. If such mapping does not work for you, just go here and over here, then change the output.