我知道如何从命令行运行脚本,使用npm
或npx ts-node [script.ts]
,正如所述here。
我的问题是不同的,现在我可以运行脚本,我可以使用项目中模块内部的服务吗?假设我有这样的结构,它通常在项目内部被其他模块调用:
foo/foo.module.ts
import { HttpModule, Module } from '@nestjs/common';
@Module({
providers: [FooService],
imports: [HttpModule],
exports: [FooService]
})
export class FooModule { }
foo/foo.service.ts
import { HttpService, Injectable } from '@nestjs/common';
@Injectable()
export class FooService {
constructor(
private readonly httpService: HttpService,
) {}
bar() {
console.log('do stuff');
}
}
如何在文件/src/script.ts
中调用bar()
,然后调用npx ts-node script.ts
,保留所有导入?谢谢你。
4条答案
按热度按时间xtupzzrd1#
假设你有一个像这样的应用程序模块:
和UsersModule以这种方式使用的UserService:
并且您希望创建一个命令,以直接从命令行创建一个新用户。
您可以创建一个名为
console.ts
的文件,并将以下内容放入:现在,在
package.json
中,您可以创建以下脚本:现在,您可以在NestJS上下文中调用自定义命令,如以下示例所示:
ercv8c1e2#
添加到@Emanuele的答案。如果src/[...]相对路径有问题,则不要使用ts-node运行脚本,而是尝试使用以下“node -r ts-node/register -r tsconfig-paths/register path_to_script”运行
waxmsbnn3#
通常,要使用服务,您需要示例化服务类。Nest通常是
NestFactory.create
的一部分。你可以做的事情是这样的:现在,您所需要的就是编译这些文件,并像在服务器上一样使用
node
运行它们。qacovj5a4#
要解决相对路径问题,请将此添加到ts-config中
来源:https://typestrong.org/ts-node/docs/paths/