Rip*_*346 4 command-line typescript nestjs
我知道如何从命令行运行脚本,使用npm或npx ts-node [script.ts]正如此处所述。
我的问题是不同的,现在我可以运行脚本,我可以使用项目中模块内部的服务吗?假设我有这个结构,它通常在项目内部被其他模块调用:
foo/foo.module.ts
import { HttpModule, Module } from '@nestjs/common';
@Module({
providers: [FooService],
imports: [HttpModule],
exports: [FooService]
})
export class FooModule { }
Run Code Online (Sandbox Code Playgroud)
foo/foo.service.ts
import { HttpService, Injectable } from '@nestjs/common';
@Injectable()
export class FooService {
constructor(
private readonly httpService: HttpService,
) {}
bar() {
console.log('do stuff');
}
}
Run Code Online (Sandbox Code Playgroud)
如何bar()在文件内部调用/src/script.ts然后调用npx ts-node script.ts保留所有导入?谢谢你。
假设您有一个这样的应用程序模块:
import { Module } from '@nestjs/common';
import { UsersModule } from './users/users.module';
@Module({
imports: [
UsersModule,
],
})
export class ApplicationModule {}
Run Code Online (Sandbox Code Playgroud)
以及 UsersModule 以这种方式使用的 UserService:
import { Module } from '@nestjs/common';
@Module({
providers: [UsersService],
exports: [UsersService],
})
export class UsersModule {}
Run Code Online (Sandbox Code Playgroud)
并且您想创建一个命令以直接从命令行创建新用户。
您可以创建一个名为的文件console.ts并放置以下内容:
import { NestFactory } from '@nestjs/core';
import { ApplicationModule } from './application.module';
import { UsersService } from './users/users.service';
async function bootstrap() {
const application = await NestFactory.createApplicationContext(
ApplicationModule,
);
const command = process.argv[2];
switch (command) {
case 'create-administrator-user':
const usersService = application.get(UsersService);
await usersService.create({
username: 'administrator',
password: 'password',
});
break;
default:
console.log('Command not found');
process.exit(1);
}
await application.close();
process.exit(0);
}
bootstrap();
Run Code Online (Sandbox Code Playgroud)
现在,您package.json可以创建以下脚本:
"execute": "ts-node ./src/console.ts"
Run Code Online (Sandbox Code Playgroud)
现在您可以在 NestJS 上下文中调用自定义命令,如下例所示:
// Using Yarn
yarn execute create-administrator-user
// Using NPM
npm run execute create-administrator-user
Run Code Online (Sandbox Code Playgroud)
小智 5
添加到@Emanuele 答案。如果您对 src/[...] 相对路径有问题,则不要使用 ts-node 运行脚本,而是尝试使用以下“node -r ts-node/register -r tsconfig-paths/register path_to_script”运行
| 归档时间: |
|
| 查看次数: |
1038 次 |
| 最近记录: |