NestJS Application won't hot reload after using dotenv package

Viewed 33

I try to configure hot reload on my Nestjs application using this article: https://docs.nestjs.com/recipes/hot-reload

I followed exactly the instructions in the first section ("With CLI") but it fails for me. But I do know the reason, just don't know how to resolve this issue. My hot reload script in package.json is exactly as the article says, except 1 change: "start:dev": "dotenv -e ./envs/.env.development -e ../../prisma/.env.development nest build --watch",

This is my script. As you can see, I apply the process with some environment variables. When running in this way, application boots fine, but Hot Reload won't work. When booting only with "start:dev": "nest build --watch",

It runs with Hot Reload. (Note that I configure webpack in nest-cli.json file, this is why it missing in script statement).

Anyone could tell why applying my own envs makes this issue?

webpack.config.js file:

const nodeExternals = require('webpack-node-externals');
const { RunScriptWebpackPlugin } = require('run-script-webpack-plugin');

const configuration = (options, webpack) => ({
    ...options,
    entry: ['webpack/hot/poll?100', options.entry],
    externals: [
        nodeExternals({
            allowlist: ['webpack/hot/poll?100'],
        }),
    ],
    plugins: [
        ...options.plugins,
        new webpack.HotModuleReplacementPlugin(),
        new webpack.WatchIgnorePlugin({
            paths: [/\.js$/, /\.d\.ts$/],
        }),
        new RunScriptWebpackPlugin({ name: options.output.filename, autoRestart: false }),
    ],
});

module.exports = configuration;

nest-cli.json file:

{
    "$schema": "https://json.schemastore.org/nest-cli",
    "collection": "@nestjs/schematics",
    "sourceRoot": "src",
    "compilerOptions": {
        "webpack": true,
        "webpackConfigPath": "./webpack.config.js",
        "deleteOutDir": true
    }
}

main.ts file:

declare const module: any;

async function bootstrap() {
    const prisma = new PrismaClient();

    // * https://github.com/prisma/prisma/issues/5430#issuecomment-1098715558
    await prisma.$runCommandRaw({
        createIndexes: 'RefreshToken',
        indexes: [
            {
                key: {
                    createdAt: 1,
                },
                name: 'Refresh Token Index',
                expireAfterSeconds: JWT_REFRESH_TOKEN_DURATION_MINUTES * 60,
            },
        ],
    });

    const app = await NestFactory.create(AppModule);

    if (module.hot) {
        module.hot.accept();
        module.hot.dispose(() => app.close());
    }

    const port = config.get('port', { infer: true });

    await app.listen(port);
}

bootstrap();

Ny env file:

NODE_ENV="development"
PORT="3000"
0 Answers
Related