@nestjs/config
和nestjs/config
看起来像一个库,实际上是两个库,用法也不同@nestjs/config是官方的
:(GitHub地址)https://github.com/nestjs/confignestjs/config更像是第三方插件
:(GitHub地址)https://github.com/nestjsx/nestjs-config从年份上来看,早期没有
config
配置插件时,应该都用的时nestjs/config
提供的
src/config/email.config.ts
,当然名字随便取(又不是java)import { PugAdapter } from '@nestjs-modules/mailer/dist/adapters/pug.adapter';
import { registerAs } from '@nestjs/config';
import { join } from 'path';
export default registerAs('email', () => ({
transport: {
host: 'smtp.sina.cn',
port: 25,
ignoreTLS: true,
secure: false,
auth: {
user: 'xxx',
pass: 'xxx', // xxx是什么你懂的
}
},
defaults: {
from: '"nest-modules" <modules@nestjs.com>',
},
template: {
// 这里注意一下路径, 不然加载的路径是错误的
dir: join(__dirname, '../templates/email'),
adapter: new PugAdapter(),
options: {
strict: true,
}
}
}));
app.module.ts
中进行配置import { MailerModule } from '@nestjs-modules/mailer';
import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { EmailModule } from './email/email.module';
import EmailConfig from './config/email.config';
@Module({
imports: [
EmailModule,
ConfigModule.forRoot({
// 不加载env环境变量
ignoreEnvFile: true,
// 加载我们的邮件配置
load: [EmailConfig],
}),
MailerModule.forRootAsync({
// 特别注意一定要导入, 不导入就报错, 说你没在imports引入
imports: [ConfigModule],
useFactory: (config: ConfigService) => {
// 拿到我们配置的config别名 #registerAs方法
return config.get('email');
},
inject: [ConfigService]
}),
],
controllers: [],
providers: [],
})
export class AppModule {}
nest/config
中是这样配置的// 获取配置
ConfigModule.load(resolve(__dirname, 'config', '**/!(*.d).{ts,js}')),
// 邮件配置
MailerModule.forRootAsync({
useFactory: (config: ConfigService) => config.get('email'),
inject: [ConfigService],
}),
它不需要
imports
就可以run了,导致我使用@nest/config
时,卡了半天(看了@nest/config官方文档
、nest/config
文档都没解决),最后解决办法是查看了@nestjs-modules-mailer
的GitHub官方Doc才解决的
@nestjs-modules-mailer插件官方doc解决路径:
https://github.com/CrowdLinker/nestjs-mailer#asynchronous
更多@nest/config用法推荐查看官网教程,比如yaml配置环境变量…这种方便开发的配置还是有必要学习的